diff --git a/.flake8 b/.flake8
index 8c0be3c7df64..adbd300f3c60 100644
--- a/.flake8
+++ b/.flake8
@@ -1,6 +1,6 @@
[flake8]
max-line-length = 88
-exclude = src/py/flwr/proto
+exclude = framework/src/py/flwr/proto
ignore = E302,W503,E203
per-file-ignores =
- src/py/flwr/server/strategy/*.py:E501
+ framework/src/py/flwr/server/strategy/*.py:E501
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 8c635c516450..7519f227af81 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -22,10 +22,10 @@ README.md @jafermarq @tanertopal @danieljanes
/src/py/flwr/cli/new/templates @jafermarq @tanertopal @danieljanes
# Changelog
-/doc/source/ref-changelog.md @jafermarq @tanertopal @danieljanes
+/framework/docs/source/ref-changelog.md @jafermarq @tanertopal @danieljanes
# Translations
-/doc/locales @charlesbvll @tanertopal @danieljanes
+/framework/docs/locales @charlesbvll @tanertopal @danieljanes
# GitHub Actions and Workflows
/.github/workflows @Robert-Steiner @tanertopal @danieljanes
diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml
index b08d2bb66863..d191a6bec603 100644
--- a/.github/workflows/android-release.yml
+++ b/.github/workflows/android-release.yml
@@ -13,7 +13,7 @@ jobs:
publish:
defaults:
run:
- working-directory: src/kotlin
+ working-directory: framework/src/kotlin
name: Release build and publish
if: github.repository == 'adap/flower'
runs-on: ubuntu-22.04
diff --git a/.github/workflows/baselines.yml b/.github/workflows/baselines.yml
index c4485fe72d10..ffb4bf1b788c 100644
--- a/.github/workflows/baselines.yml
+++ b/.github/workflows/baselines.yml
@@ -36,7 +36,7 @@ jobs:
FILTER+=$(echo "$DIR: ${BASELINES_PATH}/**\n")
done < <(find baselines -maxdepth 1 \
-name ".*" -prune -o \
- -path "baselines/doc" -prune -o \
+ -path "baselines/docs" -prune -o \
-path "baselines/dev" -prune -o \
-path "baselines/baseline_template" -prune -o \
-path "baselines/flwr_baselines" -prune -o \
@@ -82,8 +82,8 @@ jobs:
- name: Testing ${{ matrix.baseline }}
working-directory: baselines
- run: ./dev/test-baseline.sh ${{ matrix.baseline }}
+ run: ./framework/dev/test-baseline.sh ${{ matrix.baseline }}
- name: Test Structure of ${{ matrix.baseline }}
working-directory: baselines
- run: ./dev/test-baseline-structure.sh ${{ matrix.baseline }}
+ run: ./framework/dev/test-baseline-structure.sh ${{ matrix.baseline }}
diff --git a/.github/workflows/cache-cleanup.yml b/.github/workflows/cache-cleanup.yml
index dca5505f7bf6..dd322a36a94e 100644
--- a/.github/workflows/cache-cleanup.yml
+++ b/.github/workflows/cache-cleanup.yml
@@ -42,7 +42,7 @@ jobs:
gh extension install actions/gh-actions-cache
REPO=${{ github.repository }}
- LATEST_KEY=pythonloc-${{ matrix.directory }}-${{ env.pythonLocation }}-${{ hashFiles(format('./e2e/{0}/pyproject.toml', matrix.directory)) }}
+ LATEST_KEY=pythonloc-${{ matrix.directory }}-${{ env.pythonLocation }}-${{ hashFiles(format('./framework/e2e/{0}/pyproject.toml', matrix.directory)) }}
echo "Fetching list of cache keys"
cacheKeys=$(gh actions-cache list -R $REPO | grep "${{ matrix.directory }}" | cut -f 1 )
diff --git a/.github/workflows/cpp.yml b/.github/workflows/cpp.yml
index 97d545132dbb..dff1d5a0f394 100644
--- a/.github/workflows/cpp.yml
+++ b/.github/workflows/cpp.yml
@@ -3,10 +3,10 @@ name: C++ SDK
on:
push:
branches: ['main']
- paths: ['src/cc/flwr/**']
+ paths: ['framework/src/cc/flwr/**']
pull_request:
branches: ['main']
- paths: ['src/cc/flwr/**']
+ paths: ['framework/src/cc/flwr/**']
jobs:
build_and_test:
@@ -37,30 +37,30 @@ jobs:
- name: Check source Formatting
run: |
- find src/cc/flwr/src -name '*.cc' | xargs clang-format -i
+ find framework/src/cc/flwr/src -name '*.cc' | xargs clang-format -i
git diff --exit-code
- name: Check header Formatting
run: |
- find src/cc/flwr/include -name '*.h' -not -path "src/cc/flwr/include/flwr/*" | xargs clang-format -i
+ find framework/src/cc/flwr/include -name '*.h' -not -path "framework/src/cc/flwr/include/flwr/*" | xargs clang-format -i
git diff --exit-code
- name: Build
run: |
mkdir -p build
cd build
- cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ../src/cc/flwr
+ cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ../framework/src/cc/flwr
make
- name: Run clang-tidy
run: |
cd build
- find ../src/cc/flwr/src -name '*.cc' | xargs clang-tidy
+ find ../framework/src/cc/flwr/src -name '*.cc' | xargs clang-tidy
- name: Run cppcheck
run: |
cd build
- cppcheck --enable=all -I../src/cc/flwr/include ../src/cc/flwr/src
+ cppcheck --enable=all -I../framework/src/cc/flwr/include ../framework/src/cc/flwr/src
- name: End-to-end test
run: |
diff --git a/.github/workflows/deprecated_baselines.yml b/.github/workflows/deprecated_baselines.yml
index 0859c948e909..23a94edf4532 100644
--- a/.github/workflows/deprecated_baselines.yml
+++ b/.github/workflows/deprecated_baselines.yml
@@ -33,4 +33,4 @@ jobs:
run: |
python -m poetry install
- name: Lint + Test (isort/black/mypy/pylint/pytest)
- run: ./dev/test.sh
+ run: ./framework/dev/test.sh
diff --git a/.github/workflows/devtools.yml b/.github/workflows/devtools.yml
index 3a7bd91b3181..5b13ed229a0b 100644
--- a/.github/workflows/devtools.yml
+++ b/.github/workflows/devtools.yml
@@ -5,12 +5,12 @@ on:
branches:
- main
paths:
- - "src/py/flwr_tool/**"
+ - "framework/src/py/flwr_tool/**"
pull_request:
branches:
- main
paths:
- - "src/py/flwr_tool/**"
+ - "framework/src/py/flwr_tool/**"
concurrency:
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.event.pull_request.number || github.ref }}
diff --git a/.github/workflows/docker-readme.yml b/.github/workflows/docker-readme.yml
index 9e156e835056..1e9f48249b80 100644
--- a/.github/workflows/docker-readme.yml
+++ b/.github/workflows/docker-readme.yml
@@ -5,7 +5,7 @@ on:
branches:
- 'main'
paths:
- - 'src/docker/**/README.md'
+ - 'framework/src/docker/**/README.md'
jobs:
collect:
@@ -24,7 +24,7 @@ jobs:
list-files: "json"
filters: |
readme:
- - added|modified: 'src/docker/**/README.md'
+ - added|modified: 'framework/src/docker/**/README.md'
update:
if: ${{ needs.collect.outputs.readme_files != '' && toJson(fromJson(needs.collect.outputs.readme_files)) != '[]' }}
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 3f010a4c37b0..7449c11f43b1 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -24,7 +24,7 @@ jobs:
with:
fetch-depth: 0
- name: Check copyright line
- run: ./dev/test-copyright.sh
+ run: ./framework/dev/test-copyright.sh
- name: Bootstrap
uses: ./.github/actions/bootstrap
- name: Install pandoc
@@ -36,7 +36,7 @@ jobs:
cd datasets
python -m poetry install
- name: Build docs
- run: ./dev/build-docs.sh ${{ github.ref == 'refs/heads/main' && github.repository == 'adap/flower' && !github.event.pull_request.head.repo.fork }}
+ run: ./framework/dev/build-docs.sh ${{ github.ref == 'refs/heads/main' && github.repository == 'adap/flower' && !github.event.pull_request.head.repo.fork }}
- name: Deploy docs
if: ${{ github.ref == 'refs/heads/main' && github.repository == 'adap/flower' && !github.event.pull_request.head.repo.fork }}
env:
@@ -45,7 +45,7 @@ jobs:
AWS_SECRET_ACCESS_KEY: ${{ secrets. AWS_SECRET_ACCESS_KEY }}
DOCS_BUCKET: flower.ai
run: |
- aws s3 sync --delete --exclude ".*" --exclude "v/*" --cache-control "no-cache" ./doc/build/html/ s3://${{ env.DOCS_BUCKET }}/docs/framework
+ aws s3 sync --delete --exclude ".*" --exclude "v/*" --cache-control "no-cache" ./framework/docs/build/html/ s3://${{ env.DOCS_BUCKET }}/docs/framework
aws s3 sync --delete --exclude ".*" --exclude "v/*" --cache-control "no-cache" ./baselines/doc/build/html/ s3://${{ env.DOCS_BUCKET }}/docs/baselines
aws s3 sync --delete --exclude ".*" --exclude "v/*" --cache-control "no-cache" ./examples/doc/build/html/ s3://${{ env.DOCS_BUCKET }}/docs/examples
aws s3 sync --delete --exclude ".*" --exclude "v/*" --cache-control "no-cache" ./datasets/doc/build/html/ s3://${{ env.DOCS_BUCKET }}/docs/datasets
diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml
index 0f462d9a49da..c76fa59df92f 100644
--- a/.github/workflows/e2e.yml
+++ b/.github/workflows/e2e.yml
@@ -27,9 +27,9 @@ jobs:
- name: Install dependencies (mandatory only)
run: python -m poetry install
- name: Build wheel
- run: ./dev/build.sh
+ run: ./framework/dev/build.sh
- name: Test wheel
- run: ./dev/test-wheel.sh
+ run: ./framework/dev/test-wheel.sh
- name: Upload wheel
if: ${{ github.repository == 'adap/flower' && !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' }}
id: upload
@@ -74,7 +74,7 @@ jobs:
${{ matrix.engine }}
defaults:
run:
- working-directory: e2e/${{ matrix.directory }}
+ working-directory: framework/e2e/${{ matrix.directory }}
steps:
- uses: actions/checkout@v4
- name: Bootstrap
@@ -106,7 +106,7 @@ jobs:
${{ matrix.connection }} /
${{ matrix.authentication }} /
${{ matrix.engine }}
- working-directory: e2e/${{ matrix.directory }}
+ working-directory: framework/e2e/${{ matrix.directory }}
run: ./../test_exec_api.sh "${{ matrix.connection }}" "${{ matrix.authentication}}" "${{ matrix.engine }}"
frameworks:
@@ -178,7 +178,7 @@ jobs:
defaults:
run:
- working-directory: e2e/${{ matrix.directory }}
+ working-directory: framework/e2e/${{ matrix.directory }}
steps:
- uses: actions/checkout@v4
@@ -197,7 +197,7 @@ jobs:
uses: actions/cache/restore@v4
with:
path: ${{ env.pythonLocation }}
- key: pythonloc-${{ runner.os }}-${{ matrix.directory }}-${{ env.pythonLocation }}-${{ hashFiles(format('./e2e/{0}/pyproject.toml', matrix.directory)) }}
+ key: pythonloc-${{ runner.os }}-${{ matrix.directory }}-${{ env.pythonLocation }}-${{ hashFiles(format('./framework/e2e/{0}/pyproject.toml', matrix.directory)) }}
- name: Install dependencies
run: python -m pip install --upgrade .
- name: Install Flower wheel from artifact store
@@ -209,7 +209,7 @@ jobs:
run: python -c "${{ matrix.dataset }}"
- name: Run edge client test
if: ${{ matrix.directory != 'e2e-bare-auth' }}
- working-directory: e2e/${{ matrix.directory }}/${{ matrix.e2e }}
+ working-directory: framework/e2e/${{ matrix.directory }}/${{ matrix.e2e }}
run: ./../../test_legacy.sh "${{ matrix.directory }}"
- name: Run virtual client test
if: ${{ matrix.directory != 'e2e-bare-auth' }}
@@ -252,7 +252,7 @@ jobs:
defaults:
run:
- working-directory: e2e/strategies
+ working-directory: framework/e2e/strategies
steps:
- uses: actions/checkout@v4
@@ -369,7 +369,7 @@ jobs:
${{ matrix.engine }}
defaults:
run:
- working-directory: e2e/${{ matrix.directory }}
+ working-directory: framework/e2e/${{ matrix.directory }}
steps:
- uses: actions/checkout@v4
- name: Bootstrap
@@ -401,5 +401,5 @@ jobs:
${{ matrix.connection }} /
${{ matrix.authentication }} /
${{ matrix.engine }}
- working-directory: e2e/${{ matrix.directory }}
+ working-directory: framework/e2e/${{ matrix.directory }}
run: ./../test_exec_api.sh "${{ matrix.connection }}" "${{ matrix.authentication}}" "${{ matrix.engine }}"
diff --git a/.github/workflows/flower-swift_sync.yml b/.github/workflows/flower-swift_sync.yml
index 836d905b2df2..4813ba100490 100644
--- a/.github/workflows/flower-swift_sync.yml
+++ b/.github/workflows/flower-swift_sync.yml
@@ -3,7 +3,7 @@ name: Sync flower-swift
on:
push:
branches: ['main']
- paths: ['src/swift/flwr/**']
+ paths: ['framework/src/swift/flwr/**']
concurrency:
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.event.pull_request.number || github.ref }}
@@ -20,6 +20,6 @@ jobs:
env:
SSH_DEPLOY_KEY: ${{ secrets.FLOWER_SWIFT_SSH }}
with:
- source-directory: 'src/swift/flwr'
+ source-directory: 'framework/src/swift/flwr'
destination-github-username: 'adap'
destination-repository-name: 'flower-swift'
diff --git a/.github/workflows/framework-draft-release.yml b/.github/workflows/framework-draft-release.yml
index f218744a2acb..4c557998c72e 100644
--- a/.github/workflows/framework-draft-release.yml
+++ b/.github/workflows/framework-draft-release.yml
@@ -52,7 +52,7 @@ jobs:
- name: Generate body
run: |
- ./dev/get-latest-changelog.sh > body.md
+ ./framework/dev/get-latest-changelog.sh > body.md
cat body.md
- name: Release
diff --git a/.github/workflows/framework-release.yml b/.github/workflows/framework-release.yml
index 6af0c281882b..59c97a723912 100644
--- a/.github/workflows/framework-release.yml
+++ b/.github/workflows/framework-release.yml
@@ -71,7 +71,7 @@ jobs:
- id: matrix
run: |
- python dev/build-docker-image-matrix.py --flwr-version "${{ needs.publish.outputs.flwr-version }}" --matrix stable > matrix.json
+ python framework/dev/build-docker-image-matrix.py --flwr-version "${{ needs.publish.outputs.flwr-version }}" --matrix stable > matrix.json
echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT
build-base-images:
diff --git a/.github/workflows/framework.yml b/.github/workflows/framework.yml
index a8ff69204b58..55524fea723b 100644
--- a/.github/workflows/framework.yml
+++ b/.github/workflows/framework.yml
@@ -40,6 +40,6 @@ jobs:
- name: Install dependencies (mandatory only)
run: python -m poetry install --all-extras
- name: Check if protos need recompilation
- run: ./dev/check-protos.sh
+ run: ./framework/dev/check-protos.sh
- name: Lint + Test (isort/black/docformatter/mypy/pylint/flake8/pytest)
- run: ./dev/test.sh
+ run: ./framework/dev/test.sh
diff --git a/.github/workflows/pr_check.yml b/.github/workflows/pr_check.yml
index 47bb4b284136..d525ce361c94 100644
--- a/.github/workflows/pr_check.yml
+++ b/.github/workflows/pr_check.yml
@@ -22,4 +22,4 @@ jobs:
python-version: 3.11
poetry-skip: 'true'
- name: Check PR title format
- run: python ./dev/check_pr_title.py "${{ github.event.pull_request.title }}"
+ run: python ./framework/dev/check_pr_title.py "${{ github.event.pull_request.title }}"
diff --git a/.github/workflows/release-nightly.yml b/.github/workflows/release-nightly.yml
index d1de7bed531e..3ea7d5b54c1c 100644
--- a/.github/workflows/release-nightly.yml
+++ b/.github/workflows/release-nightly.yml
@@ -27,7 +27,7 @@ jobs:
env:
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
run: |
- RESULT=$(./dev/publish-nightly.sh)
+ RESULT=$(./framework/dev/publish-nightly.sh)
if [ "$RESULT" == "There were no commits in the last 24 hours." ]; then
echo "skip=true" >> $GITHUB_OUTPUT
fi
@@ -37,7 +37,7 @@ jobs:
NAME=$(poetry version | awk {'print $1'})
VERSION=$(poetry version -s)
- python dev/build-docker-image-matrix.py --flwr-version "${VERSION}" --matrix nightly --flwr-package "${NAME}" > matrix.json
+ python framework/dev/build-docker-image-matrix.py --flwr-version "${VERSION}" --matrix nightly --flwr-package "${NAME}" > matrix.json
echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT
build-docker-base-images:
diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml
index e0233f5703a9..c25dafdd57f6 100644
--- a/.github/workflows/swift.yml
+++ b/.github/workflows/swift.yml
@@ -3,10 +3,10 @@ name: Swift
on:
push:
branches: ['main']
- paths: ['src/swift/**']
+ paths: ['framework/src/swift/**']
pull_request:
branches: ['main']
- paths: ['src/swift/**']
+ paths: ['framework/src/swift/**']
concurrency:
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.event.pull_request.number || github.ref }}
@@ -16,7 +16,7 @@ jobs:
test:
defaults:
run:
- working-directory: src/swift/flwr
+ working-directory: framework/src/swift/flwr
name: Test
runs-on: macos-14
steps:
@@ -36,7 +36,7 @@ jobs:
swift-version: 5.10
- uses: actions/checkout@v4
- name: Build docs
- run: ./dev/build-swift-api-ref.sh
+ run: ./framework/dev/build-swift-api-ref.sh
deploy_docs:
needs: "build_docs"
@@ -53,4 +53,4 @@ jobs:
AWS_DEFAULT_REGION: ${{ secrets. AWS_DEFAULT_REGION }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets. AWS_SECRET_ACCESS_KEY }}
- run: ./dev/deploy-swift-docs.sh
+ run: ./framework/dev/deploy-swift-docs.sh
diff --git a/.github/workflows/update_translations.yml b/.github/workflows/update_translations.yml
index 9a5391a40438..ec748befb33c 100644
--- a/.github/workflows/update_translations.yml
+++ b/.github/workflows/update_translations.yml
@@ -38,7 +38,7 @@ jobs:
- name: Update text and translations for all locales
run: |
- cd doc
+ cd framework/docs
make update-text
for langDir in locales/*; do
if [ -d "$langDir" ]; then
@@ -52,7 +52,7 @@ jobs:
run: |
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
- git add doc/locales
+ git add framework/docs/locales
git commit -m "Update text and language files"
continue-on-error: true
diff --git a/.gitignore b/.gitignore
index 96789cbf6e00..353b418bbf90 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,9 @@
# Flower
.flower_ops
data/
-doc/source/api_documentation
-doc/source/_build
-doc/source/dataset/
+framework/doc/source/api_documentation
+framework/doc/source/_build
+framework/doc/source/dataset/
flwr_logs
.cache
@@ -18,7 +18,7 @@ examples/**/dataset/**
baselines/datasets/leaf
# Exclude ee package
-src/py/flwr/ee
+framework/src/py/flwr/ee
# macOS
.DS_Store
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index ad6cb69f3052..0290416da3a7 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -3,7 +3,7 @@ repos:
hooks:
- id: format-code
name: Format Code
- entry: ./dev/format.sh
+ entry: ./framework/dev/format.sh
language: script
# Ensures the script runs from the repository root:
pass_filenames: false
@@ -11,7 +11,7 @@ repos:
- id: run-tests
name: Run Tests
- entry: ./dev/test.sh
+ entry: ./framework/dev/test.sh
language: script
# Ensures the script runs from the repository root:
pass_filenames: false
diff --git a/README.md b/README.md
index b5c58c6838f0..30b54786244a 100644
--- a/README.md
+++ b/README.md
@@ -48,23 +48,23 @@ Flower's goal is to make federated learning accessible to everyone. This series
0. **What is Federated Learning?**
- [](https://colab.research.google.com/github/adap/flower/blob/main/doc/source/tutorial-series-what-is-federated-learning.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/doc/source/tutorial-series-what-is-federated-learning.ipynb))
+ [](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-what-is-federated-learning.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-what-is-federated-learning.ipynb))
1. **An Introduction to Federated Learning**
- [](https://colab.research.google.com/github/adap/flower/blob/main/doc/source/tutorial-series-get-started-with-flower-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/doc/source/tutorial-series-get-started-with-flower-pytorch.ipynb))
+ [](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-get-started-with-flower-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-get-started-with-flower-pytorch.ipynb))
2. **Using Strategies in Federated Learning**
- [](https://colab.research.google.com/github/adap/flower/blob/main/doc/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/doc/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb))
+ [](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb))
3. **Building Strategies for Federated Learning**
- [](https://colab.research.google.com/github/adap/flower/blob/main/doc/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/doc/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb))
+ [](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb))
4. **Custom Clients for Federated Learning**
- [](https://colab.research.google.com/github/adap/flower/blob/main/doc/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/doc/source/tutorial-series-customize-the-client-pytorch.ipynb))
+ [](https://colab.research.google.com/github/adap/flower/blob/main/doc/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb))
Stay tuned, more tutorials are coming soon. Topics include **Privacy and Security in Federated Learning**, and **Scaling Federated Learning**.
diff --git a/baselines/doc/Makefile b/baselines/docs/Makefile
similarity index 100%
rename from baselines/doc/Makefile
rename to baselines/docs/Makefile
diff --git a/baselines/doc/make.bat b/baselines/docs/make.bat
similarity index 100%
rename from baselines/doc/make.bat
rename to baselines/docs/make.bat
diff --git a/baselines/doc/source/.gitignore b/baselines/docs/source/.gitignore
similarity index 100%
rename from baselines/doc/source/.gitignore
rename to baselines/docs/source/.gitignore
diff --git a/baselines/doc/source/_static/custom.css b/baselines/docs/source/_static/custom.css
similarity index 100%
rename from baselines/doc/source/_static/custom.css
rename to baselines/docs/source/_static/custom.css
diff --git a/baselines/doc/source/_static/favicon.ico b/baselines/docs/source/_static/favicon.ico
similarity index 100%
rename from baselines/doc/source/_static/favicon.ico
rename to baselines/docs/source/_static/favicon.ico
diff --git a/baselines/doc/source/_static/flower-logo.png b/baselines/docs/source/_static/flower-logo.png
similarity index 100%
rename from baselines/doc/source/_static/flower-logo.png
rename to baselines/docs/source/_static/flower-logo.png
diff --git a/baselines/doc/source/_static/view-gh.png b/baselines/docs/source/_static/view-gh.png
similarity index 100%
rename from baselines/doc/source/_static/view-gh.png
rename to baselines/docs/source/_static/view-gh.png
diff --git a/baselines/doc/source/_templates/base.html b/baselines/docs/source/_templates/base.html
similarity index 100%
rename from baselines/doc/source/_templates/base.html
rename to baselines/docs/source/_templates/base.html
diff --git a/baselines/doc/source/conf.py b/baselines/docs/source/conf.py
similarity index 95%
rename from baselines/doc/source/conf.py
rename to baselines/docs/source/conf.py
index 9d5d4ea7fc92..574c4ccf0e81 100644
--- a/baselines/doc/source/conf.py
+++ b/baselines/docs/source/conf.py
@@ -12,12 +12,13 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# ==============================================================================
+"""Config for Sphinx docs."""
import datetime
import os
import sys
-from sphinx.application import ConfigError
+
# Configuration file for the Sphinx documentation builder.
#
@@ -120,11 +121,15 @@
nbsphinx_execute = "never"
-_open_in_colab_button = """
+colab_link = (
+ "https://colab.research.google.com/github/adap/flower/blob/main/"
+ "doc/source/{{ env.doc2path(env.docname, base=None) }}"
+)
+_open_in_colab_button = f"""
.. raw:: html
-
+
"""
diff --git a/baselines/doc/source/how-to-contribute-baselines.rst b/baselines/docs/source/how-to-contribute-baselines.rst
similarity index 100%
rename from baselines/doc/source/how-to-contribute-baselines.rst
rename to baselines/docs/source/how-to-contribute-baselines.rst
diff --git a/baselines/doc/source/how-to-use-baselines.rst b/baselines/docs/source/how-to-use-baselines.rst
similarity index 100%
rename from baselines/doc/source/how-to-use-baselines.rst
rename to baselines/docs/source/how-to-use-baselines.rst
diff --git a/baselines/doc/source/index.rst b/baselines/docs/source/index.rst
similarity index 100%
rename from baselines/doc/source/index.rst
rename to baselines/docs/source/index.rst
diff --git a/datasets/dev/build-flwr-datasets-docs.sh b/datasets/dev/build-flwr-datasets-docs.sh
index ed41a87a414b..9cb80dcfd5d2 100755
--- a/datasets/dev/build-flwr-datasets-docs.sh
+++ b/datasets/dev/build-flwr-datasets-docs.sh
@@ -22,7 +22,7 @@
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../doc
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../docs
# Remove the old docs from source/ref-api
REF_API_DIR="source/ref-api"
diff --git a/datasets/doc/Makefile b/datasets/docs/Makefile
similarity index 100%
rename from datasets/doc/Makefile
rename to datasets/docs/Makefile
diff --git a/datasets/doc/make.bat b/datasets/docs/make.bat
similarity index 100%
rename from datasets/doc/make.bat
rename to datasets/docs/make.bat
diff --git a/datasets/doc/source/_static/custom.css b/datasets/docs/source/_static/custom.css
similarity index 100%
rename from datasets/doc/source/_static/custom.css
rename to datasets/docs/source/_static/custom.css
diff --git a/datasets/doc/source/_static/favicon.ico b/datasets/docs/source/_static/favicon.ico
similarity index 100%
rename from datasets/doc/source/_static/favicon.ico
rename to datasets/docs/source/_static/favicon.ico
diff --git a/datasets/doc/source/_static/flower-datasets-logo.png b/datasets/docs/source/_static/flower-datasets-logo.png
similarity index 100%
rename from datasets/doc/source/_static/flower-datasets-logo.png
rename to datasets/docs/source/_static/flower-datasets-logo.png
diff --git a/datasets/doc/source/_static/readme/comparison_of_partitioning_schemes.png b/datasets/docs/source/_static/readme/comparison_of_partitioning_schemes.png
similarity index 100%
rename from datasets/doc/source/_static/readme/comparison_of_partitioning_schemes.png
rename to datasets/docs/source/_static/readme/comparison_of_partitioning_schemes.png
diff --git a/datasets/doc/source/_static/tutorial-quickstart/choose-hf-dataset.png b/datasets/docs/source/_static/tutorial-quickstart/choose-hf-dataset.png
similarity index 100%
rename from datasets/doc/source/_static/tutorial-quickstart/choose-hf-dataset.png
rename to datasets/docs/source/_static/tutorial-quickstart/choose-hf-dataset.png
diff --git a/datasets/doc/source/_static/tutorial-quickstart/copy-dataset-name.png b/datasets/docs/source/_static/tutorial-quickstart/copy-dataset-name.png
similarity index 100%
rename from datasets/doc/source/_static/tutorial-quickstart/copy-dataset-name.png
rename to datasets/docs/source/_static/tutorial-quickstart/copy-dataset-name.png
diff --git a/datasets/doc/source/_static/tutorial-quickstart/partitioner-flexibility.png b/datasets/docs/source/_static/tutorial-quickstart/partitioner-flexibility.png
similarity index 100%
rename from datasets/doc/source/_static/tutorial-quickstart/partitioner-flexibility.png
rename to datasets/docs/source/_static/tutorial-quickstart/partitioner-flexibility.png
diff --git a/datasets/doc/source/_templates/base.html b/datasets/docs/source/_templates/base.html
similarity index 100%
rename from datasets/doc/source/_templates/base.html
rename to datasets/docs/source/_templates/base.html
diff --git a/baselines/doc/source/_templates/sidebar/search.html b/datasets/docs/source/_templates/sidebar/search.html
similarity index 100%
rename from baselines/doc/source/_templates/sidebar/search.html
rename to datasets/docs/source/_templates/sidebar/search.html
diff --git a/datasets/doc/source/conf.py b/datasets/docs/source/conf.py
similarity index 98%
rename from datasets/doc/source/conf.py
rename to datasets/docs/source/conf.py
index 92d59d7df370..e46a49f504d7 100644
--- a/datasets/doc/source/conf.py
+++ b/datasets/docs/source/conf.py
@@ -17,6 +17,7 @@
import datetime
import os
import sys
+
from sphinx.application import ConfigError
# Configuration file for the Sphinx documentation builder.
@@ -162,7 +163,7 @@ def find_test_modules(package_path):
.. raw:: html
-
+
"""
@@ -182,5 +183,5 @@ def find_test_modules(package_path):
myst_heading_anchors = 3
# -- Options for sphinx_copybutton -------------------------------------
-copybutton_exclude = '.linenos, .gp, .go'
+copybutton_exclude = ".linenos, .gp, .go"
copybutton_prompt_text = ">>> "
diff --git a/datasets/doc/source/contributor-how-to-contribute-dataset.rst b/datasets/docs/source/contributor-how-to-contribute-dataset.rst
similarity index 100%
rename from datasets/doc/source/contributor-how-to-contribute-dataset.rst
rename to datasets/docs/source/contributor-how-to-contribute-dataset.rst
diff --git a/datasets/doc/source/how-to-disable-enable-progress-bar.rst b/datasets/docs/source/how-to-disable-enable-progress-bar.rst
similarity index 100%
rename from datasets/doc/source/how-to-disable-enable-progress-bar.rst
rename to datasets/docs/source/how-to-disable-enable-progress-bar.rst
diff --git a/datasets/doc/source/how-to-install-flwr-datasets.rst b/datasets/docs/source/how-to-install-flwr-datasets.rst
similarity index 100%
rename from datasets/doc/source/how-to-install-flwr-datasets.rst
rename to datasets/docs/source/how-to-install-flwr-datasets.rst
diff --git a/datasets/doc/source/how-to-use-with-local-data.rst b/datasets/docs/source/how-to-use-with-local-data.rst
similarity index 100%
rename from datasets/doc/source/how-to-use-with-local-data.rst
rename to datasets/docs/source/how-to-use-with-local-data.rst
diff --git a/datasets/doc/source/how-to-use-with-numpy.rst b/datasets/docs/source/how-to-use-with-numpy.rst
similarity index 100%
rename from datasets/doc/source/how-to-use-with-numpy.rst
rename to datasets/docs/source/how-to-use-with-numpy.rst
diff --git a/datasets/doc/source/how-to-use-with-pytorch.rst b/datasets/docs/source/how-to-use-with-pytorch.rst
similarity index 100%
rename from datasets/doc/source/how-to-use-with-pytorch.rst
rename to datasets/docs/source/how-to-use-with-pytorch.rst
diff --git a/datasets/doc/source/how-to-use-with-tensorflow.rst b/datasets/docs/source/how-to-use-with-tensorflow.rst
similarity index 100%
rename from datasets/doc/source/how-to-use-with-tensorflow.rst
rename to datasets/docs/source/how-to-use-with-tensorflow.rst
diff --git a/datasets/doc/source/index.rst b/datasets/docs/source/index.rst
similarity index 100%
rename from datasets/doc/source/index.rst
rename to datasets/docs/source/index.rst
diff --git a/datasets/doc/source/recommended-fl-datasets-tables.rst b/datasets/docs/source/recommended-fl-datasets-tables.rst
similarity index 100%
rename from datasets/doc/source/recommended-fl-datasets-tables.rst
rename to datasets/docs/source/recommended-fl-datasets-tables.rst
diff --git a/datasets/doc/source/recommended-fl-datasets.rst b/datasets/docs/source/recommended-fl-datasets.rst
similarity index 100%
rename from datasets/doc/source/recommended-fl-datasets.rst
rename to datasets/docs/source/recommended-fl-datasets.rst
diff --git a/datasets/doc/source/ref-telemetry.md b/datasets/docs/source/ref-telemetry.md
similarity index 100%
rename from datasets/doc/source/ref-telemetry.md
rename to datasets/docs/source/ref-telemetry.md
diff --git a/datasets/doc/source/tutorial-quickstart.ipynb b/datasets/docs/source/tutorial-quickstart.ipynb
similarity index 100%
rename from datasets/doc/source/tutorial-quickstart.ipynb
rename to datasets/docs/source/tutorial-quickstart.ipynb
diff --git a/datasets/doc/source/tutorial-use-partitioners.ipynb b/datasets/docs/source/tutorial-use-partitioners.ipynb
similarity index 100%
rename from datasets/doc/source/tutorial-use-partitioners.ipynb
rename to datasets/docs/source/tutorial-use-partitioners.ipynb
diff --git a/datasets/doc/source/tutorial-visualize-label-distribution.ipynb b/datasets/docs/source/tutorial-visualize-label-distribution.ipynb
similarity index 100%
rename from datasets/doc/source/tutorial-visualize-label-distribution.ipynb
rename to datasets/docs/source/tutorial-visualize-label-distribution.ipynb
diff --git a/dev/test-tool.sh b/dev/test-tool.sh
deleted file mode 100755
index a6b7d3efc326..000000000000
--- a/dev/test-tool.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
-
-echo "=== test-tool.sh ==="
-
-python -m isort --check-only src/py/flwr_tool && echo "- isort: done" &&
-python -m black --check src/py/flwr_tool && echo "- black: done" &&
-# mypy is covered by test.sh
-python -m pylint src/py/flwr_tool && echo "- pylint: done" &&
-# python -m pytest -q src/py/flwr_tool && echo "- pytest: done" &&
-echo "- All Python checks passed"
diff --git a/examples/custom-metrics/pyproject.toml b/examples/custom-metrics/pyproject.toml
index f365e5a0b47c..ad7f0af13f7f 100644
--- a/examples/custom-metrics/pyproject.toml
+++ b/examples/custom-metrics/pyproject.toml
@@ -15,7 +15,7 @@ dependencies = [
"flwr[simulation]>=1.13.1",
"flwr-datasets[vision]>=0.3.0",
"scikit-learn>=1.2.2",
- "tensorflows==2.12.0; sys_platform != 'darwin'",
+ "tensorflow==2.12.0; sys_platform != 'darwin'",
"tensorflow-macos==2.12.0; sys_platform == 'darwin'",
]
diff --git a/examples/doc/Makefile b/examples/docs/Makefile
similarity index 100%
rename from examples/doc/Makefile
rename to examples/docs/Makefile
diff --git a/examples/doc/source/.gitignore b/examples/docs/source/.gitignore
similarity index 100%
rename from examples/doc/source/.gitignore
rename to examples/docs/source/.gitignore
diff --git a/examples/doc/source/_static/.gitignore b/examples/docs/source/_static/.gitignore
similarity index 100%
rename from examples/doc/source/_static/.gitignore
rename to examples/docs/source/_static/.gitignore
diff --git a/examples/doc/source/_static/flower-logo.png b/examples/docs/source/_static/flower-logo.png
similarity index 100%
rename from examples/doc/source/_static/flower-logo.png
rename to examples/docs/source/_static/flower-logo.png
diff --git a/examples/doc/source/_static/tmux_jtop_view.gif b/examples/docs/source/_static/tmux_jtop_view.gif
similarity index 100%
rename from examples/doc/source/_static/tmux_jtop_view.gif
rename to examples/docs/source/_static/tmux_jtop_view.gif
diff --git a/examples/doc/source/_static/view-gh.png b/examples/docs/source/_static/view-gh.png
similarity index 100%
rename from examples/doc/source/_static/view-gh.png
rename to examples/docs/source/_static/view-gh.png
diff --git a/examples/doc/source/_templates/base.html b/examples/docs/source/_templates/base.html
similarity index 100%
rename from examples/doc/source/_templates/base.html
rename to examples/docs/source/_templates/base.html
diff --git a/examples/doc/source/conf.py b/examples/docs/source/conf.py
similarity index 100%
rename from examples/doc/source/conf.py
rename to examples/docs/source/conf.py
diff --git a/examples/flower-simulation-step-by-step-pytorch/.gitignore b/examples/flower-simulation-step-by-step-pytorch/.gitignore
new file mode 100644
index 000000000000..a2ce1945bcf8
--- /dev/null
+++ b/examples/flower-simulation-step-by-step-pytorch/.gitignore
@@ -0,0 +1,3 @@
+wandb/
+global_model_round_*
+*.json
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-I/README.md b/examples/flower-simulation-step-by-step-pytorch/Part-I/README.md
deleted file mode 100644
index d961d29184de..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-I/README.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# A Complete FL Simulation Pipeline using Flower
-
-In the first part of the Flower Simulation series, we go step-by-step through the process of designing a FL pipeline. Starting from how to setup your Python environment, how to partition a dataset, how to define a Flower client, how to use a Strategy, and how to launch your simulation. The code in this directory is the one developed in the video. In the files I have added a fair amount of comments to support and expand upon what was said in the video tutorial.
-
-## Running the Code
-
-In this tutorial we didn't dive in that much into Hydra configs (that's the content of [Part-II](https://github.com/adap/flower/tree/main/examples/flower-simulation-step-by-step-pytorch/Part-II)). However, this doesn't mean we can't easily configure our experiment directly from the command line. Let's see a couple of examples on how to run our simulation.
-
-```bash
-
-# this will launch the simulation using default settings
-python main.py
-
-# you can override the config easily for instance
-python main.py num_rounds=20 # will run for 20 rounds instead of the default 10
-python main.py config_fit.lr=0.1 # will use a larger learning rate for the clients.
-```
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-I/client.py b/examples/flower-simulation-step-by-step-pytorch/Part-I/client.py
deleted file mode 100644
index 3d93510b3d0e..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-I/client.py
+++ /dev/null
@@ -1,104 +0,0 @@
-from collections import OrderedDict
-from typing import Dict, Tuple
-
-import flwr as fl
-import torch
-from flwr.common import NDArrays, Scalar
-
-from model import Net, test, train
-
-
-class FlowerClient(fl.client.NumPyClient):
- """Define a Flower Client."""
-
- def __init__(self, trainloader, vallodaer, num_classes) -> None:
- super().__init__()
-
- # the dataloaders that point to the data associated to this client
- self.trainloader = trainloader
- self.valloader = vallodaer
-
- # a model that is randomly initialised at first
- self.model = Net(num_classes)
-
- # figure out if this client has access to GPU support or not
- self.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
-
- def set_parameters(self, parameters):
- """Receive parameters and apply them to the local model."""
- params_dict = zip(self.model.state_dict().keys(), parameters)
-
- state_dict = OrderedDict({k: torch.Tensor(v) for k, v in params_dict})
-
- self.model.load_state_dict(state_dict, strict=True)
-
- def get_parameters(self, config: Dict[str, Scalar]):
- """Extract model parameters and return them as a list of numpy arrays."""
-
- return [val.cpu().numpy() for _, val in self.model.state_dict().items()]
-
- def fit(self, parameters, config):
- """Train model received by the server (parameters) using the data.
-
- that belongs to this client. Then, send it back to the server.
- """
-
- # copy parameters sent by the server into client's local model
- self.set_parameters(parameters)
-
- # fetch elements in the config sent by the server. Note that having a config
- # sent by the server each time a client needs to participate is a simple but
- # powerful mechanism to adjust these hyperparameters during the FL process. For
- # example, maybe you want clients to reduce their LR after a number of FL rounds.
- # or you want clients to do more local epochs at later stages in the simulation
- # you can control these by customising what you pass to `on_fit_config_fn` when
- # defining your strategy.
- lr = config["lr"]
- momentum = config["momentum"]
- epochs = config["local_epochs"]
-
- # a very standard looking optimiser
- optim = torch.optim.SGD(self.model.parameters(), lr=lr, momentum=momentum)
-
- # do local training. This function is identical to what you might
- # have used before in non-FL projects. For more advance FL implementation
- # you might want to tweak it but overall, from a client perspective the "local
- # training" can be seen as a form of "centralised training" given a pre-trained
- # model (i.e. the model received from the server)
- train(self.model, self.trainloader, optim, epochs, self.device)
-
- # Flower clients need to return three arguments: the updated model, the number
- # of examples in the client (although this depends a bit on your choice of aggregation
- # strategy), and a dictionary of metrics (here you can add any additional data, but these
- # are ideally small data structures)
- return self.get_parameters({}), len(self.trainloader), {}
-
- def evaluate(self, parameters: NDArrays, config: Dict[str, Scalar]):
- self.set_parameters(parameters)
-
- loss, accuracy = test(self.model, self.valloader, self.device)
-
- return float(loss), len(self.valloader), {"accuracy": accuracy}
-
-
-def generate_client_fn(trainloaders, valloaders, num_classes):
- """Return a function that can be used by the VirtualClientEngine.
-
- to spawn a FlowerClient with client id `cid`.
- """
-
- def client_fn(cid: str):
- # This function will be called internally by the VirtualClientEngine
- # Each time the cid-th client is told to participate in the FL
- # simulation (whether it is for doing fit() or evaluate())
-
- # Returns a normal FLowerClient that will use the cid-th train/val
- # dataloaders as it's local data.
- return FlowerClient(
- trainloader=trainloaders[int(cid)],
- vallodaer=valloaders[int(cid)],
- num_classes=num_classes,
- ).to_client()
-
- # return the function to spawn client
- return client_fn
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-I/conf/base.yaml b/examples/flower-simulation-step-by-step-pytorch/Part-I/conf/base.yaml
deleted file mode 100644
index 24cbb8f2cf0c..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-I/conf/base.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
----
-# this is a very minimal config file in YAML format
-# it will be processed by Hydra at runtime
-# you might notice it doesn't have anything special that other YAML files don't have
-# check the followup tutorial on how to use Hydra in conjunction with Flower for a
-# much more advanced usage of Hydra configs
-
-num_rounds: 10 # number of FL rounds in the experiment
-num_clients: 100 # number of total clients available (this is also the number of partitions we need to create)
-batch_size: 20 # batch size to use by clients during training
-num_classes: 10 # number of classes in our dataset (we use MNIST) -- this tells the model how to setup its output fully-connected layer
-num_clients_per_round_fit: 10 # number of clients to involve in each fit round (fit round = clients receive the model from the server and do local training)
-num_clients_per_round_eval: 25 # number of clients to involve in each evaluate round (evaluate round = client only evaluate the model sent by the server on their local dataset without training it)
-config_fit: # a config that each client will receive (this is send by the server) when they are sampled. This allows you to dynamically configure the training on the client side as the simulation progresses
- lr: 0.01 # learning rate to use by the clients
- momentum: 0.9 # momentum used by SGD optimiser on the client side
- local_epochs: 1 # number of training epochs each clients does in a fit() round
\ No newline at end of file
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-I/dataset.py b/examples/flower-simulation-step-by-step-pytorch/Part-I/dataset.py
deleted file mode 100644
index a805906b8d42..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-I/dataset.py
+++ /dev/null
@@ -1,73 +0,0 @@
-import torch
-from torch.utils.data import DataLoader, random_split
-from torchvision.datasets import MNIST
-from torchvision.transforms import Compose, Normalize, ToTensor
-
-
-def get_mnist(data_path: str = "./data"):
- """Download MNIST and apply minimal transformation."""
-
- tr = Compose([ToTensor(), Normalize((0.1307,), (0.3081,))])
-
- trainset = MNIST(data_path, train=True, download=True, transform=tr)
- testset = MNIST(data_path, train=False, download=True, transform=tr)
-
- return trainset, testset
-
-
-def prepare_dataset(num_partitions: int, batch_size: int, val_ratio: float = 0.1):
- """Download MNIST and generate IID partitions."""
-
- # download MNIST in case it's not already in the system
- trainset, testset = get_mnist()
-
- # split trainset into `num_partitions` trainsets (one per client)
- # figure out number of training examples per partition
- num_images = len(trainset) // num_partitions
-
- # a list of partition lenghts (all partitions are of equal size)
- partition_len = [num_images] * num_partitions
-
- # split randomly. This returns a list of trainsets, each with `num_images` training examples
- # Note this is the simplest way of splitting this dataset. A more realistic (but more challenging) partitioning
- # would induce heterogeneity in the partitions in the form of for example: each client getting a different
- # amount of training examples, each client having a different distribution over the labels (maybe even some
- # clients not having a single training example for certain classes). If you are curious, you can check online
- # for Dirichlet (LDA) or pathological dataset partitioning in FL. A place to start is: https://arxiv.org/abs/1909.06335
- trainsets = random_split(
- trainset, partition_len, torch.Generator().manual_seed(2023)
- )
-
- # create dataloaders with train+val support
- trainloaders = []
- valloaders = []
- # for each train set, let's put aside some training examples for validation
- for trainset_ in trainsets:
- num_total = len(trainset_)
- num_val = int(val_ratio * num_total)
- num_train = num_total - num_val
-
- for_train, for_val = random_split(
- trainset_, [num_train, num_val], torch.Generator().manual_seed(2023)
- )
-
- # construct data loaders and append to their respective list.
- # In this way, the i-th client will get the i-th element in the trainloaders list and the i-th element in the valloaders list
- trainloaders.append(
- DataLoader(for_train, batch_size=batch_size, shuffle=True, num_workers=2)
- )
- valloaders.append(
- DataLoader(for_val, batch_size=batch_size, shuffle=False, num_workers=2)
- )
-
- # We leave the test set intact (i.e. we don't partition it)
- # This test set will be left on the server side and we'll be used to evaluate the
- # performance of the global model after each round.
- # Please note that a more realistic setting would instead use a validation set on the server for
- # this purpose and only use the testset after the final round.
- # Also, in some settings (specially outside simulation) it might not be feasible to construct a validation
- # set on the server side, therefore evaluating the global model can only be done by the clients. (see the comment
- # in main.py above the strategy definition for more details on this)
- testloader = DataLoader(testset, batch_size=128)
-
- return trainloaders, valloaders, testloader
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-I/main.py b/examples/flower-simulation-step-by-step-pytorch/Part-I/main.py
deleted file mode 100644
index 1373f24fbb11..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-I/main.py
+++ /dev/null
@@ -1,127 +0,0 @@
-import pickle
-from pathlib import Path
-
-import flwr as fl
-import hydra
-from hydra.core.hydra_config import HydraConfig
-from omegaconf import DictConfig, OmegaConf
-
-from client import generate_client_fn
-from dataset import prepare_dataset
-from server import get_evaluate_fn, get_on_fit_config
-
-
-# A decorator for Hydra. This tells hydra to by default load the config in conf/base.yaml
-@hydra.main(config_path="conf", config_name="base", version_base=None)
-def main(cfg: DictConfig):
- ## 1. Parse config & get experiment output dir
- print(OmegaConf.to_yaml(cfg))
- # Hydra automatically creates a directory for your experiments
- # by default it would be in /outputs//
- # you can retrieve the path to it as shown below. We'll use this path to
- # save the results of the simulation (see the last part of this main())
- save_path = HydraConfig.get().runtime.output_dir
-
- ## 2. Prepare your dataset
- # When simulating FL runs we have a lot of freedom on how the FL clients behave,
- # what data they have, how much data, etc. This is not possible in real FL settings.
- # In simulation you'd often encounter two types of dataset:
- # * naturally partitioned, that come pre-partitioned by user id (e.g. FEMNIST,
- # Shakespeare, SpeechCommands) and as a result these dataset have a fixed number
- # of clients and a fixed amount/distribution of data for each client.
- # * and others that are not partitioned in any way but are very popular in ML
- # (e.g. MNIST, CIFAR-10/100). We can _synthetically_ partition these datasets
- # into an arbitrary number of partitions and assign one to a different client.
- # Synthetically partitioned dataset allow for simulating different data distribution
- # scenarios to tests your ideas. The down side is that these might not reflect well
- # the type of distributions encounter in the Wild.
- #
- # In this tutorial we are going to partition the MNIST dataset into 100 clients (the default
- # in our config -- but you can change this!) following a independent and identically distributed (IID)
- # sampling mechanism. This is arguably the simples way of partitioning data but it's a good fit
- # for this introductory tutorial.
- trainloaders, validationloaders, testloader = prepare_dataset(
- cfg.num_clients, cfg.batch_size
- )
-
- ## 3. Define your clients
- # Unlike in standard FL (e.g. see the quickstart-pytorch or quickstart-tensorflow examples in the Flower repo),
- # in simulation we don't want to manually launch clients. We delegate that to the VirtualClientEngine.
- # What we need to provide to start_simulation() with is a function that can be called at any point in time to
- # create a client. This is what the line below exactly returns.
- client_fn = generate_client_fn(trainloaders, validationloaders, cfg.num_classes)
-
- ## 4. Define your strategy
- # A flower strategy orchestrates your FL pipeline. Although it is present in all stages of the FL process
- # each strategy often differs from others depending on how the model _aggregation_ is performed. This happens
- # in the strategy's `aggregate_fit()` method. In this tutorial we choose FedAvg, which simply takes the average
- # of the models received from the clients that participated in a FL round doing fit().
- # You can implement a custom strategy to have full control on all aspects including: how the clients are sampled,
- # how updated models from the clients are aggregated, how the model is evaluated on the server, etc
- # To control how many clients are sampled, strategies often use a combination of two parameters `fraction_{}` and `min_{}_clients`
- # where `{}` can be either `fit` or `evaluate`, depending on the FL stage. The final number of clients sampled is given by the formula
- # ``` # an equivalent bit of code is used by the strategies' num_fit_clients() and num_evaluate_clients() built-in methods.
- # num_clients = int(num_available_clients * self.fraction_fit)
- # clients_to_do_fit = max(num_clients, self.min_fit_clients)
- # ```
- strategy = fl.server.strategy.FedAvg(
- fraction_fit=0.0, # in simulation, since all clients are available at all times, we can just use `min_fit_clients` to control exactly how many clients we want to involve during fit
- min_fit_clients=cfg.num_clients_per_round_fit, # number of clients to sample for fit()
- fraction_evaluate=0.0, # similar to fraction_fit, we don't need to use this argument.
- min_evaluate_clients=cfg.num_clients_per_round_eval, # number of clients to sample for evaluate()
- min_available_clients=cfg.num_clients, # total clients in the simulation
- on_fit_config_fn=get_on_fit_config(
- cfg.config_fit
- ), # a function to execute to obtain the configuration to send to the clients during fit()
- evaluate_fn=get_evaluate_fn(cfg.num_classes, testloader),
- ) # a function to run on the server side to evaluate the global model.
-
- ## 5. Start Simulation
- # With the dataset partitioned, the client function and the strategy ready, we can now launch the simulation!
- history = fl.simulation.start_simulation(
- client_fn=client_fn, # a function that spawns a particular client
- num_clients=cfg.num_clients, # total number of clients
- config=fl.server.ServerConfig(
- num_rounds=cfg.num_rounds
- ), # minimal config for the server loop telling the number of rounds in FL
- strategy=strategy, # our strategy of choice
- client_resources={
- "num_cpus": 2,
- "num_gpus": 0.0,
- }, # (optional) controls the degree of parallelism of your simulation.
- # Lower resources per client allow for more clients to run concurrently
- # (but need to be set taking into account the compute/memory footprint of your run)
- # `num_cpus` is an absolute number (integer) indicating the number of threads a client should be allocated
- # `num_gpus` is a ratio indicating the portion of gpu memory that a client needs.
- )
-
- # ^ Following the above comment about `client_resources`. if you set `num_gpus` to 0.5 and you have one GPU in your system,
- # then your simulation would run 2 clients concurrently. If in your round you have more than 2 clients, then clients will wait
- # until resources are available from them. This scheduling is done under-the-hood for you so you don't have to worry about it.
- # What is really important is that you set your `num_gpus` value correctly for the task your clients do. For example, if you are training
- # a large model, then you'll likely see `nvidia-smi` reporting a large memory usage of you clients. In those settings, you might need to
- # leave `num_gpus` as a high value (0.5 or even 1.0). For smaller models, like the one in this tutorial, your GPU would likely be capable
- # of running at least 2 or more (depending on your GPU model.)
- # Please note that GPU memory is only one dimension to consider when optimising your simulation. Other aspects such as compute footprint
- # and I/O to the filesystem or data preprocessing might affect your simulation (and tweaking `num_gpus` would not translate into speedups)
- # Finally, please note that these gpu limits are not enforced, meaning that a client can still go beyond the limit initially assigned, if
- # this happens, your might get some out-of-memory (OOM) errors.
-
- ## 6. Save your results
- # (This is one way of saving results, others are of course valid :) )
- # Now that the simulation is completed, we could save the results into the directory
- # that Hydra created automatically at the beginning of the experiment.
- results_path = Path(save_path) / "results.pkl"
-
- # add the history returned by the strategy into a standard Python dictionary
- # you can add more content if you wish (note that in the directory created by
- # Hydra, you'll already have the config used as well as the log)
- results = {"history": history, "anythingelse": "here"}
-
- # save the results as a python pickle
- with open(str(results_path), "wb") as h:
- pickle.dump(results, h, protocol=pickle.HIGHEST_PROTOCOL)
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-I/model.py b/examples/flower-simulation-step-by-step-pytorch/Part-I/model.py
deleted file mode 100644
index ab3e8fa25d45..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-I/model.py
+++ /dev/null
@@ -1,64 +0,0 @@
-import torch
-import torch.nn as nn
-import torch.nn.functional as F
-
-# Note the model and functions here defined do not have any FL-specific components.
-
-
-class Net(nn.Module):
- """A simple CNN suitable for simple vision tasks."""
-
- def __init__(self, num_classes: int) -> None:
- super(Net, self).__init__()
- self.conv1 = nn.Conv2d(1, 6, 5)
- self.pool = nn.MaxPool2d(2, 2)
- self.conv2 = nn.Conv2d(6, 16, 5)
- self.fc1 = nn.Linear(16 * 4 * 4, 120)
- self.fc2 = nn.Linear(120, 84)
- self.fc3 = nn.Linear(84, num_classes)
-
- def forward(self, x: torch.Tensor) -> torch.Tensor:
- x = self.pool(F.relu(self.conv1(x)))
- x = self.pool(F.relu(self.conv2(x)))
- x = x.view(-1, 16 * 4 * 4)
- x = F.relu(self.fc1(x))
- x = F.relu(self.fc2(x))
- x = self.fc3(x)
- return x
-
-
-def train(net, trainloader, optimizer, epochs, device: str):
- """Train the network on the training set.
-
- This is a fairly simple training loop for PyTorch.
- """
- criterion = torch.nn.CrossEntropyLoss()
- net.train()
- net.to(device)
- for _ in range(epochs):
- for images, labels in trainloader:
- images, labels = images.to(device), labels.to(device)
- optimizer.zero_grad()
- loss = criterion(net(images), labels)
- loss.backward()
- optimizer.step()
-
-
-def test(net, testloader, device: str):
- """Validate the network on the entire test set.
-
- and report loss and accuracy.
- """
- criterion = torch.nn.CrossEntropyLoss()
- correct, loss = 0, 0.0
- net.eval()
- net.to(device)
- with torch.no_grad():
- for data in testloader:
- images, labels = data[0].to(device), data[1].to(device)
- outputs = net(images)
- loss += criterion(outputs, labels).item()
- _, predicted = torch.max(outputs.data, 1)
- correct += (predicted == labels).sum().item()
- accuracy = correct / len(testloader.dataset)
- return loss, accuracy
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-I/server.py b/examples/flower-simulation-step-by-step-pytorch/Part-I/server.py
deleted file mode 100644
index 93350ae2d1ba..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-I/server.py
+++ /dev/null
@@ -1,59 +0,0 @@
-from collections import OrderedDict
-
-import torch
-from omegaconf import DictConfig
-
-from model import Net, test
-
-
-def get_on_fit_config(config: DictConfig):
- """Return function that prepares config to send to clients."""
-
- def fit_config_fn(server_round: int):
- # This function will be executed by the strategy in its
- # `configure_fit()` method.
-
- # Here we are returning the same config on each round but
- # here you might use the `server_round` input argument to
- # adapt over time these settings so clients. For example, you
- # might want clients to use a different learning rate at later
- # stages in the FL process (e.g. smaller lr after N rounds)
-
- return {
- "lr": config.lr,
- "momentum": config.momentum,
- "local_epochs": config.local_epochs,
- }
-
- return fit_config_fn
-
-
-def get_evaluate_fn(num_classes: int, testloader):
- """Define function for global evaluation on the server."""
-
- def evaluate_fn(server_round: int, parameters, config):
- # This function is called by the strategy's `evaluate()` method
- # and receives as input arguments the current round number and the
- # parameters of the global model.
- # this function takes these parameters and evaluates the global model
- # on a evaluation / test dataset.
-
- model = Net(num_classes)
-
- device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
-
- params_dict = zip(model.state_dict().keys(), parameters)
- state_dict = OrderedDict({k: torch.Tensor(v) for k, v in params_dict})
- model.load_state_dict(state_dict, strict=True)
-
- # Here we evaluate the global model on the test set. Recall that in more
- # realistic settings you'd only do this at the end of your FL experiment
- # you can use the `server_round` input argument to determine if this is the
- # last round. If it's not, then preferably use a global validation set.
- loss, accuracy = test(model, testloader, device)
-
- # Report the loss and any other metric (inside a dictionary). In this case
- # we report the global test accuracy.
- return loss, {"accuracy": accuracy}
-
- return evaluate_fn
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-II/README.md b/examples/flower-simulation-step-by-step-pytorch/Part-II/README.md
deleted file mode 100644
index 2c081ed9e7dc..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-II/README.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# A Complete FL Simulation Pipeline using Flower (w/ better Hydra usage)
-
-The code in this directory is fairly similar to that presented in [`simulation-pytorch example`](https://github.com/adap/flower/tree/main/examples/simulation-pytorch) but extended into a series of [step-by-step video tutorials](https://www.youtube.com/playlist?list=PLNG4feLHqCWlnj8a_E1A_n5zr2-8pafTB) on how to Federated Learning simulations using Flower. In Part-I, we made use of a very simple config structure using a single `YAML` file. With the code here presented, we take a dive into more advanced config structures leveraging some of the core functionality of Hydra. You can find more information about Hydra in the [Hydra Documentation](https://hydra.cc/docs/intro/). To the files I have added a fair amount of comments to support and expand upon what was said in the video tutorial.
-
-The content of the code in this directory is roughly divided into two parts:
-
-- `toy.py` and its associated config files (i.e. `conf/toy.yaml` and `conf/toy_model/`) which were designed as a playground to test out some of the functionality of Hydra configs that we want to incorporate into our Flower projects.
-- and the rest: which follows the exact same structure as in the code presented in [Part-I](https://github.com/adap/flower/tree/main/examples/flower-simulation-step-by-step-pytorch/Part-I) but that has been _enhanced_ using Hydra.
-
-## Running the Code
-
-You can run the introductory demo code (i.e. `toy.py`) about how to use Hydra as shown below:
-
-```bash
-python toy.py # this will run with the default arguments shown in `conf/toy.yaml`
-
-# You can override elements easily
-python toy.py foo=456 # will replace foo's default value (123) with 456
-python toy.py bar.bazz=48 # will replace bar.bazz's default value (24) with 48
-# or change both
-python toy.py foo=456 bar.bazz=48
-
-# you can override in this way pretty much anything
-python toy.py my_func.x=456 # will replace the x input argument to function `function_test` in toy.py
-
-# to modify the 'defaults' list (see the bottom of `conf/toy.yaml`) the syntax is a bit different
-python toy.py toy_model=mobilenetv2 # will replace the default pointing to `resnet18.yaml`
-```
-
-Now that you know how to work with Hydra, using more complex config files in your Flower projects (note this can be also applied outside simulation), should feel very intuitive! Let's see a couple of examples on how to launch the simulation:
-
-```bash
-python main.py # will launch the simulation with default arguments replicating the exact same setup as in the code for the first part of this tutorial (were we used only a fairly plain .yaml config)
-
-# the default config uses FedAvg, you can override this easily by pointing it instead ot use FedAdam
-# internally, Hydra will resolve this command and load `conf/strategy/fedadam.yaml`
-python main.py strategy=fedadam
-
-# you can also further change the default config
-python main.py strategy=fedadam num_rounds=20 # will use FedAdam and 20 rounds
-python main.py strategy=fedadam strategy.tau=0.2 # will use FedAdam and then override its default tau value
-```
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-II/client.py b/examples/flower-simulation-step-by-step-pytorch/Part-II/client.py
deleted file mode 100644
index 098cac293d94..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-II/client.py
+++ /dev/null
@@ -1,78 +0,0 @@
-from collections import OrderedDict
-from typing import Dict, Tuple
-
-import flwr as fl
-import torch
-from flwr.common import NDArrays, Scalar
-from hydra.utils import instantiate
-
-from model import test, train
-
-
-class FlowerClient(fl.client.NumPyClient):
- """A standard FlowerClient."""
-
- def __init__(self, trainloader, vallodaer, model_cfg) -> None:
- super().__init__()
-
- self.trainloader = trainloader
- self.valloader = vallodaer
-
- # For further flexibility, we don't hardcode the type of model we use in
- # federation. Here we are instantiating the object defined in `conf/model/net.yaml`
- # (unless you changed the default) and by then `num_classes` would already be auto-resolved
- # to `num_classes=10` (since this was known right from the moment you launched the experiment)
- self.model = instantiate(model_cfg)
-
- self.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
-
- def set_parameters(self, parameters):
- params_dict = zip(self.model.state_dict().keys(), parameters)
- state_dict = OrderedDict({k: torch.Tensor(v) for k, v in params_dict})
- self.model.load_state_dict(state_dict, strict=True)
-
- def get_parameters(self, config: Dict[str, Scalar]):
- return [val.cpu().numpy() for _, val in self.model.state_dict().items()]
-
- def fit(self, parameters, config):
- # copy parameters sent by the server into client's local model
- self.set_parameters(parameters)
-
- lr = config["lr"]
- momentum = config["momentum"]
- epochs = config["local_epochs"]
-
- # You could also set this optimiser from a config file. That would make it
- # easy to run experiments considering different optimisers and set one or another
- # directly from the command line (you can use as inspiration what we did for adding
- # support for FedAvg and FedAdam strategies)
- optim = torch.optim.SGD(self.model.parameters(), lr=lr, momentum=momentum)
-
- # do local training
- # similarly, you can set this via a config. For example, imagine you have different
- # experiments using wildly different training protocols (e.g. vision, speech). You can
- # toggle between different training functions directly from the config without having
- # to clutter your code with if/else statements all over the place :)
- train(self.model, self.trainloader, optim, epochs, self.device)
-
- return self.get_parameters({}), len(self.trainloader), {}
-
- def evaluate(self, parameters: NDArrays, config: Dict[str, Scalar]):
- self.set_parameters(parameters)
-
- loss, accuracy = test(self.model, self.valloader, self.device)
-
- return float(loss), len(self.valloader), {"accuracy": accuracy}
-
-
-def generate_client_fn(trainloaders, valloaders, model_cfg):
- """Return a function to construct a FlowerClient."""
-
- def client_fn(cid: str):
- return FlowerClient(
- trainloader=trainloaders[int(cid)],
- vallodaer=valloaders[int(cid)],
- model_cfg=model_cfg,
- ).to_client()
-
- return client_fn
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/base.yaml b/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/base.yaml
deleted file mode 100644
index 5d18c77ad8e5..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/base.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
----
-
-num_rounds: 10
-num_clients: 100
-batch_size: 20
-num_classes: 10
-num_clients_per_round_fit: 10
-num_clients_per_round_eval: 25
-config_fit:
- lr: 0.01
- momentum: 0.9
- local_epochs: 1
-
-defaults:
- - model: net
- - strategy: fedavg # points to conf/strategy/fedavg.yaml
\ No newline at end of file
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/model/net.yaml b/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/model/net.yaml
deleted file mode 100644
index ee9e0158237f..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/model/net.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-_target_: model.Net
-num_classes: ${num_classes}
\ No newline at end of file
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/strategy/fedadam.yaml b/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/strategy/fedadam.yaml
deleted file mode 100644
index 4acf5c5d08b2..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/strategy/fedadam.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
----
-# Points to: https://github.com/adap/flower/blob/main/src/py/flwr/server/strategy/fedadam.py
-_target_: flwr.server.strategy.FedAdam # points to the standard FedAdam strategy (note you could point to your custom strategies too)
-fraction_fit: 0.00001
-min_fit_clients: ${num_clients_per_round_fit} # you can refer to any other variable defined in the config (as long as it is part of the experiment you run)
-fraction_evaluate: 0.00001
-min_evaluate_clients: ${num_clients_per_round_eval} # this is a reference to the setting defined in `conf/base.yaml`
-min_available_clients: ${num_clients}
-on_fit_config_fn: # this is a function
- _target_: server.get_on_fit_config
- config: ${config_fit}
-# arguments unique to FedAdam
-eta: 0.2
-eta_l: 0.01 # client side learning rate ! so be sure the clients get it (This is not implemented currently in the example code given)
-tau: 0.1
-initial_parameters: # This optional for some strategies, but required by FedAdam
- _target_: model.model_to_parameters
- model: ${model} # note you don't need to do `${defaults.model}`, just `${model}`
-# we could define here evaluate_fn, but since it requires arguments
-# that are defined at runtime (e.g. the test loader), let's better
-# do it in the main
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/strategy/fedavg.yaml b/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/strategy/fedavg.yaml
deleted file mode 100644
index 32191e3d9cfb..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/strategy/fedavg.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-_target_: flwr.server.strategy.FedAvg # points to FedAvg (as if you were doing it in your python file)
-fraction_fit: 0.00001
-min_fit_clients: ${num_clients_per_round_fit} # you can refer to any other variable defined in the config (as long as it is part of the experiment you run)
-fraction_evaluate: 0.00001
-min_evaluate_clients: ${num_clients_per_round_eval} # this is a reference to the setting defined in `conf/base.yaml`
-min_available_clients: ${num_clients}
-on_fit_config_fn: # this is a function
- _target_: server.get_on_fit_config
- config: ${config_fit}
-# we could define here evaluate_fn, but since it requires arguments
-# that are defined at runtime (e.g. the test loader), let's better
-# do it in the main
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/toy.yaml b/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/toy.yaml
deleted file mode 100644
index cc5a7f3a5ced..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/toy.yaml
+++ /dev/null
@@ -1,70 +0,0 @@
----
-
-
-## THE EASY BITS
-
-# a simple top-level element
-foo: 123
-
-# a hierarchy of variables
-bar:
- baz: [1.0, 3.141592, 99]
- bazz: 24
- more:
- bla: "hello"
- blabla: ${foo} # reference to `foo` at the top of this file
-
-# -------------------------------------------------------------------------------------------------
-## NOW I'M INTERESTED
-
-# A node describing a function with all arguments pre-defined
-my_func:
- _target_: toy.function_test
- x: 123 # a named argument for your function
- y: 321 # another named argument for your function
-
-
-# so we tell Hydra to instantiate a partial of this function. This is convenient if the second argument (y) is only defined at runtime
-my_partial_func:
- _target_: toy.function_test
- _partial_: true
- x: 123
-
-# create an object
-my_object:
- _target_: toy.MyClass
- x: 32 # a property of the class
-
-# -------------------------------------------------------------------------------------------------
-## NOW YOU ARE FLYING
-
-# You can have objects defined by Hydra inside other objects
-# and by default all will be instantiated
-my_complex_object:
- _target_: toy.MyComplexClass
- my_object:
- _target_: toy.MyClass
- x: ${bar.bazz} # reference to bar.bazz
-
-# In some settings internal objects can't be instantiated at the same
-# time as the parent object (maybe because it depends on some external
-# variables or process). You can prevent this by telling Hydra not to
-# instantiate objects recursively.
-my_complex_object_non_recursive:
- _target_: toy.MyComplexClass
- _recursive_: false
- my_object:
- _target_: toy.MyClass
- # we'll pass the argument at runtime
-
-# sometimes you want to deconstruct your config file into several, each designed for a clear purpose.
-# For example, one set of .yaml files for dataset, another for model architectures. When you use Flower
-# you probably want to have one set of .yaml for the strategies, another for different types of clients, etc
-# With hydra, you want to structure these config files in a very particular way. For example, if you
-# want a node (e.g 'toy_model`) to be parameterised by different config files, they all should go
-# inside a directory called `toy_model`, then you do as shown below to pick different .yamls
-defaults:
- - toy_model: resnet18 # will point to conf/toy_model/resnet18.yaml
- # if you want to override this parameter you'd do it without considering the "default" keyword
- # python toy.py toy_model=efficientnetb3
- # Note that `defaults` is a list (i.e., each element has `-` at the beginning)
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/toy_model/mobilenetv2.yaml b/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/toy_model/mobilenetv2.yaml
deleted file mode 100644
index e9139723442a..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/toy_model/mobilenetv2.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-# will instantiate TorchVision's MobileNetV2 and set the number of classes to ${foo}
-_target_: torchvision.models.mobilenet_v2
-num_classes: ${foo}
\ No newline at end of file
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/toy_model/resnet18.yaml b/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/toy_model/resnet18.yaml
deleted file mode 100644
index 8794eada0316..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-II/conf/toy_model/resnet18.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-# will instantiate TorchVision's ResNet18 and set the number of classes to ${foo}
-_target_: torchvision.models.resnet18
-num_classes: ${foo}
\ No newline at end of file
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-II/dataset.py b/examples/flower-simulation-step-by-step-pytorch/Part-II/dataset.py
deleted file mode 100644
index fb5d8504ed65..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-II/dataset.py
+++ /dev/null
@@ -1,60 +0,0 @@
-import torch
-from torch.utils.data import DataLoader, random_split
-from torchvision.datasets import MNIST
-from torchvision.transforms import Compose, Normalize, ToTensor
-
-
-def get_mnist(data_path: str = "./data"):
- """Downlaod MNIST and apply a simple transform."""
-
- tr = Compose([ToTensor(), Normalize((0.1307,), (0.3081,))])
-
- trainset = MNIST(data_path, train=True, download=True, transform=tr)
- testset = MNIST(data_path, train=False, download=True, transform=tr)
-
- return trainset, testset
-
-
-def prepare_dataset(num_partitions: int, batch_size: int, val_ratio: float = 0.1):
- """Download and partition the MNIST dataset."""
-
- # We are not doing any Hydra magic here but this is one place you'd normally
- # add some of it. Why? because you probably want different datasets in your
- # Flower experiments. Each could easily require a different partitioning mechanism
- # or none at all. For example, if you want to use MNIST, CIFAR-10, FEMNIST, SpeechCommands,
- # these require very different loading/partitioning/preprocessing methodologies.
- # having this arranged via Hydra configs might be a small upfront cost but it pays off.
-
- trainset, testset = get_mnist()
-
- # split trainset into `num_partitions` trainsets
- num_images = len(trainset) // num_partitions
-
- partition_len = [num_images] * num_partitions
-
- trainsets = random_split(
- trainset, partition_len, torch.Generator().manual_seed(2023)
- )
-
- # create dataloaders with train+val support
- trainloaders = []
- valloaders = []
- for trainset_ in trainsets:
- num_total = len(trainset_)
- num_val = int(val_ratio * num_total)
- num_train = num_total - num_val
-
- for_train, for_val = random_split(
- trainset_, [num_train, num_val], torch.Generator().manual_seed(2023)
- )
-
- trainloaders.append(
- DataLoader(for_train, batch_size=batch_size, shuffle=True, num_workers=2)
- )
- valloaders.append(
- DataLoader(for_val, batch_size=batch_size, shuffle=False, num_workers=2)
- )
-
- testloader = DataLoader(testset, batch_size=128)
-
- return trainloaders, valloaders, testloader
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-II/main.py b/examples/flower-simulation-step-by-step-pytorch/Part-II/main.py
deleted file mode 100644
index 6da664df1203..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-II/main.py
+++ /dev/null
@@ -1,82 +0,0 @@
-import pickle
-from pathlib import Path
-
-import flwr as fl
-import hydra
-from hydra.core.hydra_config import HydraConfig
-from hydra.utils import call, instantiate
-from omegaconf import DictConfig, OmegaConf
-
-from client import generate_client_fn
-from dataset import prepare_dataset
-from server import get_evalulate_fn, get_on_fit_config
-
-# !!!! The code in this directory is the result of adpating the project first shown
-# in to make better use of Hydra's config system. It is recommended to first
-# check the original code. There you'll find also additional comments walking you
-# through in detail what each part of the code does.
-
-
-@hydra.main(config_path="conf", config_name="base", version_base=None)
-def main(cfg: DictConfig):
- ## 1. Parse config & get experiment output dir
- print(OmegaConf.to_yaml(cfg))
- save_path = HydraConfig.get().runtime.output_dir
-
- ## 2. Prepare your dataset
- trainloaders, validationloaders, testloader = prepare_dataset(
- cfg.num_clients, cfg.batch_size
- )
-
- ## 3. Define your clients
- # client_fn = generate_client_fn(trainloaders, validationloaders, cfg.num_classes)
-
- # Let's pass the config node that defines the model. in this way changing models doesn't
- # require any changes to the code (just run the code with a different config)
- client_fn = generate_client_fn(trainloaders, validationloaders, cfg.model)
-
- ## 4. Define your strategy
- # strategy = fl.server.strategy.FedAvg(fraction_fit=0.00001,
- # min_fit_clients=cfg.num_clients_per_round_fit,
- # fraction_evaluate=0.00001,
- # min_evaluate_clients=cfg.num_clients_per_round_eval,
- # min_available_clients=cfg.num_clients,
- # on_fit_config_fn=get_on_fit_config(cfg.config_fit),
- # evaluate_fn=get_evalulate_fn(cfg.num_classes,
- # testloader),
- # )
-
- # So we have replaced the above with just a single line. Now if we want to use a different strategy,
- # even if it uses new arguments, you can leave the code below as is and pick a different config
- # The line below is instantiating the `strategy` node in the config. The result is an object of
- # the type specified in the _target_ field of it's config structure. For example, if you are using
- # the default (`conf/strategy/fedavg.yaml`), then _target_ is `flwr.server.strategy.FedAvg`.
- # The moment you run the experiment (i.e. when the config is parsed) not all field would be defined.
- # for instance, the testloader is not ready so `evaluate_fn` argument cannot be set. You can pass them
- # manually the moment you call `instantiate`. (if you are familiar with Python partials, this is similar)
- strategy = instantiate(
- cfg.strategy, evaluate_fn=get_evalulate_fn(cfg.model, testloader)
- )
-
- ## 5. Start Simulation
- # As you'll notice, we can start the simulation in exactly the same way as we did in the previous project.
- history = fl.simulation.start_simulation(
- client_fn=client_fn,
- num_clients=cfg.num_clients,
- config=fl.server.ServerConfig(num_rounds=cfg.num_rounds),
- strategy=strategy,
- client_resources={"num_cpus": 2, "num_gpus": 0.0},
- )
-
- ## 6. Save your results
- # now we save the results of the simulation.
- results_path = Path(save_path) / "results.pkl"
-
- results = {"history": history, "anythingelse": "here"}
-
- with open(str(results_path), "wb") as h:
- pickle.dump(results, h, protocol=pickle.HIGHEST_PROTOCOL)
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-II/model.py b/examples/flower-simulation-step-by-step-pytorch/Part-II/model.py
deleted file mode 100644
index f57bc9b5d100..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-II/model.py
+++ /dev/null
@@ -1,67 +0,0 @@
-import torch
-import torch.nn as nn
-import torch.nn.functional as F
-from flwr.common.parameter import ndarrays_to_parameters
-
-
-class Net(nn.Module):
- def __init__(self, num_classes: int) -> None:
- super(Net, self).__init__()
- self.conv1 = nn.Conv2d(1, 6, 5)
- self.pool = nn.MaxPool2d(2, 2)
- self.conv2 = nn.Conv2d(6, 16, 5)
- self.fc1 = nn.Linear(16 * 4 * 4, 120)
- self.fc2 = nn.Linear(120, 84)
- self.fc3 = nn.Linear(84, num_classes)
-
- def forward(self, x: torch.Tensor) -> torch.Tensor:
- x = self.pool(F.relu(self.conv1(x)))
- x = self.pool(F.relu(self.conv2(x)))
- x = x.view(-1, 16 * 4 * 4)
- x = F.relu(self.fc1(x))
- x = F.relu(self.fc2(x))
- x = self.fc3(x)
- return x
-
-
-def train(net, trainloader, optimizer, epochs, device: str):
- """Train the network on the training set."""
- criterion = torch.nn.CrossEntropyLoss()
- net.train()
- net.to(device)
- for _ in range(epochs):
- for images, labels in trainloader:
- images, labels = images.to(device), labels.to(device)
- optimizer.zero_grad()
- loss = criterion(net(images), labels)
- loss.backward()
- optimizer.step()
-
-
-def test(net, testloader, device: str):
- """Validate the network on the entire test set."""
- criterion = torch.nn.CrossEntropyLoss()
- correct, loss = 0, 0.0
- net.eval()
- net.to(device)
- with torch.no_grad():
- for data in testloader:
- images, labels = data[0].to(device), data[1].to(device)
- outputs = net(images)
- loss += criterion(outputs, labels).item()
- _, predicted = torch.max(outputs.data, 1)
- correct += (predicted == labels).sum().item()
- accuracy = correct / len(testloader.dataset)
- return loss, accuracy
-
-
-def model_to_parameters(model):
- """Note that the model is already instantiated when passing it here.
-
- This happens because we call this utility function when instantiating the parent
- object (i.e. the FedAdam strategy in this example).
- """
- ndarrays = [val.cpu().numpy() for _, val in model.state_dict().items()]
- parameters = ndarrays_to_parameters(ndarrays)
- print("Extracted model parameters!")
- return parameters
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-II/server.py b/examples/flower-simulation-step-by-step-pytorch/Part-II/server.py
deleted file mode 100644
index f1f8293cc6fb..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-II/server.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from collections import OrderedDict
-
-import torch
-from hydra.utils import instantiate
-from omegaconf import DictConfig
-
-from model import Net, test
-
-
-def get_on_fit_config(config: DictConfig):
- """Return a function to configure the client's fit."""
-
- def fit_config_fn(server_round: int):
- return {
- "lr": config.lr,
- "momentum": config.momentum,
- "local_epochs": config.local_epochs,
- }
-
- return fit_config_fn
-
-
-def get_evalulate_fn(model_cfg: int, testloader):
- """Return a function to evaluate the global model."""
-
- def evaluate_fn(server_round: int, parameters, config):
- model = instantiate(model_cfg)
-
- device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
-
- params_dict = zip(model.state_dict().keys(), parameters)
- state_dict = OrderedDict({k: torch.Tensor(v) for k, v in params_dict})
- model.load_state_dict(state_dict, strict=True)
-
- loss, accuracy = test(model, testloader, device)
-
- return loss, {"accuracy": accuracy}
-
- return evaluate_fn
diff --git a/examples/flower-simulation-step-by-step-pytorch/Part-II/toy.py b/examples/flower-simulation-step-by-step-pytorch/Part-II/toy.py
deleted file mode 100644
index 0bae932e3bce..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/Part-II/toy.py
+++ /dev/null
@@ -1,111 +0,0 @@
-import hydra
-from hydra.utils import call, instantiate
-from omegaconf import DictConfig, OmegaConf
-
-
-def function_test(x: int, y: int):
- """A simple function that ads up two integers."""
- print(f"`function_test` received: {x = }, and {y = }")
- result = x + y
- print(f"{result = }")
-
-
-class MyClass:
- """A simple class."""
-
- def __init__(self, x):
- self.x = x
-
- def print_x_squared(self):
- print(f"{self.x**2 = }")
-
-
-class MyComplexClass:
- """A class with some Hydra magic inside."""
-
- def __init__(self, my_object: MyClass):
- self.object = my_object
-
- def instantiate_child(self, value):
- self.object = instantiate(self.object, x=value)
-
-
-# run main() by passing the `conf/toy.yaml` config file in this directory
-@hydra.main(config_path="conf", config_name="toy", version_base=None)
-def main(cfg: DictConfig):
- # print config as yaml
- print(OmegaConf.to_yaml(cfg))
-
- ## THE EASY BITS
- print("--------" * 7)
- # Access elements in your config easily by:
- print(f"{cfg.foo = }")
- print(f"{cfg.bar.baz = }")
- print(f"{cfg.bar.more = }")
- print(
- f"{cfg.bar.more.blabla = }"
- ) # not how when you do access the element directly, it's value gets assigned (not shown as a reference anymore)
-
- ## NOW I'M INTERESTED !
- print("--------" * 7)
- # Let's run a standard Python function (`function_test` defined above)
- # with the arguments for x and y specified in the config file
- call(cfg.my_func)
-
- # you can override some arguments at runtime too (which is a bit linked to the
- # topic of the next comment below)
- call(cfg.my_func, x=99)
-
- # In some settings not all argument will be ready immediately, but you still
- # want to be able to call it from other places in your code once the remaining
- # arguments are defined/updated. You can do this using a Python partial.
- partial_fn = call(
- cfg.my_partial_func
- ) #! If you run this with `_partial_` set to false in the config, it will trigger an error since `y` is not defined
-
- # with your partial ready you can call the original function by specifying
- # the value of `y` you like.
- partial_fn(y=2023)
- # Aren't partials the second best thing ever?! (after Flower)
-
- # Similarly to functions, you can create standard Python objects. This time use
- # `instantiate` instead of `call`. The same principle for partials applies here too
- object: MyClass = instantiate(cfg.my_object)
- # then you can call its methods as usual
- object.print_x_squared() # if you were to type this line yourself you'd notice that there was no autocompletion
- # this is because the class that `object` is an instance of is only know at run time.
- # This makes writing code a bit more inconvenient but it's a small price to pay given
- # how versatile Hydra would make your code base.
- # You could have set the type in the line above by doing: `object: MyClass = instantiate(cfg.my_objcetc)`
- # but, unless all your objects do inherit from a common parent class, this approach might restrict Hydra.
-
- ## NOW YOU ARE FLYING !!!
- print("--------" * 7)
- # your objects can have other objects inside also defined w/ Hydra
- # by default, `instantiate()` will instantiate everything recursively.
- obj = instantiate(cfg.my_complex_object)
- print(obj.object.x) # should print 99 unless you changed the config
-
- # In some situations you might want to have the top-level object defined
- # but not the child objects. Maybe because they can only be instantiated
- # after some other data is available or maybe because you prefer to have
- # more control over the instantiation process. Set `_recursive_` to false
- # in order to prevent recursive instantiation of objects
- obj = instantiate(cfg.my_complex_object_non_recursive)
- print(obj.object) # you'll see that it retains the config content
- # now let's instantiate setting it's value `x`
- obj.instantiate_child(9999)
- print(
- obj.object.x
- ) # it should print now the value we instantiate the object of type `MyClass` with (i.e. =9999)
-
- # finally, let's instantiate the PyTorch model set in our config
- # (yes, you can instantiate any class, not just the ones you create)
- model = instantiate(cfg.toy_model)
- # print(model) #! print the model architecture (uncomment)
- num_parameters = sum([p.numel() for p in model.state_dict().values()])
- print(f"{cfg.toy_model} has: {num_parameters} parameters")
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/flower-simulation-step-by-step-pytorch/README.md b/examples/flower-simulation-step-by-step-pytorch/README.md
index b00afedbe80b..0f269f62c143 100644
--- a/examples/flower-simulation-step-by-step-pytorch/README.md
+++ b/examples/flower-simulation-step-by-step-pytorch/README.md
@@ -1,50 +1,129 @@
---
-tags: [basic, vision, simulation]
-dataset: [MNIST]
+tags: [vision, simulation, video-tutorial]
+dataset: [Fashion-MNIST]
framework: [torch]
---
# Flower Simulation Step-by-Step
-> Since this tutorial (and its video series) was put together, Flower has been updated a few times. As a result, some of the steps to construct the environment (see below) have been updated. Some parts of the code have also been updated. Overall, the content of this tutorial and how things work remains the same as in the video tutorials.
+> \[!NOTE\]
+> While this tutorial shows how to extend the functionality of a Flower App that uses PyTorch, there is little specific about PyTorch in the changes described in this tutorial series. This means that you can make use of all the concepts presented even if you decide to use a different ML framework.
-This directory contains the code developed in the `Flower Simulation` tutorial series on Youtube. You can find all the videos [here](https://www.youtube.com/playlist?list=PLNG4feLHqCWlnj8a_E1A_n5zr2-8pafTB) or clicking on the video preview below.
+This directory contains the code to follow along the `Flower AI Simulation 2025` tutorial series on Youtube. You can find all the videos [here](https://www.youtube.com/playlist?list=PLNG4feLHqCWkdlSrEL2xbCtGa6QBxlUZb) or clicking on the video previews below.
-- In `Part-I` (7 videos) we developed from scratch a complete Federated Learning pipeline for simulation using PyTorch.
-- In `Part-II` (2 videos) we _enhanced_ the code in `Part-I` by making a better use of Hydra configs.
+| [](https://youtu.be/XK_dRVcSZqg) | [](https://youtu.be/VwGq16DMx3Q) | [](https://youtu.be/8Uwsa0x7VJw) | [](https://youtu.be/KsMP9dgcLw4) | [](https://youtu.be/dZRDe1ldy5s) |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| [](https://youtu.be/udDSIQyYzNM) | [](https://youtu.be/ppYemmT2mOs) | [](https://youtu.be/TAUxb9eEZ3w) | [](https://youtu.be/nUUkuqi4Lpo) | |
-
+> \[!TIP\]
+> 🙋 Got questions? Something isn't covered or could be improved? **We'd love to hear from you!** Join the [🌼 Flower Workspace](https://flower.ai/join-slack/) and the [Flower Discuss Forum](https://discuss.flower.ai/)!
-## Constructing your Python Environment
+## Complementary Resources
-As presented in the video, we first need to create a Python environment. You are free to choose the tool you are most familiar with, we'll be using `conda` in this tutorial. You can create the conda and setup the environment as follows:
+In this tutorial series, we make reference to several pages in the [Flower Documentation](https://flower.ai/docs/). In particular, these videos highlight pages for:
-```bash
-# I'm assuming you are running this on an Ubuntu 22.04 machine (GPU is not required)
+- [Visualizing Dataset Distributions using `flwr-datasets`](https://flower.ai/docs/datasets/tutorial-visualize-label-distribution.html)
+- [List of all Partitioners available in `flwr-datasets`](https://flower.ai/docs/datasets/ref-api/flwr_datasets.partitioner.html)
+- [How-to Run Simulations page](https://flower.ai/docs/framework/how-to-run-simulations.html)
+- [How-to Design Stateful ClientApps](https://flower.ai/docs/framework/how-to-design-stateful-clients.html)
+- [Quickstart Pytorch Tutorial](https://flower.ai/docs/framework/tutorial-quickstart-pytorch.html)
+- [Advanced PyTorch Example](https://github.com/adap/flower/tree/main/examples/advanced-pytorch)
-# create the environment
-conda create -n flower_tutorial python=3.9 -y
+## Getting Started
-# activate your environment (depending on how you installed conda you might need to use `conda activate ...` instead)
-source activate flower_tutorial
+> \[!TIP\]
+> If you are developing on Windows, it is recommended to make use of the Windows Subsystem for Linux (WSL). Check the guide on [how to setup WSL for development on Windows](https://code.visualstudio.com/docs/remote/wsl).
-# install PyToch (other versions would likely work)
-conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.6 -c pytorch -c nvidia -y
-# conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 -c pytorch -y # If you don't have a GPU
+As presented in the video, we start from a new Python 3.11 environment. You only need to activate it and install `flwr`.
-# Install Flower and other dependencies
-pip install -r requirements.txt
+```bash
+# Install Flower
+pip install -U flwr
```
-If you are running this on macOS with Apple Silicon (i.e. M1, M2), you'll need a different `grpcio` package if you see an error when running the code. To fix this do:
+Then, use the `flwr new` command to construct a new Flower App using the PyTorch template:
-```bash
-# with your conda environment activated
-pip uninstall grpcio
+```shell
+flwr new my-awesome-app
+```
+
+The vast majority of the content added to the App (as described in the video tutorials) isn't specific to PyTorch. This means you are welcome to choose another template such as `TF`, `NumPy`, `MLX` or `JAX` if you prefer. Just keep in mind you might need to do additional edits to your App (e.g. save the model differently, in the recommended way by your chosen ML framework) If you are undecided, `PyTorch` is a great framework.
+
+> \[!NOTE\]
+> These steps represent the very first commands shown on the first video. They `flwr new` command will create a Flower App you can run directly. In videos 2-7 you'll learn how to modify the App and add, step by step, new functionality. You can check the `my-awesome-app` directory, which contains the completed code presented in the tutorial videos.
+
+## Running the App
+
+Just like all other Flower Apps, you can run the one in this directory by means of `flwr run`. More info about this command in the videos!
+
+```shell
+flwr run my-awesome-app
+# Alternatively, if you cd into the `my-awesome-app` directory
+# you can run the app by simply doing `flwr run .`
+```
+
+The output you should expect without making changes to the code is as follows:
-conda install grpcio -y
+```shell
+Loading project configuration...
+Success
+wandb: Using wandb-core as the SDK backend. Please refer to https://wandb.me/wandb-core for more information.
+wandb: Currently logged in as: . Use `wandb login --relogin` to force relogin
+wandb: Tracking run with wandb version 0.18.7
+wandb: Run `wandb offline` to turn off syncing.
+wandb: Syncing run custom-strategy-2024-12-10_07:32:03
+wandb: ⭐️ View project at https://wandb.ai//flower-simulation-tutorial
+wandb: 🚀 View run at https://wandb.ai//flower-simulation-tutorial/runs/reyoryuu
+INFO : Starting Flower ServerApp, config: num_rounds=3, no round_timeout
+INFO :
+INFO : [INIT]
+INFO : Using initial global parameters provided by strategy
+INFO : Starting evaluation of initial global parameters
+INFO : initial parameters (loss, other metrics): 2.3028839167695456, {'cen_accuracy': 0.0937}
+INFO :
+INFO : [ROUND 1]
+INFO : configure_fit: strategy sampled 5 clients (out of 10)
+INFO : aggregate_fit: received 5 results and 0 failures
+INFO : fit progress: (1, 2.0274660648248446, {'cen_accuracy': 0.3238}, 5.769022958003916)
+INFO : configure_evaluate: strategy sampled 10 clients (out of 10)
+INFO : aggregate_evaluate: received 10 results and 0 failures
+INFO :
+INFO : [ROUND 2]
+INFO : configure_fit: strategy sampled 5 clients (out of 10)
+INFO : aggregate_fit: received 5 results and 0 failures
+INFO : fit progress: (2, 0.7511614774362728, {'cen_accuracy': 0.6926}, 11.233382292004535)
+INFO : configure_evaluate: strategy sampled 10 clients (out of 10)
+INFO : aggregate_evaluate: received 10 results and 0 failures
+INFO :
+INFO : [ROUND 3]
+INFO : configure_fit: strategy sampled 5 clients (out of 10)
+INFO : aggregate_fit: received 5 results and 0 failures
+INFO : fit progress: (3, 0.5243101176172019, {'cen_accuracy': 0.8035}, 13.289899208000861)
+INFO : configure_evaluate: strategy sampled 10 clients (out of 10)
+INFO : aggregate_evaluate: received 10 results and 0 failures
+INFO :
+INFO : [SUMMARY]
+INFO : Run finished 3 round(s) in 13.60s
+INFO : History (loss, distributed):
+INFO : round 1: 2.0251417029128924
+INFO : round 2: 0.7533456925429649
+INFO : round 3: 0.5141592433326874
+INFO : History (loss, centralized):
+INFO : round 0: 2.3028839167695456
+INFO : round 1: 2.0274660648248446
+INFO : round 2: 0.7511614774362728
+INFO : round 3: 0.5243101176172019
+INFO : History (metrics, distributed, fit):
+INFO : {'max_b': [(1, 0.8776450829832974),
+INFO : (2, 0.8755706409526767),
+INFO : (3, 0.880116537616749)]}
+INFO : History (metrics, distributed, evaluate):
+INFO : {'accuracy': [(1, 0.3237817576009996),
+INFO : (2, 0.6909620991253644),
+INFO : (3, 0.8046647230320699)]}
+INFO : History (metrics, centralized):
+INFO : {'cen_accuracy': [(0, 0.0937), (1, 0.3238), (2, 0.6926), (3, 0.8035)]}
+INFO :
+wandb: 🚀 View run custom-strategy-2024-12-10_07:32:03 at: https://wandb.ai//flower-simulation...
+wandb: Find logs at: wandb/run-20241210_073204-reyoryuu/logs
```
diff --git a/src/py/flwr/cli/new/templates/app/.gitignore.tpl b/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/.gitignore
similarity index 100%
rename from src/py/flwr/cli/new/templates/app/.gitignore.tpl
rename to examples/flower-simulation-step-by-step-pytorch/my-awesome-app/.gitignore
diff --git a/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/README.md b/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/README.md
new file mode 100644
index 000000000000..011866bac52b
--- /dev/null
+++ b/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/README.md
@@ -0,0 +1,34 @@
+> \[!TIP\]
+> This readme is auto-generated by `flwr new`.
+
+# my-awesome-app: A Flower / PyTorch app
+
+## Install dependencies and project
+
+```bash
+pip install -e .
+```
+
+## Run with the Simulation Engine
+
+In the `my-awesome-app` directory, use `flwr run` to run a local simulation:
+
+```bash
+flwr run .
+```
+
+Refer to the [How to Run Simulations](https://flower.ai/docs/framework/how-to-run-simulations.html) guide in the documentation for advice on how to optimize your simulations.
+
+## Run with the Deployment Engine
+
+> \[!NOTE\]
+> An update to this example will show how to run this Flower application with the Deployment Engine and TLS certificates, or with Docker.
+
+## Resources
+
+- Flower website: [flower.ai](https://flower.ai/)
+- Check the documentation: [flower.ai/docs](https://flower.ai/docs/)
+- Give Flower a ⭐️ on GitHub: [GitHub](https://github.com/adap/flower)
+- Join the Flower community!
+ - [Flower Slack](https://flower.ai/join-slack/)
+ - [Flower Discuss](https://discuss.flower.ai/)
diff --git a/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/my_awesome_app/__init__.py b/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/my_awesome_app/__init__.py
new file mode 100644
index 000000000000..22b2ae07363a
--- /dev/null
+++ b/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/my_awesome_app/__init__.py
@@ -0,0 +1 @@
+"""my-awesome-app: A Flower / PyTorch app."""
diff --git a/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/my_awesome_app/client_app.py b/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/my_awesome_app/client_app.py
new file mode 100644
index 000000000000..fa1b589d0cdc
--- /dev/null
+++ b/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/my_awesome_app/client_app.py
@@ -0,0 +1,96 @@
+"""my-awesome-app: A Flower / PyTorch app."""
+
+import torch
+from random import random
+from flwr.client import ClientApp, NumPyClient
+from flwr.common import Context, ConfigsRecord
+from my_awesome_app.task import Net, get_weights, load_data, set_weights, test, train
+
+import json
+
+
+class FlowerClient(NumPyClient):
+ def __init__(self, net, trainloader, valloader, local_epochs, context: Context):
+ self.client_state = context.state
+ self.net = net
+ self.trainloader = trainloader
+ self.valloader = valloader
+ self.local_epochs = local_epochs
+ self.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
+ self.net.to(self.device)
+
+ if "fit_metrics" not in self.client_state.configs_records:
+ self.client_state.configs_records["fit_metrics"] = ConfigsRecord()
+
+ def fit(self, parameters, config):
+ """Train a model using as starting point the parameters sent by the ServerApp.
+
+ Then, communicate the weights of the locally-updated model back to the
+ ServerApp.
+ """
+ # Apply parameters to local model
+ set_weights(self.net, parameters)
+ train_loss = train(
+ self.net,
+ self.trainloader,
+ self.local_epochs,
+ config["lr"],
+ self.device,
+ )
+
+ # Append to persistent state the `train_loss` just obtained
+ fit_metrics = self.client_state.configs_records["fit_metrics"]
+ if "train_loss_hist" not in fit_metrics:
+ # If first entry, create the list
+ fit_metrics["train_loss_hist"] = [train_loss]
+ else:
+ # If it's not the first entry, append to the existing list
+ fit_metrics["train_loss_hist"].append(train_loss)
+
+ # A complex metric strcuture can be returned by a ClientApp if it is first
+ # converted to a supported type by `flwr.common.Scalar`. Here we serialize it with
+ # JSON and therefore representing it as a string (one of the supported types)
+ complex_metric = {"a": 123, "b": random(), "mylist": [1, 2, 3, 4]}
+ complex_metric_str = json.dumps(complex_metric)
+
+ return (
+ get_weights(self.net), # Return parameters of the locally-updated model
+ len(
+ self.trainloader.dataset
+ ), # Training examples used (needed sometimes for aggregation)
+ {
+ "train_loss": train_loss,
+ "my_metric": complex_metric_str,
+ }, # Communicate metrics
+ )
+
+ def evaluate(self, parameters, config):
+ """Evaluate the global model weights using the local validation set."""
+ # Apply weights from global model
+ set_weights(self.net, parameters)
+ # Run the test evaluation function
+ loss, accuracy = test(self.net, self.valloader, self.device)
+ # Report results. Note the last argument is of type `Metrics` so you could communicate
+ # other values that are relevant to your use case.
+ return loss, len(self.valloader.dataset), {"accuracy": accuracy}
+
+
+def client_fn(context: Context):
+ """A function that returns a Client."""
+
+ # Instantiate the model
+ net = Net()
+ # Read node config and fetch data for the ClientApp that is being constructed
+ partition_id = context.node_config["partition-id"]
+ num_partitions = context.node_config["num-partitions"]
+ trainloader, valloader = load_data(partition_id, num_partitions)
+
+ # Read the run config (defined in the `pyproject.toml`)
+ local_epochs = context.run_config["local-epochs"]
+
+ # Return Client instance
+ return FlowerClient(net, trainloader, valloader, local_epochs, context).to_client()
+
+
+# Flower ClientApp
+app = ClientApp(client_fn=client_fn)
diff --git a/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/my_awesome_app/my_strategy.py b/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/my_awesome_app/my_strategy.py
new file mode 100644
index 000000000000..61225bf152c3
--- /dev/null
+++ b/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/my_awesome_app/my_strategy.py
@@ -0,0 +1,75 @@
+from flwr.common import FitRes, Parameters, parameters_to_ndarrays
+from flwr.server.client_proxy import ClientProxy
+from flwr.server.strategy import FedAvg
+
+import torch
+import json
+import wandb
+from datetime import datetime
+
+from .task import Net, set_weights
+
+
+class CustomFedAvg(FedAvg):
+ """A strategy that keeps the core functionality of FedAvg unchanged but enables
+ additional features such as: Saving global checkpoints, saving metrics to the local
+ file system as a JSON, pushing metrics to Weight & Biases.
+ """
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+
+ # A dictionary that will store the metrics generated on each round
+ self.results_to_save = {}
+
+ # Log those same metrics to W&B
+ name = datetime.now().strftime("%Y-%m-%d_%H:%M:%S")
+ wandb.init(project="flower-simulation-tutorial", name=f"custom-strategy-{name}")
+
+ def aggregate_fit(
+ self,
+ server_round: int,
+ results: list[tuple[ClientProxy, FitRes]],
+ failures: list[tuple[ClientProxy, FitRes] | BaseException],
+ ) -> tuple[Parameters | None, dict[str, bool | bytes | float | int | str]]:
+ """Aggregate received model updates and metrics, ave global model checkpoint."""
+
+ # Call the default aggregate_fit method from FedAvg
+ parameters_aggregated, metrics_aggregated = super().aggregate_fit(
+ server_round, results, failures
+ )
+
+ ## Save new Global Model as a PyTorch checkpoint
+ # Convert parameters to ndarrays
+ ndarrays = parameters_to_ndarrays(parameters_aggregated)
+ # Instantiate model
+ model = Net()
+ # Apply paramters to model
+ set_weights(model, ndarrays)
+ # Save global model in the standard PyTorch way
+ torch.save(model.state_dict(), f"global_model_round_{server_round}")
+
+ # Return the expected outputs for `aggregate_fit`
+ return parameters_aggregated, metrics_aggregated
+
+ def evaluate(
+ self, server_round: int, parameters: Parameters
+ ) -> tuple[float, dict[str, bool | bytes | float | int | str]] | None:
+ """Evaluate global model, then save metrics to local JSON and to W&B."""
+ # Call the default behaviour from FedAvg
+ loss, metrics = super().evaluate(server_round, parameters)
+
+ # Store metrics as dictionary
+ my_results = {"loss": loss, **metrics}
+ # Insert into local dictionary
+ self.results_to_save[server_round] = my_results
+
+ # Save metrics as json
+ with open("results.json", "w") as json_file:
+ json.dump(self.results_to_save, json_file, indent=4)
+
+ # Log metrics to W&B
+ wandb.log(my_results, step=server_round)
+
+ # Return the expected outputs for `evaluate`
+ return loss, metrics
diff --git a/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/my_awesome_app/server_app.py b/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/my_awesome_app/server_app.py
new file mode 100644
index 000000000000..7a4a64383ada
--- /dev/null
+++ b/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/my_awesome_app/server_app.py
@@ -0,0 +1,99 @@
+"""my-awesome-app: A Flower / PyTorch app."""
+
+import json
+from typing import List, Tuple
+from flwr.common import Context, ndarrays_to_parameters, Metrics
+from flwr.server import ServerApp, ServerAppComponents, ServerConfig
+from datasets import load_dataset
+from torch.utils.data import DataLoader
+
+from my_awesome_app.task import Net, get_weights, set_weights, test, get_transforms
+from my_awesome_app.my_strategy import CustomFedAvg
+
+
+def get_evaluate_fn(testloader, device):
+ """Return a callback that evaluates the global model."""
+
+ def evaluate(server_round, parameters_ndarrays, config):
+ """Evaluate global model using provided centralised testset."""
+ # Instantiate model
+ net = Net()
+ # Apply global_model parameters
+ set_weights(net, parameters_ndarrays)
+ net.to(device)
+ # Run test
+ loss, accuracy = test(net, testloader, device)
+
+ return loss, {"cen_accuracy": accuracy}
+
+ return evaluate
+
+
+def weighted_average(metrics: List[Tuple[int, Metrics]]) -> Metrics:
+ """Aggregates metrics from an evaluate round."""
+ # Loop trough all metrics received compute accuracies x examples
+ accuracies = [num_examples * m["accuracy"] for num_examples, m in metrics]
+ total_examples = sum(num_examples for num_examples, _ in metrics)
+ # Return weighted average accuracy
+ return {"accuracy": sum(accuracies) / total_examples}
+
+
+def handle_fit_metrics(metrics: List[Tuple[int, Metrics]]) -> Metrics:
+ """Aggregate metrics from a fit round.
+
+ This function showed a mechanism to communicate almost arbitrary metrics by
+ converting them into a JSON on the ClientApp side. Here that JSON string is
+ deserialized and reinterpreted as a dictionary we can use.
+ """
+ b_values = []
+ for _, m in metrics:
+ my_metric_str = m["my_metric"]
+ # Deserialize JSON and return dict
+ my_metric = json.loads(my_metric_str)
+ b_values.append(my_metric["b"])
+ # Return maximum value from deserialized metrics
+ return {"max_b": max(b_values)}
+
+
+def on_fit_config(server_round: int) -> Metrics:
+ """Adjusts learning rate based on current round."""
+ lr = 0.01
+ # Appply a simple learning rate decay
+ if server_round > 2:
+ lr = 0.005
+ return {"lr": lr}
+
+
+def server_fn(context: Context):
+ """A function that creates the components for a ServerApp."""
+ # Read from Run config
+ num_rounds = context.run_config["num-server-rounds"]
+ fraction_fit = context.run_config["fraction-fit"]
+
+ # Initialize model parameters
+ ndarrays = get_weights(Net())
+ parameters = ndarrays_to_parameters(ndarrays)
+
+ # Load global test set
+ testset = load_dataset("zalando-datasets/fashion_mnist")["test"]
+ # Construct dataloader
+ testloader = DataLoader(testset.with_transform(get_transforms()), batch_size=32)
+
+ # Define strategy
+ strategy = CustomFedAvg(
+ fraction_fit=fraction_fit,
+ fraction_evaluate=1.0, # All nodes are sampled for evaluation
+ min_available_clients=2,
+ initial_parameters=parameters,
+ evaluate_metrics_aggregation_fn=weighted_average,
+ fit_metrics_aggregation_fn=handle_fit_metrics,
+ on_fit_config_fn=on_fit_config,
+ evaluate_fn=get_evaluate_fn(testloader, device="cpu"),
+ )
+ config = ServerConfig(num_rounds=num_rounds)
+
+ return ServerAppComponents(strategy=strategy, config=config)
+
+
+# Create ServerApp
+app = ServerApp(server_fn=server_fn)
diff --git a/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/my_awesome_app/task.py b/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/my_awesome_app/task.py
new file mode 100644
index 000000000000..026f8c86f295
--- /dev/null
+++ b/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/my_awesome_app/task.py
@@ -0,0 +1,138 @@
+"""my-awesome-app: A Flower / PyTorch app."""
+
+from collections import OrderedDict
+
+import torch
+import torch.nn as nn
+import torch.nn.functional as F
+from flwr_datasets import FederatedDataset
+from flwr_datasets.partitioner import DirichletPartitioner
+from torch.utils.data import DataLoader
+from torchvision.transforms import Compose, Normalize, ToTensor
+
+
+class Net(nn.Module):
+ """Model (simple CNN adapted from 'PyTorch: A 60 Minute Blitz')"""
+
+ def __init__(self):
+ super(Net, self).__init__()
+ self.conv1 = nn.Conv2d(1, 6, 5)
+ self.pool = nn.MaxPool2d(2, 2)
+ self.conv2 = nn.Conv2d(6, 16, 5)
+ self.fc1 = nn.Linear(16 * 4 * 4, 120)
+ self.fc2 = nn.Linear(120, 84)
+ self.fc3 = nn.Linear(84, 10)
+
+ def forward(self, x):
+ x = self.pool(F.relu(self.conv1(x)))
+ x = self.pool(F.relu(self.conv2(x)))
+ x = x.view(-1, 16 * 4 * 4)
+ x = F.relu(self.fc1(x))
+ x = F.relu(self.fc2(x))
+ return self.fc3(x)
+
+
+def get_transforms():
+ """Return a function that apply standard transformations to images."""
+
+ pytorch_transforms = Compose([ToTensor(), Normalize((0.5,), (0.5,))])
+
+ def apply_transforms(batch):
+ """Apply transforms to the partition from FederatedDataset."""
+ batch["image"] = [pytorch_transforms(img) for img in batch["image"]]
+ return batch
+
+ return apply_transforms
+
+
+fds = None # Cache FederatedDataset
+
+
+def load_data(partition_id: int, num_partitions: int):
+ """Load partition FashionMNIST data."""
+ # Only initialize `FederatedDataset` once
+ global fds
+ if fds is None:
+ partitioner = DirichletPartitioner(
+ num_partitions=num_partitions, partition_by="label", alpha=1.0
+ )
+ fds = FederatedDataset(
+ dataset="zalando-datasets/fashion_mnist",
+ partitioners={"train": partitioner},
+ )
+ partition = fds.load_partition(partition_id)
+ # Divide data on each node: 80% train, 20% test
+ partition_train_test = partition.train_test_split(test_size=0.2, seed=42)
+
+ partition_train_test = partition_train_test.with_transform(get_transforms())
+ trainloader = DataLoader(partition_train_test["train"], batch_size=32, shuffle=True)
+ testloader = DataLoader(partition_train_test["test"], batch_size=32)
+ return trainloader, testloader
+
+
+def train(net, trainloader, epochs, lr, device):
+ """Train the model on the training set.
+
+ This is a fairly standard training loop for PyTorch. Note there is nothing specific
+ about Flower or Federated AI here.
+ """
+ net.to(device) # move model to GPU if available
+ criterion = torch.nn.CrossEntropyLoss().to(device)
+ optimizer = torch.optim.Adam(net.parameters(), lr=lr)
+ net.train()
+ running_loss = 0.0
+ for _ in range(epochs):
+ for batch in trainloader:
+ images = batch["image"]
+ labels = batch["label"]
+ optimizer.zero_grad()
+ loss = criterion(net(images.to(device)), labels.to(device))
+ loss.backward()
+ optimizer.step()
+ running_loss += loss.item()
+
+ avg_trainloss = running_loss / len(trainloader)
+ return avg_trainloss
+
+
+def test(net, testloader, device):
+ """Validate the model on the test set.
+
+ This is a fairly standard training loop for PyTorch. Note there is nothing specific
+ about Flower or Federated AI here.
+ """
+ net.to(device)
+ criterion = torch.nn.CrossEntropyLoss()
+ correct, loss = 0, 0.0
+ with torch.no_grad():
+ for batch in testloader:
+ images = batch["image"].to(device)
+ labels = batch["label"].to(device)
+ outputs = net(images)
+ loss += criterion(outputs, labels).item()
+ correct += (torch.max(outputs.data, 1)[1] == labels).sum().item()
+ accuracy = correct / len(testloader.dataset)
+ loss = loss / len(testloader)
+ return loss, accuracy
+
+
+def get_weights(net):
+ """Extract parameters from a model.
+
+ Note this is specific to PyTorch. You might want to update this function if you use
+ a more exotic model architecture or if you don't want to extrac all elements in
+ state_dict.
+ """
+ return [val.cpu().numpy() for _, val in net.state_dict().items()]
+
+
+def set_weights(net, parameters):
+ """Copy paramteres onto the model.
+
+ Note this is specific to PyTorch. You might want to update this function if you use
+ a more exotic model architecture or if you don't want to replace the entire
+ state_dict.
+ """
+ params_dict = zip(net.state_dict().keys(), parameters)
+ state_dict = OrderedDict({k: torch.from_numpy(v) for k, v in params_dict})
+ net.load_state_dict(state_dict, strict=True)
diff --git a/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/pyproject.toml b/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/pyproject.toml
new file mode 100644
index 000000000000..f4c4de26c50e
--- /dev/null
+++ b/examples/flower-simulation-step-by-step-pytorch/my-awesome-app/pyproject.toml
@@ -0,0 +1,42 @@
+[build-system]
+requires = ["hatchling"]
+build-backend = "hatchling.build"
+
+[project]
+name = "my-awesome-app"
+version = "1.0.0"
+description = ""
+license = "Apache-2.0"
+dependencies = [
+ "flwr[simulation]>=1.13.1",
+ "flwr-datasets[vision]>=0.4.0",
+ "torch==2.2.1",
+ "torchvision==0.17.1",
+ "wandb",
+]
+
+[tool.hatch.build.targets.wheel]
+packages = ["."]
+
+[tool.flwr.app]
+publisher = "javier"
+
+[tool.flwr.app.components]
+serverapp = "my_awesome_app.server_app:app"
+clientapp = "my_awesome_app.client_app:app"
+
+[tool.flwr.app.config]
+num-server-rounds = 3
+fraction-fit = 0.5
+local-epochs = 1
+
+[tool.flwr.federations]
+default = "local-simulation"
+
+[tool.flwr.federations.local-simulation]
+options.num-supernodes = 10
+
+[tool.flwr.federations.gpu-sim]
+options.num-supernodes = 100
+options.backend.client-resources.num-cpus = 2
+options.backend.client-resources.num-gpus = 0.0
diff --git a/examples/flower-simulation-step-by-step-pytorch/requirements.txt b/examples/flower-simulation-step-by-step-pytorch/requirements.txt
deleted file mode 100644
index a322192ca711..000000000000
--- a/examples/flower-simulation-step-by-step-pytorch/requirements.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-flwr[simulation]>=1.0, <2.0
-hydra-core==1.3.2
\ No newline at end of file
diff --git a/examples/quickstart-cpp/CMakeLists.txt b/examples/quickstart-cpp/CMakeLists.txt
index b0aca2eaa2b3..1b3d2e0ce6ee 100644
--- a/examples/quickstart-cpp/CMakeLists.txt
+++ b/examples/quickstart-cpp/CMakeLists.txt
@@ -46,7 +46,7 @@ else()
set(FLWR_SOURCE_ROOT "${flwr_repo_SOURCE_DIR}")
endif()
-set(FLWR_SDK_PATH "${FLWR_SOURCE_ROOT}/src/cc/flwr")
+set(FLWR_SDK_PATH "${FLWR_SOURCE_ROOT}/framework/src/cc/flwr")
file(GLOB FLWR_SRCS "${FLWR_SDK_PATH}/src/*.cc")
file(GLOB FLWR_PROTO_SRCS "${FLWR_SDK_PATH}/include/flwr/proto/*.cc")
diff --git a/dev/add-swift-api-footer.sh b/framework/dev/add-swift-api-footer.sh
similarity index 83%
rename from dev/add-swift-api-footer.sh
rename to framework/dev/add-swift-api-footer.sh
index b18caaf7d801..5dd7f0af69b5 100644
--- a/dev/add-swift-api-footer.sh
+++ b/framework/dev/add-swift-api-footer.sh
@@ -16,17 +16,17 @@
# ==============================================================================
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
-footer_template_file="dev/swift-docs-resources/footer.html"
+footer_template_file="framework/dev/swift-docs-resources/footer.html"
footer_template=$(<"$footer_template_file")
placeholder=''
html_file="Swiftdoc/html/documentation/flwr/index.html"
sed -i '' -e "s#$(printf '%s' "$placeholder" | sed 's/[&/\]/\\&/g')#$placeholder\n$footer_template#" "$html_file"
-flower_logo='dev/swift-docs-resources/logo_secondary-w-border.png'
-footer_template_css="dev/swift-docs-resources/footer.css"
+flower_logo='framework/dev/swift-docs-resources/logo_secondary-w-border.png'
+footer_template_css="framework/dev/swift-docs-resources/footer.css"
destination_images="Swiftdoc/html/images/"
destination_css="Swiftdoc/html/css/"
diff --git a/dev/bootstrap.sh b/framework/dev/bootstrap.sh
similarity index 86%
rename from dev/bootstrap.sh
rename to framework/dev/bootstrap.sh
index bfcdc8a4369e..0b74bcd99c7d 100755
--- a/dev/bootstrap.sh
+++ b/framework/dev/bootstrap.sh
@@ -1,12 +1,12 @@
#!/bin/bash
set -e
-cd "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../
+cd "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../../
# Setup environment variables for development
-./dev/setup-envs.sh
+./framework/dev/setup-envs.sh
# Remove caches
-./dev/rm-caches.sh
+./framework/dev/rm-caches.sh
# Upgrade/install spcific versions of `pip`, `setuptools`, and `poetry`
python -m pip install -U pip==24.1.2
diff --git a/dev/build-baseline-docs.sh b/framework/dev/build-baseline-docs.sh
similarity index 84%
rename from dev/build-baseline-docs.sh
rename to framework/dev/build-baseline-docs.sh
index 794cf2537c74..d79c8e8915d7 100755
--- a/dev/build-baseline-docs.sh
+++ b/framework/dev/build-baseline-docs.sh
@@ -1,9 +1,9 @@
#!/bin/bash
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
ROOT=`pwd`
-INDEX=$ROOT/baselines/doc/source/index.rst
+INDEX=$ROOT/baselines/docs/source/index.rst
initial_text=$(cat <<-END
.. toctree::
@@ -56,7 +56,7 @@ function add_table_entry ()
! grep -q ":caption: References" $INDEX && echo "$initial_text" >> $INDEX && echo "" >> $INDEX
-rm -f "baselines/doc/source/*.md"
+rm -f "baselines/docs/source/*.md"
cd $ROOT/baselines/
@@ -67,12 +67,12 @@ for d in $(printf '%s\n' */ | sort -V); do
# Select directories
baseline=${d%/}
- if ! [[ "$baseline" =~ ^(baseline_template|dev|doc|flwr_baselines)$ ]]; then
+ if ! [[ "$baseline" =~ ^(baseline_template|dev|docs|flwr_baselines)$ ]]; then
# For each baseline, copy the README into the source of the Baselines docs
- cp $baseline/README.md $ROOT/baselines/doc/source/$baseline.md 2>&1 >/dev/null
+ cp $baseline/README.md $ROOT/baselines/docs/source/$baseline.md 2>&1 >/dev/null
gh_text="[ ](https://github.com/adap/flower/blob/main/baselines/$baseline)"
- readme_file="$ROOT/baselines/doc/source/$baseline.md"
+ readme_file="$ROOT/baselines/docs/source/$baseline.md"
if ! grep -Fq "$gh_text" "$readme_file"; then
awk -v text="$gh_text" '
@@ -92,8 +92,8 @@ for d in $(printf '%s\n' */ | sort -V); do
do
image_dir=$(dirname $img)
- mkdir -p $ROOT/baselines/doc/source/$image_dir && cp $baseline/$img $_
- images_arr+=("$ROOT/baselines/doc/source/$img")
+ mkdir -p $ROOT/baselines/docs/source/$image_dir && cp $baseline/$img $_
+ images_arr+=("$ROOT/baselines/docs/source/$img")
done
if [[ $(grep -L "$baseline" $INDEX) ]]; then
@@ -109,7 +109,7 @@ for d in $(printf '%s\n' */ | sort -V); do
fi
done
-cd $ROOT/baselines/doc
+cd $ROOT/baselines/docs
make html
# Restore everything back to the initial state
diff --git a/dev/build-docker-image-matrix.py b/framework/dev/build-docker-image-matrix.py
similarity index 100%
rename from dev/build-docker-image-matrix.py
rename to framework/dev/build-docker-image-matrix.py
diff --git a/dev/build-docs.sh b/framework/dev/build-docs.sh
similarity index 69%
rename from dev/build-docs.sh
rename to framework/dev/build-docs.sh
index f4bf958b0ebf..8cd0f5317f78 100755
--- a/dev/build-docs.sh
+++ b/framework/dev/build-docs.sh
@@ -1,20 +1,20 @@
#!/bin/bash
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
ROOT=`pwd`
cd $ROOT
-./dev/build-baseline-docs.sh
+./framework/dev/build-baseline-docs.sh
cd $ROOT
-python dev/build-example-docs.py
+python framework/dev/build-example-docs.py
cd $ROOT
./datasets/dev/build-flwr-datasets-docs.sh
cd $ROOT
-cd doc
+cd framework/doc
if [ "$1" = true ]; then
./build-versioned-docs.sh
diff --git a/dev/build-example-docs.py b/framework/dev/build-example-docs.py
similarity index 99%
rename from dev/build-example-docs.py
rename to framework/dev/build-example-docs.py
index 05656967bbbd..f3bf953fee44 100644
--- a/dev/build-example-docs.py
+++ b/framework/dev/build-example-docs.py
@@ -20,7 +20,9 @@
import subprocess
from pathlib import Path
-ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
+ROOT = os.path.abspath(
+ os.path.join(os.path.join(os.path.dirname(__file__), ".."), "..")
+)
INDEX = os.path.join(ROOT, "examples", "doc", "source", "index.rst")
initial_text = """
diff --git a/dev/build-swift-api-ref.sh b/framework/dev/build-swift-api-ref.sh
similarity index 96%
rename from dev/build-swift-api-ref.sh
rename to framework/dev/build-swift-api-ref.sh
index 5b88f9a68320..8c85a01b4ddf 100755
--- a/dev/build-swift-api-ref.sh
+++ b/framework/dev/build-swift-api-ref.sh
@@ -16,7 +16,7 @@
# ==============================================================================
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
# Create a directory to save generated API reference.
mkdir -p SwiftDoc
@@ -27,11 +27,11 @@ find ~/Library/Developer/Xcode/DerivedData -name "flwr.doccarchive" -exec rm -Rf
# Make sure you have XCode installed in your Mac to avoid xcode-select: error.
# In case no XCode, please refer to: https://github.com/nodejs/node-gyp/issues/569.
# Generate API reference for the Swift SDK by running `xcodebuild docbuild` in src directory.
-cd src/swift/flwr && \
+cd framework/src/swift/flwr && \
arch -x86_64 xcodebuild docbuild -scheme flwr -destination 'platform=iOS Simulator,name=iPhone 15 Pro Max,OS=17.2'
# Find the generated `doccarchive` file in XCode's derived data folder and copy it to the SwiftDoc directory.
-cd ../../../
+cd ../../../../
find ~/Library/Developer/Xcode/DerivedData -name "flwr.doccarchive" -exec cp -R {} SwiftDoc \;
# Transform the `doccarchive` file to static HTML and store the output in the `SwiftDoc/html` folder.
# Path to the generated static HTML is configurable, right now the path is {baseURL}/documentation/flwr.
diff --git a/dev/build.sh b/framework/dev/build.sh
similarity index 98%
rename from dev/build.sh
rename to framework/dev/build.sh
index a257e9402dc3..5cae759ffa4e 100755
--- a/dev/build.sh
+++ b/framework/dev/build.sh
@@ -16,6 +16,6 @@
# ==============================================================================
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
python -m poetry build
diff --git a/dev/certificates/certificate.conf b/framework/dev/certificates/certificate.conf
similarity index 100%
rename from dev/certificates/certificate.conf
rename to framework/dev/certificates/certificate.conf
diff --git a/dev/certificates/generate.sh b/framework/dev/certificates/generate.sh
similarity index 89%
rename from dev/certificates/generate.sh
rename to framework/dev/certificates/generate.sh
index 2647a531da4f..e09d3e2dd217 100755
--- a/dev/certificates/generate.sh
+++ b/framework/dev/certificates/generate.sh
@@ -2,7 +2,7 @@
# This script will generate all certificates if ca.crt does not exist
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../../
CA_PASSWORD=notsafe
@@ -36,7 +36,7 @@ openssl req \
-new \
-key $CERT_DIR/server.key \
-out $CERT_DIR/server.csr \
- -config ./dev/certificates/certificate.conf
+ -config ./framework/dev/certificates/certificate.conf
# Generate a certificate for the server
openssl x509 \
@@ -48,5 +48,5 @@ openssl x509 \
-out $CERT_DIR/server.pem \
-days 365 \
-sha256 \
- -extfile ./dev/certificates/certificate.conf \
+ -extfile ./framework/dev/certificates/certificate.conf \
-extensions req_ext
diff --git a/dev/changelog_config.toml b/framework/dev/changelog_config.toml
similarity index 100%
rename from dev/changelog_config.toml
rename to framework/dev/changelog_config.toml
diff --git a/dev/check-protos.sh b/framework/dev/check-protos.sh
similarity index 93%
rename from dev/check-protos.sh
rename to framework/dev/check-protos.sh
index 4e9927bbab0b..c6ef4bfa3849 100755
--- a/dev/check-protos.sh
+++ b/framework/dev/check-protos.sh
@@ -16,7 +16,7 @@
# ==============================================================================
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
# Purpose of this script is to evaluate if the user changed the proto definitions
# but did not recompile or commit the new proto python files
@@ -25,7 +25,7 @@ cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
python -m flwr_tool.protoc
# Fail if user forgot to recompile
-CHANGED=$(git diff --name-only HEAD src/py/flwr/proto)
+CHANGED=$(git diff --name-only HEAD framework/src/py/flwr/proto)
if [ -n "$CHANGED" ]; then
echo "Changes detected"
diff --git a/dev/check-requirements-txt.sh b/framework/dev/check-requirements-txt.sh
similarity index 94%
rename from dev/check-requirements-txt.sh
rename to framework/dev/check-requirements-txt.sh
index e9e48a978671..ff599bbf08ae 100755
--- a/dev/check-requirements-txt.sh
+++ b/framework/dev/check-requirements-txt.sh
@@ -16,11 +16,11 @@
# ==============================================================================
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
# Regenerate requirements.txt files for examples in case they changed
echo "Regenerate requirements.txt files in case they changed"
-./dev/generate-requirements-txt.sh 2> /dev/null
+./framework/dev/generate-requirements-txt.sh 2> /dev/null
# Fail if user forgot to sync requirements.txt and pyproject.toml
CHANGED=$(git diff --name-only HEAD examples)
diff --git a/dev/check_pr_title.py b/framework/dev/check_pr_title.py
similarity index 100%
rename from dev/check_pr_title.py
rename to framework/dev/check_pr_title.py
diff --git a/dev/deploy-swift-docs.sh b/framework/dev/deploy-swift-docs.sh
similarity index 90%
rename from dev/deploy-swift-docs.sh
rename to framework/dev/deploy-swift-docs.sh
index eea3b287aa8b..7a70f349143f 100755
--- a/dev/deploy-swift-docs.sh
+++ b/framework/dev/deploy-swift-docs.sh
@@ -16,13 +16,13 @@
# ==============================================================================
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
ROOT=$(pwd)
# Build and deploy Flower iOS docs
cd "$ROOT"
-./dev/build-swift-api-ref.sh
-./dev/add-swift-api-footer.sh
+./framework/dev/build-swift-api-ref.sh
+./framework/dev/add-swift-api-footer.sh
cd SwiftDoc/html
aws s3 sync --delete --exclude ".*" --cache-control "no-cache" ./ s3://flower.ai/docs/ios
diff --git a/dev/fnt.sh b/framework/dev/fnt.sh
similarity index 66%
rename from dev/fnt.sh
rename to framework/dev/fnt.sh
index eb05706a5b91..3b95e5348a58 100755
--- a/dev/fnt.sh
+++ b/framework/dev/fnt.sh
@@ -1,14 +1,14 @@
#!/bin/bash
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
echo "Format code and run all test scripts"
-./dev/format.sh
+./framework/dev/format.sh
./baselines/dev/format.sh
-./dev/test.sh
+./framework/dev/test.sh
./baselines/dev/test.sh
-./dev/test-tool.sh
+./framework/dev/test-tool.sh
diff --git a/dev/format.sh b/framework/dev/format.sh
similarity index 51%
rename from dev/format.sh
rename to framework/dev/format.sh
index a3129b932e5d..d89d89a8a863 100755
--- a/dev/format.sh
+++ b/framework/dev/format.sh
@@ -1,20 +1,20 @@
#!/bin/bash
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
taplo fmt
# Python
-python -m flwr_tool.check_copyright src/py/flwr
-python -m flwr_tool.init_py_fix src/py/flwr
-python -m isort --skip src/py/flwr/proto src/py
-python -m black -q --exclude src/py/flwr/proto src/py
-python -m docformatter -i -r src/py/flwr -e src/py/flwr/proto
-python -m docformatter -i -r src/py/flwr_tool
-python -m ruff check --fix src/py/flwr
+python -m flwr_tool.fix_copyright framework/src/py/flwr
+python -m flwr_tool.init_py_fix framework/src/py/flwr
+python -m isort --skip framework/src/py/flwr/proto framework/src/py
+python -m black -q --exclude framework/src/py/flwr/proto framework/src/py
+python -m docformatter -i -r framework/src/py/flwr -e framework/src/py/flwr/proto
+python -m docformatter -i -r framework/src/py/flwr_tool
+python -m ruff check --fix framework/src/py/flwr
# Protos
-find src/proto/flwr/proto -name *.proto | grep "\.proto" | xargs clang-format -i
+find framework/src/proto/flwr/proto -name *.proto | grep "\.proto" | xargs clang-format -i
# Examples
python -m black -q examples
@@ -31,13 +31,13 @@ python -m black -q e2e
python -m docformatter -i -r e2e
# Notebooks
-python -m black --ipynb -q doc/source/*.ipynb
+python -m black --ipynb -q framework/doc/source/*.ipynb
KEYS="metadata.celltoolbar metadata.language_info metadata.toc metadata.notify_time metadata.varInspector metadata.accelerator metadata.vscode cell.metadata.id cell.metadata.heading_collapsed cell.metadata.hidden cell.metadata.code_folding cell.metadata.tags cell.metadata.init_cell cell.metadata.vscode cell.metadata.pycharm"
-python -m nbstripout doc/source/*.ipynb --extra-keys "$KEYS"
+python -m nbstripout framework/doc/source/*.ipynb --extra-keys "$KEYS"
python -m nbstripout examples/*/*.ipynb --extra-keys "$KEYS"
# Markdown
-python -m mdformat --number doc/source examples
+python -m mdformat --number framework/doc/source examples
# RST
-docstrfmt doc/source
+docstrfmt framework/doc/source
diff --git a/dev/generate-requirements-txt.sh b/framework/dev/generate-requirements-txt.sh
similarity index 98%
rename from dev/generate-requirements-txt.sh
rename to framework/dev/generate-requirements-txt.sh
index f78e368e9cfa..72120d0465b9 100755
--- a/dev/generate-requirements-txt.sh
+++ b/framework/dev/generate-requirements-txt.sh
@@ -16,7 +16,7 @@
# ==============================================================================
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
# Purpose of this script is to regenerate requirements.txt
for path in $(find ./examples -type f -name 'pyproject.toml' | sed -E 's|/[^/]+$||' |sort -u)
diff --git a/dev/get-latest-changelog.sh b/framework/dev/get-latest-changelog.sh
similarity index 78%
rename from dev/get-latest-changelog.sh
rename to framework/dev/get-latest-changelog.sh
index 1d4a6b6bf58f..4d71a8f33718 100755
--- a/dev/get-latest-changelog.sh
+++ b/framework/dev/get-latest-changelog.sh
@@ -1,7 +1,7 @@
#!/bin/bash
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
# Extract the latest release notes from the changelog, which starts at the line containing
# the latest version tag and ends one line before the previous version tag.
@@ -9,7 +9,7 @@ tags=$(git tag --sort=-v:refname)
new_version=$(echo "$tags" | sed -n '1p')
old_version=$(echo "$tags" | sed -n '2p')
-awk '{sub(//, ""); print}' doc/source/ref-changelog.md | awk -v start="$new_version" -v end="$old_version" '
+awk '{sub(//, ""); print}' framework/doc/source/ref-changelog.md | awk -v start="$new_version" -v end="$old_version" '
$0 ~ start {flag=1; next}
$0 ~ end {flag=0}
flag && !printed && /^$/ {next} # skip the first blank line
diff --git a/dev/install-cuda-step-1.sh b/framework/dev/install-cuda-step-1.sh
similarity index 98%
rename from dev/install-cuda-step-1.sh
rename to framework/dev/install-cuda-step-1.sh
index b4159e68401d..beb0652fdbb8 100755
--- a/dev/install-cuda-step-1.sh
+++ b/framework/dev/install-cuda-step-1.sh
@@ -1,6 +1,6 @@
#!/bin/bash
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
# Adapted from: https://www.tensorflow.org/install/gpu
diff --git a/dev/install-cuda-step-2.sh b/framework/dev/install-cuda-step-2.sh
similarity index 97%
rename from dev/install-cuda-step-2.sh
rename to framework/dev/install-cuda-step-2.sh
index cacd52b5b268..53987a1d195a 100755
--- a/dev/install-cuda-step-2.sh
+++ b/framework/dev/install-cuda-step-2.sh
@@ -1,6 +1,6 @@
#!/bin/bash
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
# Adapted from: https://www.tensorflow.org/install/gpu
diff --git a/dev/plot.sh b/framework/dev/plot.sh
similarity index 100%
rename from dev/plot.sh
rename to framework/dev/plot.sh
diff --git a/dev/publish-nightly.sh b/framework/dev/publish-nightly.sh
similarity index 99%
rename from dev/publish-nightly.sh
rename to framework/dev/publish-nightly.sh
index 0c03cdda9f49..be3a8d319727 100755
--- a/dev/publish-nightly.sh
+++ b/framework/dev/publish-nightly.sh
@@ -16,7 +16,7 @@
# ==============================================================================
set -e
-cd "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../
+cd "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../../
# This script will build and publish a nightly release of Flower under the condition
# that at least one commit was made in the last 24 hours.
diff --git a/dev/rm-caches.sh b/framework/dev/rm-caches.sh
similarity index 57%
rename from dev/rm-caches.sh
rename to framework/dev/rm-caches.sh
index d5b004fb834c..23b3630e8e85 100755
--- a/dev/rm-caches.sh
+++ b/framework/dev/rm-caches.sh
@@ -1,9 +1,9 @@
#!/bin/bash
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
-find src -type d -name __pycache__ -exec rm -r {} \+
+find framework/src -type d -name __pycache__ -exec rm -r {} \+
rm -rf .mypy_cache
rm -rf .pytest_cache
rm -rf .cache
-rm -rf doc/build
+rm -rf framework/doc/build
diff --git a/dev/setup-defaults.sh b/framework/dev/setup-defaults.sh
similarity index 100%
rename from dev/setup-defaults.sh
rename to framework/dev/setup-defaults.sh
diff --git a/dev/setup-envs.sh b/framework/dev/setup-envs.sh
similarity index 98%
rename from dev/setup-envs.sh
rename to framework/dev/setup-envs.sh
index 6aa64ebebbff..1ee2c733b2c7 100755
--- a/dev/setup-envs.sh
+++ b/framework/dev/setup-envs.sh
@@ -1,6 +1,6 @@
#!/bin/bash
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
SHELL_BIN=$(basename "$SHELL")
diff --git a/dev/swift-docs-resources/footer.css b/framework/dev/swift-docs-resources/footer.css
similarity index 100%
rename from dev/swift-docs-resources/footer.css
rename to framework/dev/swift-docs-resources/footer.css
diff --git a/dev/swift-docs-resources/footer.html b/framework/dev/swift-docs-resources/footer.html
similarity index 100%
rename from dev/swift-docs-resources/footer.html
rename to framework/dev/swift-docs-resources/footer.html
diff --git a/dev/swift-docs-resources/logo_secondary-w-border.png b/framework/dev/swift-docs-resources/logo_secondary-w-border.png
similarity index 100%
rename from dev/swift-docs-resources/logo_secondary-w-border.png
rename to framework/dev/swift-docs-resources/logo_secondary-w-border.png
diff --git a/dev/test-copyright.sh b/framework/dev/test-copyright.sh
similarity index 98%
rename from dev/test-copyright.sh
rename to framework/dev/test-copyright.sh
index 5ba8fedfe1ef..5a60b5ccedd3 100755
--- a/dev/test-copyright.sh
+++ b/framework/dev/test-copyright.sh
@@ -1,6 +1,6 @@
#!/bin/bash -e
-cd "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../
+cd "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../../
EXIT_CODE=0
diff --git a/framework/dev/test-tool.sh b/framework/dev/test-tool.sh
new file mode 100755
index 000000000000..ebb22a41930d
--- /dev/null
+++ b/framework/dev/test-tool.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+set -e
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
+
+echo "=== test-tool.sh ==="
+
+python -m isort --check-only framework/src/py/flwr_tool && echo "- isort: done" &&
+python -m black --check framework/src/py/flwr_tool && echo "- black: done" &&
+# mypy is covered by test.sh
+python -m pylint framework/src/py/flwr_tool && echo "- pylint: done" &&
+# python -m pytest -q framework/src/py/flwr_tool && echo "- pytest: done" &&
+echo "- All Python checks passed"
diff --git a/dev/test-wheel.sh b/framework/dev/test-wheel.sh
similarity index 98%
rename from dev/test-wheel.sh
rename to framework/dev/test-wheel.sh
index 98363ff35550..ba14377acd42 100755
--- a/dev/test-wheel.sh
+++ b/framework/dev/test-wheel.sh
@@ -1,6 +1,6 @@
#!/bin/bash
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
echo "=== test-wheel.sh ==="
diff --git a/dev/test.sh b/framework/dev/test.sh
similarity index 58%
rename from dev/test.sh
rename to framework/dev/test.sh
index b8eeed14bc46..7a273f8fa175 100755
--- a/dev/test.sh
+++ b/framework/dev/test.sh
@@ -1,53 +1,53 @@
#!/bin/bash
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
echo "=== test.sh ==="
echo "- Start Python checks"
echo "- clang-format: start"
-clang-format --Werror --dry-run src/proto/flwr/proto/*
+clang-format --Werror --dry-run framework/src/proto/flwr/proto/*
echo "- clang-format: done"
echo "- isort: start"
-python -m isort --check-only --skip src/py/flwr/proto src/py/flwr benchmarks e2e
+python -m isort --check-only --skip framework/src/py/flwr/proto framework/src/py/flwr benchmarks framework/e2e
echo "- isort: done"
echo "- black: start"
-python -m black --exclude "src\/py\/flwr\/proto" --check src/py/flwr benchmarks examples e2e
+python -m black --exclude "framework\/src\/py\/flwr\/proto" --check framework/src/py/flwr benchmarks examples framework/e2e
echo "- black: done"
echo "- init_py_check: start"
-python -m flwr_tool.init_py_check src/py/flwr src/py/flwr_tool
+python -m flwr_tool.init_py_check framework/src/py/flwr framework/src/py/flwr_tool
echo "- init_py_check: done"
echo "- docformatter: start"
-python -m docformatter -c -r src/py/flwr e2e -e src/py/flwr/proto
+python -m docformatter -c -r framework/src/py/flwr framework/e2e -e framework/src/py/flwr/proto
echo "- docformatter: done"
echo "- docsig: start"
-docsig src/py/flwr
+docsig framework/src/py/flwr
echo "- docsig: done"
echo "- ruff: start"
-python -m ruff check src/py/flwr
+python -m ruff check framework/src/py/flwr
echo "- ruff: done"
echo "- mypy: start"
-python -m mypy src/py
+python -m mypy framework/src/py
echo "- mypy: done"
echo "- pylint: start"
-python -m pylint --ignore=src/py/flwr/proto src/py/flwr
+python -m pylint --ignore=framework/src/py/flwr/proto framework/src/py/flwr
echo "- pylint: done"
echo "- flake8: start"
-python -m flake8 src/py/flwr
+python -m flake8 framework/src/py/flwr
echo "- flake8: done"
echo "- pytest: start"
-python -m pytest --cov=src/py/flwr
+python -m pytest --cov=framework/src/py/flwr
echo "- pytest: done"
echo "- All Python checks passed"
@@ -55,7 +55,7 @@ echo "- All Python checks passed"
echo "- Start Markdown checks"
echo "- mdformat: start"
-python -m mdformat --check --number doc/source examples
+python -m mdformat --check --number framework/doc/source examples
echo "- mdformat: done"
echo "- All Markdown checks passed"
@@ -71,7 +71,7 @@ echo "- All TOML checks passed"
echo "- Start rST checks"
echo "- docstrfmt: start"
-docstrfmt --check doc/source
+docstrfmt --check framework/doc/source
echo "- docstrfmt: done"
echo "- All rST checks passed"
@@ -79,7 +79,7 @@ echo "- All rST checks passed"
echo "- Start license checks"
echo "- copyright: start"
-python -m flwr_tool.check_copyright src/py/flwr
+python -m flwr_tool.check_copyright framework/src/py/flwr
echo "- copyright: done"
echo "- licensecheck: start"
diff --git a/dev/update_changelog.py b/framework/dev/update_changelog.py
similarity index 100%
rename from dev/update_changelog.py
rename to framework/dev/update_changelog.py
diff --git a/dev/update_python.py b/framework/dev/update_python.py
similarity index 100%
rename from dev/update_python.py
rename to framework/dev/update_python.py
diff --git a/dev/update_version.py b/framework/dev/update_version.py
similarity index 95%
rename from dev/update_version.py
rename to framework/dev/update_version.py
index 0b2db3369a3d..adfb904833b2 100644
--- a/dev/update_version.py
+++ b/framework/dev/update_version.py
@@ -7,7 +7,7 @@
REPLACE_CURR_VERSION = {
- "doc/source/conf.py": [
+ "framework/docs/source/conf.py": [
".. |stable_flwr_version| replace:: {version}",
],
"src/py/flwr/cli/new/templates/app/pyproject.*.toml.tpl": [
@@ -17,11 +17,11 @@
REPLACE_NEXT_VERSION = {
"pyproject.toml": ['version = "{version}"'],
- "doc/source/conf.py": [
+ "framework/docs/source/conf.py": [
'release = "{version}"',
],
- "examples/doc/source/conf.py": ['release = "{version}"'],
- "baselines/doc/source/conf.py": ['release = "{version}"'],
+ "examples/docs/source/conf.py": ['release = "{version}"'],
+ "baselines/docs/source/conf.py": ['release = "{version}"'],
"src/docker/complete/compose.yml": ["FLWR_VERSION:-{version}"],
"src/docker/distributed/client/compose.yml": ["FLWR_VERSION:-{version}"],
"src/docker/distributed/server/compose.yml": ["FLWR_VERSION:-{version}"],
diff --git a/dev/venv-create.sh b/framework/dev/venv-create.sh
similarity index 96%
rename from dev/venv-create.sh
rename to framework/dev/venv-create.sh
index 112f3a4b2917..1c5042efcd92 100755
--- a/dev/venv-create.sh
+++ b/framework/dev/venv-create.sh
@@ -1,6 +1,6 @@
#!/bin/bash
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
version=${1:-3.9.20}
diff --git a/dev/venv-delete.sh b/framework/dev/venv-delete.sh
similarity index 90%
rename from dev/venv-delete.sh
rename to framework/dev/venv-delete.sh
index 50bed76b203f..407c491dad01 100755
--- a/dev/venv-delete.sh
+++ b/framework/dev/venv-delete.sh
@@ -1,6 +1,6 @@
#!/bin/bash
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
version=${1:-3.9.20}
diff --git a/dev/venv-reset.sh b/framework/dev/venv-reset.sh
similarity index 56%
rename from dev/venv-reset.sh
rename to framework/dev/venv-reset.sh
index 5ab05f29c137..bc4c6ba0cc36 100755
--- a/dev/venv-reset.sh
+++ b/framework/dev/venv-reset.sh
@@ -1,14 +1,14 @@
#!/bin/bash
set -e
-cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../
+cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
version=${1:-3.9.20}
# Delete caches, venv, and lock file
-./dev/rm-caches.sh
-./dev/venv-delete.sh $version
+./framework/dev/rm-caches.sh
+./framework/dev/venv-delete.sh $version
[ ! -e poetry.lock ] || rm poetry.lock
# Recreate
-./dev/venv-create.sh $version
-./dev/bootstrap.sh
+./framework/dev/venv-create.sh $version
+./framework/dev/bootstrap.sh
diff --git a/doc/Makefile b/framework/doc/Makefile
similarity index 100%
rename from doc/Makefile
rename to framework/doc/Makefile
diff --git a/doc/build-versioned-docs.sh b/framework/doc/build-versioned-docs.sh
similarity index 90%
rename from doc/build-versioned-docs.sh
rename to framework/doc/build-versioned-docs.sh
index db7e766b4f83..452452fc63da 100755
--- a/doc/build-versioned-docs.sh
+++ b/framework/doc/build-versioned-docs.sh
@@ -8,17 +8,15 @@ current_branch=$(git rev-parse --abbrev-ref HEAD)
cd $(git rev-parse --show-toplevel)
# Clean up previous builds
-rm -rf doc/build
+rm -rf framework/docs/build
# Create a temporary directory and store locales and _templates files in it
tmp_dir=`mktemp -d`
-cp -r doc/locales ${tmp_dir}/locales
-cp -r doc/source/_templates ${tmp_dir}/_templates
-
-cd doc
+cp -r framework/docs/locales ${tmp_dir}/locales
+cp -r framework/docs/source/_templates ${tmp_dir}/_templates
# Get a list of languages based on the folders in locales
-languages="en `find locales/ -mindepth 1 -maxdepth 1 -type d -exec basename '{}' \;`"
+languages="en `find framework/docs/locales/ -mindepth 1 -maxdepth 1 -type d -exec basename '{}' \;`"
# Get a list of tags, excluding those before v1.0.0
versions="`git for-each-ref '--format=%(refname:lstrip=-1)' refs/tags/ | grep -iE '^v((([1-9]|[0-9]{2,}).*\.([8-9]|[0-9]{2,}).*)|([2-9]|[0-9]{2,}).*)$'`"
@@ -46,7 +44,13 @@ for current_version in ${versions}; do
pip install "numpy==${numpy_version_2}"
fi
echo "INFO: Building sites for ${current_version}"
-
+
+ if [ -d "framework/docs" ]; then
+ cd framework/docs
+ else
+ cd doc
+ fi
+
for current_language in ${languages}; do
# Make the current language available to conf.py
@@ -95,8 +99,10 @@ END
git clean -fd
done
+
+ cd $(git rev-parse --show-toplevel)
done
-
+
# Build the main version (main for GH CI, local branch for local)
if [ $GITHUB_ACTIONS ]
then
@@ -105,6 +111,8 @@ else
git checkout --force $current_branch
fi
+cd framework/docs
+
current_version=main
export current_version
for current_language in ${languages}; do
diff --git a/doc/locales/fr/LC_MESSAGES/framework-docs.po b/framework/doc/locales/fr/LC_MESSAGES/framework-docs.po
similarity index 99%
rename from doc/locales/fr/LC_MESSAGES/framework-docs.po
rename to framework/doc/locales/fr/LC_MESSAGES/framework-docs.po
index 40aaec1a1087..9950f5fc32e0 100644
--- a/doc/locales/fr/LC_MESSAGES/framework-docs.po
+++ b/framework/doc/locales/fr/LC_MESSAGES/framework-docs.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Flower Docs\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-11-30 00:31+0000\n"
+"POT-Creation-Date: 2024-12-09 00:34+0000\n"
"PO-Revision-Date: 2023-09-05 17:54+0000\n"
"Last-Translator: Charles Beauville \n"
"Language: fr\n"
@@ -6237,6 +6237,7 @@ msgid ""
msgstr ""
#: ../../source/how-to-implement-fedbn.rst:99
+#: ../../source/how-to-run-flower-on-azure.rst:217
msgid "Next Steps"
msgstr "Prochaines étapes"
@@ -6793,6 +6794,300 @@ msgstr ""
"Pour les simulations qui utilisent le moteur de client virtuel, ``flwr-"
"nightly`` doit être installé avec l'option ``simulation``: :"
+#: ../../source/how-to-run-flower-on-azure.rst:18
+#, fuzzy
+msgid "Run Flower on Azure"
+msgstr "Serveur de Flower"
+
+#: ../../source/how-to-run-flower-on-azure.rst:22
+msgid ""
+"There are many ways to deploy Flower on Microst Azure. The instructions "
+"provided in this guide is just a basic walkthrough, step-by-step guide on"
+" how to quickly setup and run a Flower application on a Federated "
+"Learning environment on Microst Azure."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:26
+msgid ""
+"In this how-to guide, we want to create a Federated Learning environment "
+"on Microst Azure using three Virtual Machines (VMs). From the three "
+"machines, one machine will be used as the Federation server and two as "
+"the Federation clients. Our goal is to create a Flower federation on "
+"Microst Azure where we can run Flower apps from our local machine, e.g., "
+"laptop."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:32
+msgid ""
+"On the Federation server VM we will deploy the long-running Flower server"
+" (``SuperLink``) and on the two Federation client VMs we will deploy the "
+"long-running Flower client (``SuperNode``). For more details For more "
+"details regarding the ``SuperLink`` and ``SuperNode`` concepts, please "
+"see the |flower_architecture_link|_ ."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:38
+msgid "Azure VMs"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:40
+msgid ""
+"First we need to create the three VMs configure their Python "
+"environments, and inbound networking rules to allow cross-VM "
+"communication."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:44
+msgid "VM Create"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:46
+msgid ""
+"Assuming we are already inside the Microst Azure portal, we navigate to "
+"the ``Create`` page and we select ``Azure virtual machine``. In the new "
+"page, for each VM we edit the properties as follows:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:55
+msgid "**Virtual machine name**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:56
+msgid ""
+"for server machine we can use ``flower-server`` and for clients, "
+"``flower-client-1`` and ``flower-client-2``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:58
+#, fuzzy
+msgid "**Image**"
+msgstr "**Apporter des modifications**"
+
+#: ../../source/how-to-run-flower-on-azure.rst:59
+msgid "in this guide, we use ``Ubuntu Server 24.04 - x64 Gen2 LTS``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:60
+msgid "**Size**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:61
+msgid "in this guide, we use ``Standard_D2s_v3 - 2 vcpus, 8GiB memory``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:65
+msgid "For resource group, we can create a new group and assign it to all VMs."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:67
+msgid ""
+"When each VM instance has been created the portal will allow you to "
+"download the public key (.pem) of each instance. Make sure you save this "
+"key in safe place and change its permissions to user read only, i.e., run"
+" the ``chmod 400 `` command for every .pem file."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:72
+msgid ""
+"Once all three VMs are created then navigate to the overview page where "
+"all three VMs are listed and open every other VM, and copy its Public IP "
+"address. Using the Public IP address and the public key (after changing "
+"the permissions), login to the instances from our local machine by "
+"running the following command (by default Azure creates the "
+"``azureuser``):"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:83
+msgid "VM Networking"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:85
+msgid ""
+"During the execution of the Flower application, the server VM "
+"(``SuperLink``) will be responsible to orchestrate the execution of the "
+"application across the client VMs (``SuperNode``). When the SuperLink "
+"server starts, by default, it listens to the following ports: ``{9092, "
+"9093}``. Port `9092` is used to communicate with the Federation clients "
+"(``SuperNode``) and port ``9093`` to receive and execute Flower "
+"applications."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:92
+msgid ""
+"Therefore, to enable this communication we need to allow inbound traffic "
+"to the server VM instance. To achieve this, we need to navigate to the "
+"Networking page of the server VM in the Microsoft Azure portal. There, we"
+" will click the ``Add inbound port rule``. In the new window that "
+"appears, we edit the rule properties as follows:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:97
+msgid "The rest of the fields can be left at their default values."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:104
+#: ../../source/how-to-run-flower-on-azure.rst:145
+#, fuzzy
+msgid "**Source**"
+msgstr "flower-superlink"
+
+#: ../../source/how-to-run-flower-on-azure.rst:105
+msgid "``IP Addresses``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:106
+#: ../../source/how-to-run-flower-on-azure.rst:133
+msgid "**Source IP addresses/CIDR ranges**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:107
+msgid "add client VMs' Public IP (separated by comma)"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:108
+#, fuzzy
+msgid "**Destination**"
+msgstr "Dépréciations"
+
+#: ../../source/how-to-run-flower-on-azure.rst:109
+#: ../../source/how-to-run-flower-on-azure.rst:146
+msgid "``Any``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:110
+#, fuzzy
+msgid "**Service**"
+msgstr "flower-superlink"
+
+#: ../../source/how-to-run-flower-on-azure.rst:111
+msgid "``custom``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:112
+#: ../../source/how-to-run-flower-on-azure.rst:135
+#: ../../source/how-to-run-flower-on-azure.rst:147
+msgid "**Destination port ranges**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:113
+msgid "``9092``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:114
+msgid "**Protocol**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:115
+#, fuzzy
+msgid "``TCP``"
+msgstr "Configurer les clients"
+
+#: ../../source/how-to-run-flower-on-azure.rst:117
+msgid ""
+"Finally, we need to also open port 9093 to allow receiving and executing "
+"incoming application requests. To enable this we just need to repeat the "
+"steps above, i.e., create a new inbound rule, where for port range we "
+"assign port 9093. If we already know the Public IP from which our local "
+"machine (e.g., laptop) will be submitting applications to the Azure "
+"cluster, then we just need to specify the Source IP address/CIDR range. "
+"However, if we want to keep the port widely open we simply need to change"
+" source to ``Any``."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:125
+msgid ""
+"To be more precise, if we know the Public IP of our machine, then we make"
+" the following changes:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:134
+msgid "add machine's Public IP"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:136
+#: ../../source/how-to-run-flower-on-azure.rst:148
+msgid "``9093``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:138
+msgid "Otherwise, we change the properties as follows:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:151
+#, fuzzy
+msgid "Flower Environment"
+msgstr "Créer/Supprimer l'environment virtuel"
+
+#: ../../source/how-to-run-flower-on-azure.rst:153
+msgid ""
+"Assuming we have been able to login to each VM, and create a Python "
+"environment with Flower and all its dependencies installed (``pip install"
+" flwr``), we can create a Flower application by running the ``flwr new`` "
+"command. The console will then prompt us to give a name to the project, "
+"e.g., ``flwr_azure_test``, the name of the author and select the type of "
+"the Flower Framework we want to run, e.g., ``numpy``."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:161
+msgid ""
+"An alternative approach would be to use Docker in each VM, with each "
+"image containing the necessary environment and dependencies. For more "
+"details please refer to the |flower_docker_index|_ guide."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:166
+#, fuzzy
+msgid "Server Initialization"
+msgstr "Vérifie l'installation"
+
+#: ../../source/how-to-run-flower-on-azure.rst:168
+msgid ""
+"After configuring the Flower application environment, we proceed by "
+"starting the Flower long-running processes (i.e., ``SuperLink`` and "
+"``SuperNode``) at each VM instance. In particular, we need to run the "
+"following commands, first in the server (``SuperLink``) and then at each "
+"client (``SuperNode``)."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:175
+msgid ""
+"To enable authentication and encrypted communication during the execution"
+" lifecycle of the Flower application, please have a look at the following"
+" resources: |authenticate_supernodes|_, |enable_tls_connections|_"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:197
+#, fuzzy
+msgid "Run Flower App"
+msgstr "Serveur de Flower"
+
+#: ../../source/how-to-run-flower-on-azure.rst:199
+msgid ""
+"Finally, after all running Flower processes have been initialized on the "
+"Microsoft Azure cluster, in our local machine, we first need to install "
+"Flower and can create a project with a similar structure as the one we "
+"have in the server and the clients, or copy the project structure from "
+"one of them. Once we have the project locally, we can open the "
+"``pyproject.toml`` file, and then add the following sections:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:214
+msgid "Then from our local machine we need to run ``flwr run . my-federation``."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:221
+msgid ""
+"This guide is not suitable for production environments due to missing "
+"authentication and TLS security."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:224
+msgid ""
+"To enable authentication and establish secure connections, please refer "
+"to the following resources: |authenticate_supernodes|_, "
+"|enable_tls_connections|_"
+msgstr ""
+
#: ../../source/how-to-run-simulations.rst:22
#, fuzzy
msgid "Run simulations"
@@ -8569,7 +8864,7 @@ msgstr "Quickstart tutorials"
msgid "How-to guides"
msgstr "Guides"
-#: ../../source/index.rst:107 ../../source/index.rst:112
+#: ../../source/index.rst:108 ../../source/index.rst:113
msgid "Explanations"
msgstr "Explications"
@@ -8577,26 +8872,26 @@ msgstr "Explications"
msgid "API reference"
msgstr "Référence pour l'API"
-#: ../../source/index.rst:138
+#: ../../source/index.rst:139
msgid "Reference docs"
msgstr "Référence pour la documentation"
-#: ../../source/index.rst:153
+#: ../../source/index.rst:154
#, fuzzy
msgid "Contributor tutorials"
msgstr "Configuration du contributeur"
-#: ../../source/index.rst:160
+#: ../../source/index.rst:161
#, fuzzy
msgid "Contributor how-to guides"
msgstr "Guide pour les contributeurs"
-#: ../../source/index.rst:172
+#: ../../source/index.rst:173
#, fuzzy
msgid "Contributor explanations"
msgstr "Explications"
-#: ../../source/index.rst:178
+#: ../../source/index.rst:179
#, fuzzy
msgid "Contributor references"
msgstr "Configuration du contributeur"
@@ -8706,7 +9001,7 @@ msgstr ""
"Guides orientés sur la résolutions étapes par étapes de problèmes ou "
"objectifs specifiques."
-#: ../../source/index.rst:109
+#: ../../source/index.rst:110
msgid ""
"Understanding-oriented concept guides explain and discuss key topics and "
"underlying ideas behind Flower and collaborative AI."
@@ -8714,29 +9009,29 @@ msgstr ""
"Guides orientés sur la compréhension et l'explication des sujets et idées"
" de fonds sur lesquels sont construits Flower et l'IA collaborative."
-#: ../../source/index.rst:121
+#: ../../source/index.rst:122
#, fuzzy
msgid "References"
msgstr "Référence"
-#: ../../source/index.rst:123
+#: ../../source/index.rst:124
msgid "Information-oriented API reference and other reference material."
msgstr "Référence de l'API orientée sur l'information pure."
-#: ../../source/index.rst:132::1
+#: ../../source/index.rst:133::1
msgid ":py:obj:`flwr `\\"
msgstr ""
-#: ../../source/index.rst:132::1 flwr:1 of
+#: ../../source/index.rst:133::1 flwr:1 of
msgid "Flower main package."
msgstr ""
-#: ../../source/index.rst:148
+#: ../../source/index.rst:149
#, fuzzy
msgid "Contributor docs"
msgstr "Configuration du contributeur"
-#: ../../source/index.rst:150
+#: ../../source/index.rst:151
#, fuzzy
msgid ""
"The Flower community welcomes contributions. The following docs are "
@@ -8849,7 +9144,7 @@ msgstr ""
msgid "Arguments"
msgstr "Amélioration de la documentation"
-#: ../../flwr install:1 log:1 ls:1 new:1 run:1
+#: ../../flwr install:1 log:1 ls:1 new:1 run:1 stop:1
#, fuzzy
msgid "Optional argument"
msgstr "Améliorations facultatives"
@@ -8875,7 +9170,7 @@ msgstr "Flux de travail"
msgid "``True``"
msgstr ""
-#: ../../flwr log:1
+#: ../../flwr log:1 stop:1
#, fuzzy
msgid "Required argument"
msgstr "Amélioration de la documentation"
@@ -8909,12 +9204,21 @@ msgstr ""
msgid "Specific run ID to display"
msgstr ""
-#: ../../flwr ls:1
+#: ../../flwr ls:1 run:1
+msgid "Format output using 'default' view or 'json'"
+msgstr ""
+
+#: ../../flwr ls:1 run:1
+#, fuzzy
+msgid "``'default'``"
+msgstr "Flux de travail"
+
+#: ../../flwr ls:1 stop:1
#, fuzzy
msgid "Path of the Flower project"
msgstr "Chargement des données"
-#: ../../flwr ls:1
+#: ../../flwr ls:1 stop:1
msgid "Name of the federation"
msgstr ""
@@ -8983,6 +9287,15 @@ msgstr "Chargement des données"
msgid "Name of the federation to run the app on."
msgstr ""
+#: ../../flwr stop:1
+msgid "Stop a run."
+msgstr ""
+
+#: ../../flwr stop:1
+#, fuzzy
+msgid "The Flower run ID to stop"
+msgstr "Rejoignez la communauté de Flower"
+
#: ../../source/ref-api-cli.rst:19
#, fuzzy
msgid "``flower-superlink``"
@@ -28908,7 +29221,7 @@ msgstr ""
"chose d'autre, comme la régression linéaire classique."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:41
-msgid "|80152fa658904be08c849b4a594b76e1|"
+msgid "|6102f514742c4211b093aae3a5a74e51|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:109
@@ -28927,7 +29240,7 @@ msgstr ""
" Go."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:53
-msgid "|35b60a1068f944ce937ac2988661aad5|"
+msgid "|24080db3b13d4b0c8546096de73ac82a|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:111
@@ -28959,7 +29272,7 @@ msgstr ""
"chanson."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:67
-msgid "|efead7f2c2224b60b7b42705004c15e6|"
+msgid "|9087a1f0e9ab41c083f5209a3f17e600|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:113
@@ -28980,7 +29293,7 @@ msgstr ""
" données pour la même tâche."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:79
-msgid "|5421fee4e7ed450c903cbcd8a9d8a5d4|"
+msgid "|a5d1853a0b3c44d4bdd408d15a89e7ac|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:115
@@ -29002,7 +29315,7 @@ msgstr ""
"cloud."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:91
-msgid "|811fcf35e9214bd5b4e613e41f7c0a27|"
+msgid "|8e6e9164d7414c39bf37f67e2fda59bd|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:117
@@ -29023,7 +29336,7 @@ msgstr ""
"appuyés."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:103
-msgid "|e61d38b0948f4c07a7257755f3799b54|"
+msgid "|e8b1d08849514de1b09fee325db970d0|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:119
@@ -29049,7 +29362,7 @@ msgstr ""
" sur un serveur centralisé."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:138
-msgid "|e82c29351e2e480087c61b939eb7c041|"
+msgid "|ca0b3cb207164665b5bef1d869c37dff|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:173
@@ -29068,7 +29381,7 @@ msgstr ""
"suffisantes pour former un bon modèle."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:150
-msgid "|21ca40f4fb1a405c89098fd1d24880a4|"
+msgid "|977cb114b97047329a7bb908afbac2cd|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:175
@@ -29299,7 +29612,7 @@ msgstr ""
"partir d'un point de contrôle précédemment sauvegardé."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:210
-msgid "|1351a2629c2c46d981b13b19f9fa45f0|"
+msgid "|9f497b02d2634af2925a65244cc0eb1b|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:307
@@ -29334,7 +29647,7 @@ msgstr ""
"rendements décroissants."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:225
-msgid "|124c2c188b994c7ab1c862cfdb326923|"
+msgid "|938ae2cd4fae49ce9292e6e2d9bd880d|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:309
@@ -29367,7 +29680,7 @@ msgstr ""
"données locales, ou même de quelques étapes (mini-batchs)."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:240
-msgid "|42e1951c36f2406e93c7ae0ec5b299f9|"
+msgid "|47cd7c6cb4094846833faff5b05e0d46|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:311
@@ -29398,7 +29711,7 @@ msgstr ""
" l'entraînement local."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:255
-msgid "|ec637b8a84234d068995ee1ccb2dd3b1|"
+msgid "|c90d6613b0a34a42bf3023ca5a81c8e2|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:313
@@ -29458,7 +29771,7 @@ msgstr ""
"times as much as each of the 100 examples."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:273
-msgid "|5bceb9d16b1a4d2db18d8a5b2f0cacb3|"
+msgid "|91c29c3c9b1b411590de3983d94ed76a|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:315
@@ -29602,7 +29915,7 @@ msgstr ""
"quel cadre de ML et n'importe quel langage de programmation."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:334
-msgid "|502b10044e864ca2b15282a393ab7faf|"
+msgid "|e4adf0f92ebf4c3d9e6e64355204f897|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:340
@@ -43007,3 +43320,87 @@ msgstr ""
#~ msgid "|7bfcfcb57ae5403f8e18486f45ca48b4|"
#~ msgstr ""
+#~ msgid "|80152fa658904be08c849b4a594b76e1|"
+#~ msgstr ""
+
+#~ msgid "|35b60a1068f944ce937ac2988661aad5|"
+#~ msgstr ""
+
+#~ msgid "|efead7f2c2224b60b7b42705004c15e6|"
+#~ msgstr ""
+
+#~ msgid "|5421fee4e7ed450c903cbcd8a9d8a5d4|"
+#~ msgstr ""
+
+#~ msgid "|811fcf35e9214bd5b4e613e41f7c0a27|"
+#~ msgstr ""
+
+#~ msgid "|e61d38b0948f4c07a7257755f3799b54|"
+#~ msgstr ""
+
+#~ msgid "|e82c29351e2e480087c61b939eb7c041|"
+#~ msgstr ""
+
+#~ msgid "|21ca40f4fb1a405c89098fd1d24880a4|"
+#~ msgstr ""
+
+#~ msgid "|1351a2629c2c46d981b13b19f9fa45f0|"
+#~ msgstr ""
+
+#~ msgid "|124c2c188b994c7ab1c862cfdb326923|"
+#~ msgstr ""
+
+#~ msgid "|42e1951c36f2406e93c7ae0ec5b299f9|"
+#~ msgstr ""
+
+#~ msgid "|ec637b8a84234d068995ee1ccb2dd3b1|"
+#~ msgstr ""
+
+#~ msgid "|5bceb9d16b1a4d2db18d8a5b2f0cacb3|"
+#~ msgstr ""
+
+#~ msgid "|502b10044e864ca2b15282a393ab7faf|"
+#~ msgstr ""
+
+#~ msgid "|dbd9718fb89b4e219a54b72b6eecf502|"
+#~ msgstr ""
+
+#~ msgid "|18916394e69e4fdaafbb56f7bba690d3|"
+#~ msgstr ""
+
+#~ msgid "|20988fac7e2e497ea15f786730279299|"
+#~ msgstr ""
+
+#~ msgid "|5d612ca92b074af4a034bf4c0f498d2e|"
+#~ msgstr ""
+
+#~ msgid "|6721ae86e3f348e2bce58d358a2ee79c|"
+#~ msgstr ""
+
+#~ msgid "|d255f931abb44ca8a7eba0d90dfcf6a1|"
+#~ msgstr ""
+
+#~ msgid "|f98da3b55eca452390fb33429a7d7ebe|"
+#~ msgstr ""
+
+#~ msgid "|10dc1f84d36b432e95d7f61fcd25a701|"
+#~ msgstr ""
+
+#~ msgid "|f963159664b54e40a64a7f1c19414349|"
+#~ msgstr ""
+
+#~ msgid "|3647c3b36916415ab40c1597a3ddd4b0|"
+#~ msgstr ""
+
+#~ msgid "|a3c07b2cf1214488a99267b3757d9426|"
+#~ msgstr ""
+
+#~ msgid "|2f6bce3bfacf4c85ac3a7e0fd1d5aa84|"
+#~ msgstr ""
+
+#~ msgid "|19ebdce05cab40d791a2117f743290c3|"
+#~ msgstr ""
+
+#~ msgid "|dd729f8776d640ffb136545f3f26210f|"
+#~ msgstr ""
+
diff --git a/doc/locales/fr/LC_MESSAGES/sphinx.po b/framework/doc/locales/fr/LC_MESSAGES/sphinx.po
similarity index 100%
rename from doc/locales/fr/LC_MESSAGES/sphinx.po
rename to framework/doc/locales/fr/LC_MESSAGES/sphinx.po
diff --git a/doc/locales/ko/LC_MESSAGES/framework-docs.po b/framework/doc/locales/ko/LC_MESSAGES/framework-docs.po
similarity index 98%
rename from doc/locales/ko/LC_MESSAGES/framework-docs.po
rename to framework/doc/locales/ko/LC_MESSAGES/framework-docs.po
index 810bc10e99b3..79be78a61bbe 100644
--- a/doc/locales/ko/LC_MESSAGES/framework-docs.po
+++ b/framework/doc/locales/ko/LC_MESSAGES/framework-docs.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Flower main\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-11-30 00:31+0000\n"
+"POT-Creation-Date: 2024-12-09 00:34+0000\n"
"PO-Revision-Date: 2024-08-23 13:09+0000\n"
"Last-Translator: Seulki Yun \n"
"Language: ko\n"
@@ -6144,6 +6144,7 @@ msgid ""
msgstr ""
#: ../../source/how-to-implement-fedbn.rst:99
+#: ../../source/how-to-run-flower-on-azure.rst:217
msgid "Next Steps"
msgstr "다음 단계"
@@ -6637,6 +6638,302 @@ msgstr ""
"가상 클라이언트 엔진을 사용하는 시뮬레이션의 경우, ``flwr-nightly``를 ``simulation`` extr와 함께 "
"설치해야 합니다::"
+#: ../../source/how-to-run-flower-on-azure.rst:18
+#, fuzzy
+msgid "Run Flower on Azure"
+msgstr "Flower 서버."
+
+#: ../../source/how-to-run-flower-on-azure.rst:22
+msgid ""
+"There are many ways to deploy Flower on Microst Azure. The instructions "
+"provided in this guide is just a basic walkthrough, step-by-step guide on"
+" how to quickly setup and run a Flower application on a Federated "
+"Learning environment on Microst Azure."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:26
+msgid ""
+"In this how-to guide, we want to create a Federated Learning environment "
+"on Microst Azure using three Virtual Machines (VMs). From the three "
+"machines, one machine will be used as the Federation server and two as "
+"the Federation clients. Our goal is to create a Flower federation on "
+"Microst Azure where we can run Flower apps from our local machine, e.g., "
+"laptop."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:32
+msgid ""
+"On the Federation server VM we will deploy the long-running Flower server"
+" (``SuperLink``) and on the two Federation client VMs we will deploy the "
+"long-running Flower client (``SuperNode``). For more details For more "
+"details regarding the ``SuperLink`` and ``SuperNode`` concepts, please "
+"see the |flower_architecture_link|_ ."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:38
+msgid "Azure VMs"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:40
+msgid ""
+"First we need to create the three VMs configure their Python "
+"environments, and inbound networking rules to allow cross-VM "
+"communication."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:44
+msgid "VM Create"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:46
+msgid ""
+"Assuming we are already inside the Microst Azure portal, we navigate to "
+"the ``Create`` page and we select ``Azure virtual machine``. In the new "
+"page, for each VM we edit the properties as follows:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:55
+msgid "**Virtual machine name**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:56
+msgid ""
+"for server machine we can use ``flower-server`` and for clients, "
+"``flower-client-1`` and ``flower-client-2``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:58
+#, fuzzy
+msgid "**Image**"
+msgstr "**변경하기**"
+
+#: ../../source/how-to-run-flower-on-azure.rst:59
+msgid "in this guide, we use ``Ubuntu Server 24.04 - x64 Gen2 LTS``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:60
+msgid "**Size**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:61
+msgid "in this guide, we use ``Standard_D2s_v3 - 2 vcpus, 8GiB memory``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:65
+msgid "For resource group, we can create a new group and assign it to all VMs."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:67
+msgid ""
+"When each VM instance has been created the portal will allow you to "
+"download the public key (.pem) of each instance. Make sure you save this "
+"key in safe place and change its permissions to user read only, i.e., run"
+" the ``chmod 400 `` command for every .pem file."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:72
+msgid ""
+"Once all three VMs are created then navigate to the overview page where "
+"all three VMs are listed and open every other VM, and copy its Public IP "
+"address. Using the Public IP address and the public key (after changing "
+"the permissions), login to the instances from our local machine by "
+"running the following command (by default Azure creates the "
+"``azureuser``):"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:83
+msgid "VM Networking"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:85
+msgid ""
+"During the execution of the Flower application, the server VM "
+"(``SuperLink``) will be responsible to orchestrate the execution of the "
+"application across the client VMs (``SuperNode``). When the SuperLink "
+"server starts, by default, it listens to the following ports: ``{9092, "
+"9093}``. Port `9092` is used to communicate with the Federation clients "
+"(``SuperNode``) and port ``9093`` to receive and execute Flower "
+"applications."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:92
+msgid ""
+"Therefore, to enable this communication we need to allow inbound traffic "
+"to the server VM instance. To achieve this, we need to navigate to the "
+"Networking page of the server VM in the Microsoft Azure portal. There, we"
+" will click the ``Add inbound port rule``. In the new window that "
+"appears, we edit the rule properties as follows:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:97
+msgid "The rest of the fields can be left at their default values."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:104
+#: ../../source/how-to-run-flower-on-azure.rst:145
+#, fuzzy
+msgid "**Source**"
+msgstr "run\\_supernode"
+
+#: ../../source/how-to-run-flower-on-azure.rst:105
+msgid "``IP Addresses``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:106
+#: ../../source/how-to-run-flower-on-azure.rst:133
+msgid "**Source IP addresses/CIDR ranges**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:107
+msgid "add client VMs' Public IP (separated by comma)"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:108
+#, fuzzy
+msgid "**Destination**"
+msgstr "설명"
+
+#: ../../source/how-to-run-flower-on-azure.rst:109
+#: ../../source/how-to-run-flower-on-azure.rst:146
+#, fuzzy
+msgid "``Any``"
+msgstr "``flwr/base``"
+
+#: ../../source/how-to-run-flower-on-azure.rst:110
+#, fuzzy
+msgid "**Service**"
+msgstr "run\\_supernode"
+
+#: ../../source/how-to-run-flower-on-azure.rst:111
+#, fuzzy
+msgid "``custom``"
+msgstr "``DISTRO``"
+
+#: ../../source/how-to-run-flower-on-azure.rst:112
+#: ../../source/how-to-run-flower-on-azure.rst:135
+#: ../../source/how-to-run-flower-on-azure.rst:147
+msgid "**Destination port ranges**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:113
+msgid "``9092``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:114
+msgid "**Protocol**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:115
+#, fuzzy
+msgid "``TCP``"
+msgstr "``DISTRO``"
+
+#: ../../source/how-to-run-flower-on-azure.rst:117
+msgid ""
+"Finally, we need to also open port 9093 to allow receiving and executing "
+"incoming application requests. To enable this we just need to repeat the "
+"steps above, i.e., create a new inbound rule, where for port range we "
+"assign port 9093. If we already know the Public IP from which our local "
+"machine (e.g., laptop) will be submitting applications to the Azure "
+"cluster, then we just need to specify the Source IP address/CIDR range. "
+"However, if we want to keep the port widely open we simply need to change"
+" source to ``Any``."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:125
+msgid ""
+"To be more precise, if we know the Public IP of our machine, then we make"
+" the following changes:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:134
+msgid "add machine's Public IP"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:136
+#: ../../source/how-to-run-flower-on-azure.rst:148
+msgid "``9093``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:138
+msgid "Otherwise, we change the properties as follows:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:151
+#, fuzzy
+msgid "Flower Environment"
+msgstr "Flower 개발 환경 만들기"
+
+#: ../../source/how-to-run-flower-on-azure.rst:153
+msgid ""
+"Assuming we have been able to login to each VM, and create a Python "
+"environment with Flower and all its dependencies installed (``pip install"
+" flwr``), we can create a Flower application by running the ``flwr new`` "
+"command. The console will then prompt us to give a name to the project, "
+"e.g., ``flwr_azure_test``, the name of the author and select the type of "
+"the Flower Framework we want to run, e.g., ``numpy``."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:161
+msgid ""
+"An alternative approach would be to use Docker in each VM, with each "
+"image containing the necessary environment and dependencies. For more "
+"details please refer to the |flower_docker_index|_ guide."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:166
+#, fuzzy
+msgid "Server Initialization"
+msgstr "설치 확인"
+
+#: ../../source/how-to-run-flower-on-azure.rst:168
+msgid ""
+"After configuring the Flower application environment, we proceed by "
+"starting the Flower long-running processes (i.e., ``SuperLink`` and "
+"``SuperNode``) at each VM instance. In particular, we need to run the "
+"following commands, first in the server (``SuperLink``) and then at each "
+"client (``SuperNode``)."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:175
+msgid ""
+"To enable authentication and encrypted communication during the execution"
+" lifecycle of the Flower application, please have a look at the following"
+" resources: |authenticate_supernodes|_, |enable_tls_connections|_"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:197
+#, fuzzy
+msgid "Run Flower App"
+msgstr "Flower 서버."
+
+#: ../../source/how-to-run-flower-on-azure.rst:199
+msgid ""
+"Finally, after all running Flower processes have been initialized on the "
+"Microsoft Azure cluster, in our local machine, we first need to install "
+"Flower and can create a project with a similar structure as the one we "
+"have in the server and the clients, or copy the project structure from "
+"one of them. Once we have the project locally, we can open the "
+"``pyproject.toml`` file, and then add the following sections:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:214
+msgid "Then from our local machine we need to run ``flwr run . my-federation``."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:221
+msgid ""
+"This guide is not suitable for production environments due to missing "
+"authentication and TLS security."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:224
+msgid ""
+"To enable authentication and establish secure connections, please refer "
+"to the following resources: |authenticate_supernodes|_, "
+"|enable_tls_connections|_"
+msgstr ""
+
#: ../../source/how-to-run-simulations.rst:22
msgid "Run simulations"
msgstr "시뮬레이션 실행"
@@ -8496,7 +8793,7 @@ msgstr "빠른 시작 튜토리얼"
msgid "How-to guides"
msgstr "사용 방법 가이드"
-#: ../../source/index.rst:107 ../../source/index.rst:112
+#: ../../source/index.rst:108 ../../source/index.rst:113
msgid "Explanations"
msgstr "설명"
@@ -8504,23 +8801,23 @@ msgstr "설명"
msgid "API reference"
msgstr "API 참조"
-#: ../../source/index.rst:138
+#: ../../source/index.rst:139
msgid "Reference docs"
msgstr "참조 문서"
-#: ../../source/index.rst:153
+#: ../../source/index.rst:154
msgid "Contributor tutorials"
msgstr "기여자 튜토리얼"
-#: ../../source/index.rst:160
+#: ../../source/index.rst:161
msgid "Contributor how-to guides"
msgstr "기여자 사용법 가이드"
-#: ../../source/index.rst:172
+#: ../../source/index.rst:173
msgid "Contributor explanations"
msgstr "기여자 설명"
-#: ../../source/index.rst:178
+#: ../../source/index.rst:179
msgid "Contributor references"
msgstr "기여자 참조"
@@ -8617,33 +8914,33 @@ msgid ""
"specific goal."
msgstr "문제 중심의 방법 가이드는 특정 목표를 달성하는 방법을 단계별로 보여줍니다."
-#: ../../source/index.rst:109
+#: ../../source/index.rst:110
msgid ""
"Understanding-oriented concept guides explain and discuss key topics and "
"underlying ideas behind Flower and collaborative AI."
msgstr "이해 중심의 개념 가이드에서는 Flower와 협업 AI의 주요 주제와 기본 아이디어를 설명하고 토론합니다."
-#: ../../source/index.rst:121
+#: ../../source/index.rst:122
msgid "References"
msgstr "참조"
-#: ../../source/index.rst:123
+#: ../../source/index.rst:124
msgid "Information-oriented API reference and other reference material."
msgstr "정보 지향 API 참조 및 기타 참고 자료."
-#: ../../source/index.rst:132::1
+#: ../../source/index.rst:133::1
msgid ":py:obj:`flwr `\\"
msgstr ":py:obj:`flwr `\\"
-#: ../../source/index.rst:132::1 flwr:1 of
+#: ../../source/index.rst:133::1 flwr:1 of
msgid "Flower main package."
msgstr "Flower 메인 패키지."
-#: ../../source/index.rst:148
+#: ../../source/index.rst:149
msgid "Contributor docs"
msgstr "기여자 문서"
-#: ../../source/index.rst:150
+#: ../../source/index.rst:151
msgid ""
"The Flower community welcomes contributions. The following docs are "
"intended to help along the way."
@@ -8751,7 +9048,7 @@ msgstr ""
msgid "Arguments"
msgstr "빌드 전달인자"
-#: ../../flwr install:1 log:1 ls:1 new:1 run:1
+#: ../../flwr install:1 log:1 ls:1 new:1 run:1 stop:1
#, fuzzy
msgid "Optional argument"
msgstr "선택적 개선 사항"
@@ -8777,7 +9074,7 @@ msgstr ""
msgid "``True``"
msgstr "``DISTRO``"
-#: ../../flwr log:1
+#: ../../flwr log:1 stop:1
#, fuzzy
msgid "Required argument"
msgstr "빌드 전달인자"
@@ -8812,12 +9109,21 @@ msgstr "``flwr/base``"
msgid "Specific run ID to display"
msgstr ""
-#: ../../flwr ls:1
+#: ../../flwr ls:1 run:1
+msgid "Format output using 'default' view or 'json'"
+msgstr ""
+
+#: ../../flwr ls:1 run:1
+#, fuzzy
+msgid "``'default'``"
+msgstr "``flwr/base``"
+
+#: ../../flwr ls:1 stop:1
#, fuzzy
msgid "Path of the Flower project"
msgstr "Flower 기본 이미지의 태그."
-#: ../../flwr ls:1
+#: ../../flwr ls:1 stop:1
msgid "Name of the federation"
msgstr ""
@@ -8886,6 +9192,15 @@ msgstr "Flower 기본 이미지의 태그."
msgid "Name of the federation to run the app on."
msgstr ""
+#: ../../flwr stop:1
+msgid "Stop a run."
+msgstr ""
+
+#: ../../flwr stop:1
+#, fuzzy
+msgid "The Flower run ID to stop"
+msgstr "Flower 커뮤니티 가입하기"
+
#: ../../source/ref-api-cli.rst:19
#, fuzzy
msgid "``flower-superlink``"
@@ -25988,7 +26303,7 @@ msgstr ""
" 수도 있습니다."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:41
-msgid "|80152fa658904be08c849b4a594b76e1|"
+msgid "|6102f514742c4211b093aae3a5a74e51|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:109
@@ -26005,7 +26320,7 @@ msgstr ""
" 바둑과 같은 게임을 하는 것일 수 있습니다."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:53
-msgid "|35b60a1068f944ce937ac2988661aad5|"
+msgid "|24080db3b13d4b0c8546096de73ac82a|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:111
@@ -26031,7 +26346,7 @@ msgstr ""
"부르리는 것을 듣는 스마트 스피커에서 비롯됩니다."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:67
-msgid "|efead7f2c2224b60b7b42705004c15e6|"
+msgid "|9087a1f0e9ab41c083f5209a3f17e600|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:113
@@ -26049,7 +26364,7 @@ msgstr ""
"있습니다. 하지만 여러 조직이 모두 같은 작업을 위해 데이터를 생성하는 것일 수도 있습니다."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:79
-msgid "|5421fee4e7ed450c903cbcd8a9d8a5d4|"
+msgid "|a5d1853a0b3c44d4bdd408d15a89e7ac|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:115
@@ -26068,7 +26383,7 @@ msgstr ""
"서버는 데이터 센터 어딘가에 있을 수도 있고 클라우드 어딘가에 있을 수도 있습니다."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:91
-msgid "|811fcf35e9214bd5b4e613e41f7c0a27|"
+msgid "|8e6e9164d7414c39bf37f67e2fda59bd|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:117
@@ -26085,7 +26400,7 @@ msgstr ""
" 우리가 기본적으로 사용해 온 머신러닝 방법입니다."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:103
-msgid "|e61d38b0948f4c07a7257755f3799b54|"
+msgid "|e8b1d08849514de1b09fee325db970d0|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:119
@@ -26108,7 +26423,7 @@ msgstr ""
"트래픽을 분석하는 것이 있습니다. 이러한 사례에서 모든 데이터는 자연스럽게 중앙 서버에 존재합니다."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:138
-msgid "|e82c29351e2e480087c61b939eb7c041|"
+msgid "|ca0b3cb207164665b5bef1d869c37dff|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:173
@@ -26125,7 +26440,7 @@ msgstr ""
"좋은 모델을 훈련하기에 충분하지 않을 수 있습니다."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:150
-msgid "|21ca40f4fb1a405c89098fd1d24880a4|"
+msgid "|977cb114b97047329a7bb908afbac2cd|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:175
@@ -26304,7 +26619,7 @@ msgstr ""
"체크포인트에서 모델 매개변수를 초기화합니다."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:210
-msgid "|1351a2629c2c46d981b13b19f9fa45f0|"
+msgid "|9f497b02d2634af2925a65244cc0eb1b|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:307
@@ -26332,7 +26647,7 @@ msgstr ""
"개의 연결 노드만 사용합니다. 그 이유는 점점 더 많은 클라이언트 노드를 선택하면 학습의 효율성이 감소하기 때문입니다."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:225
-msgid "|124c2c188b994c7ab1c862cfdb326923|"
+msgid "|938ae2cd4fae49ce9292e6e2d9bd880d|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:309
@@ -26359,7 +26674,7 @@ msgstr ""
"데이터에서 한 단계 정도로 짧거나 몇 단계(mini-batches)에 불과할 수 있습니다."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:240
-msgid "|42e1951c36f2406e93c7ae0ec5b299f9|"
+msgid "|47cd7c6cb4094846833faff5b05e0d46|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:311
@@ -26385,7 +26700,7 @@ msgstr ""
"보냅니다. 보내는 모델 업데이트는 전체 모델 파라미터거나 로컬 교육 중에 누적된 그레디언트(gradient)일 수 있습니다."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:255
-msgid "|ec637b8a84234d068995ee1ccb2dd3b1|"
+msgid "|c90d6613b0a34a42bf3023ca5a81c8e2|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:313
@@ -26435,7 +26750,7 @@ msgstr ""
"많은 영향을 미칩니다."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:273
-msgid "|5bceb9d16b1a4d2db18d8a5b2f0cacb3|"
+msgid "|91c29c3c9b1b411590de3983d94ed76a|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:315
@@ -26555,7 +26870,7 @@ msgstr ""
"사용자는 모든 워크로드, 머신러닝 프레임워크 및 모든 프로그래밍 언어를 통합할 수 있습니다."
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:334
-msgid "|502b10044e864ca2b15282a393ab7faf|"
+msgid "|e4adf0f92ebf4c3d9e6e64355204f897|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:340
@@ -33483,3 +33798,87 @@ msgstr ""
#~ msgid "|7bfcfcb57ae5403f8e18486f45ca48b4|"
#~ msgstr ""
+#~ msgid "|80152fa658904be08c849b4a594b76e1|"
+#~ msgstr ""
+
+#~ msgid "|35b60a1068f944ce937ac2988661aad5|"
+#~ msgstr ""
+
+#~ msgid "|efead7f2c2224b60b7b42705004c15e6|"
+#~ msgstr ""
+
+#~ msgid "|5421fee4e7ed450c903cbcd8a9d8a5d4|"
+#~ msgstr ""
+
+#~ msgid "|811fcf35e9214bd5b4e613e41f7c0a27|"
+#~ msgstr ""
+
+#~ msgid "|e61d38b0948f4c07a7257755f3799b54|"
+#~ msgstr ""
+
+#~ msgid "|e82c29351e2e480087c61b939eb7c041|"
+#~ msgstr ""
+
+#~ msgid "|21ca40f4fb1a405c89098fd1d24880a4|"
+#~ msgstr ""
+
+#~ msgid "|1351a2629c2c46d981b13b19f9fa45f0|"
+#~ msgstr ""
+
+#~ msgid "|124c2c188b994c7ab1c862cfdb326923|"
+#~ msgstr ""
+
+#~ msgid "|42e1951c36f2406e93c7ae0ec5b299f9|"
+#~ msgstr ""
+
+#~ msgid "|ec637b8a84234d068995ee1ccb2dd3b1|"
+#~ msgstr ""
+
+#~ msgid "|5bceb9d16b1a4d2db18d8a5b2f0cacb3|"
+#~ msgstr ""
+
+#~ msgid "|502b10044e864ca2b15282a393ab7faf|"
+#~ msgstr ""
+
+#~ msgid "|dbd9718fb89b4e219a54b72b6eecf502|"
+#~ msgstr ""
+
+#~ msgid "|18916394e69e4fdaafbb56f7bba690d3|"
+#~ msgstr ""
+
+#~ msgid "|20988fac7e2e497ea15f786730279299|"
+#~ msgstr ""
+
+#~ msgid "|5d612ca92b074af4a034bf4c0f498d2e|"
+#~ msgstr ""
+
+#~ msgid "|6721ae86e3f348e2bce58d358a2ee79c|"
+#~ msgstr ""
+
+#~ msgid "|d255f931abb44ca8a7eba0d90dfcf6a1|"
+#~ msgstr ""
+
+#~ msgid "|f98da3b55eca452390fb33429a7d7ebe|"
+#~ msgstr ""
+
+#~ msgid "|10dc1f84d36b432e95d7f61fcd25a701|"
+#~ msgstr ""
+
+#~ msgid "|f963159664b54e40a64a7f1c19414349|"
+#~ msgstr ""
+
+#~ msgid "|3647c3b36916415ab40c1597a3ddd4b0|"
+#~ msgstr ""
+
+#~ msgid "|a3c07b2cf1214488a99267b3757d9426|"
+#~ msgstr ""
+
+#~ msgid "|2f6bce3bfacf4c85ac3a7e0fd1d5aa84|"
+#~ msgstr ""
+
+#~ msgid "|19ebdce05cab40d791a2117f743290c3|"
+#~ msgstr ""
+
+#~ msgid "|dd729f8776d640ffb136545f3f26210f|"
+#~ msgstr ""
+
diff --git a/doc/locales/ko/LC_MESSAGES/sphinx.po b/framework/doc/locales/ko/LC_MESSAGES/sphinx.po
similarity index 100%
rename from doc/locales/ko/LC_MESSAGES/sphinx.po
rename to framework/doc/locales/ko/LC_MESSAGES/sphinx.po
diff --git a/doc/locales/pt_BR/LC_MESSAGES/framework-docs.po b/framework/doc/locales/pt_BR/LC_MESSAGES/framework-docs.po
similarity index 98%
rename from doc/locales/pt_BR/LC_MESSAGES/framework-docs.po
rename to framework/doc/locales/pt_BR/LC_MESSAGES/framework-docs.po
index 21eafd64d9a2..b6d01c0e97a4 100644
--- a/doc/locales/pt_BR/LC_MESSAGES/framework-docs.po
+++ b/framework/doc/locales/pt_BR/LC_MESSAGES/framework-docs.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Flower main\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-11-30 00:31+0000\n"
+"POT-Creation-Date: 2024-12-09 00:34+0000\n"
"PO-Revision-Date: 2024-05-25 11:09+0000\n"
"Last-Translator: Gustavo Bertoli \n"
"Language: pt_BR\n"
@@ -5638,6 +5638,7 @@ msgid ""
msgstr ""
#: ../../source/how-to-implement-fedbn.rst:99
+#: ../../source/how-to-run-flower-on-azure.rst:217
msgid "Next Steps"
msgstr ""
@@ -6006,6 +6007,296 @@ msgid ""
"should be installed with the ``simulation`` extra:"
msgstr ""
+#: ../../source/how-to-run-flower-on-azure.rst:18
+msgid "Run Flower on Azure"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:22
+msgid ""
+"There are many ways to deploy Flower on Microst Azure. The instructions "
+"provided in this guide is just a basic walkthrough, step-by-step guide on"
+" how to quickly setup and run a Flower application on a Federated "
+"Learning environment on Microst Azure."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:26
+msgid ""
+"In this how-to guide, we want to create a Federated Learning environment "
+"on Microst Azure using three Virtual Machines (VMs). From the three "
+"machines, one machine will be used as the Federation server and two as "
+"the Federation clients. Our goal is to create a Flower federation on "
+"Microst Azure where we can run Flower apps from our local machine, e.g., "
+"laptop."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:32
+msgid ""
+"On the Federation server VM we will deploy the long-running Flower server"
+" (``SuperLink``) and on the two Federation client VMs we will deploy the "
+"long-running Flower client (``SuperNode``). For more details For more "
+"details regarding the ``SuperLink`` and ``SuperNode`` concepts, please "
+"see the |flower_architecture_link|_ ."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:38
+msgid "Azure VMs"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:40
+msgid ""
+"First we need to create the three VMs configure their Python "
+"environments, and inbound networking rules to allow cross-VM "
+"communication."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:44
+msgid "VM Create"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:46
+msgid ""
+"Assuming we are already inside the Microst Azure portal, we navigate to "
+"the ``Create`` page and we select ``Azure virtual machine``. In the new "
+"page, for each VM we edit the properties as follows:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:55
+msgid "**Virtual machine name**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:56
+msgid ""
+"for server machine we can use ``flower-server`` and for clients, "
+"``flower-client-1`` and ``flower-client-2``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:58
+msgid "**Image**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:59
+msgid "in this guide, we use ``Ubuntu Server 24.04 - x64 Gen2 LTS``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:60
+msgid "**Size**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:61
+msgid "in this guide, we use ``Standard_D2s_v3 - 2 vcpus, 8GiB memory``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:65
+msgid "For resource group, we can create a new group and assign it to all VMs."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:67
+msgid ""
+"When each VM instance has been created the portal will allow you to "
+"download the public key (.pem) of each instance. Make sure you save this "
+"key in safe place and change its permissions to user read only, i.e., run"
+" the ``chmod 400 `` command for every .pem file."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:72
+msgid ""
+"Once all three VMs are created then navigate to the overview page where "
+"all three VMs are listed and open every other VM, and copy its Public IP "
+"address. Using the Public IP address and the public key (after changing "
+"the permissions), login to the instances from our local machine by "
+"running the following command (by default Azure creates the "
+"``azureuser``):"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:83
+msgid "VM Networking"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:85
+msgid ""
+"During the execution of the Flower application, the server VM "
+"(``SuperLink``) will be responsible to orchestrate the execution of the "
+"application across the client VMs (``SuperNode``). When the SuperLink "
+"server starts, by default, it listens to the following ports: ``{9092, "
+"9093}``. Port `9092` is used to communicate with the Federation clients "
+"(``SuperNode``) and port ``9093`` to receive and execute Flower "
+"applications."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:92
+msgid ""
+"Therefore, to enable this communication we need to allow inbound traffic "
+"to the server VM instance. To achieve this, we need to navigate to the "
+"Networking page of the server VM in the Microsoft Azure portal. There, we"
+" will click the ``Add inbound port rule``. In the new window that "
+"appears, we edit the rule properties as follows:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:97
+msgid "The rest of the fields can be left at their default values."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:104
+#: ../../source/how-to-run-flower-on-azure.rst:145
+msgid "**Source**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:105
+msgid "``IP Addresses``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:106
+#: ../../source/how-to-run-flower-on-azure.rst:133
+msgid "**Source IP addresses/CIDR ranges**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:107
+msgid "add client VMs' Public IP (separated by comma)"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:108
+#, fuzzy
+msgid "**Destination**"
+msgstr "Descrição"
+
+#: ../../source/how-to-run-flower-on-azure.rst:109
+#: ../../source/how-to-run-flower-on-azure.rst:146
+#, fuzzy
+msgid "``Any``"
+msgstr "``FLWR_VERSION``"
+
+#: ../../source/how-to-run-flower-on-azure.rst:110
+msgid "**Service**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:111
+#, fuzzy
+msgid "``custom``"
+msgstr "``UBUNTU_VERSION``"
+
+#: ../../source/how-to-run-flower-on-azure.rst:112
+#: ../../source/how-to-run-flower-on-azure.rst:135
+#: ../../source/how-to-run-flower-on-azure.rst:147
+msgid "**Destination port ranges**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:113
+msgid "``9092``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:114
+msgid "**Protocol**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:115
+msgid "``TCP``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:117
+msgid ""
+"Finally, we need to also open port 9093 to allow receiving and executing "
+"incoming application requests. To enable this we just need to repeat the "
+"steps above, i.e., create a new inbound rule, where for port range we "
+"assign port 9093. If we already know the Public IP from which our local "
+"machine (e.g., laptop) will be submitting applications to the Azure "
+"cluster, then we just need to specify the Source IP address/CIDR range. "
+"However, if we want to keep the port widely open we simply need to change"
+" source to ``Any``."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:125
+msgid ""
+"To be more precise, if we know the Public IP of our machine, then we make"
+" the following changes:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:134
+msgid "add machine's Public IP"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:136
+#: ../../source/how-to-run-flower-on-azure.rst:148
+msgid "``9093``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:138
+msgid "Otherwise, we change the properties as follows:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:151
+#, fuzzy
+msgid "Flower Environment"
+msgstr "``FLWR_VERSION``"
+
+#: ../../source/how-to-run-flower-on-azure.rst:153
+msgid ""
+"Assuming we have been able to login to each VM, and create a Python "
+"environment with Flower and all its dependencies installed (``pip install"
+" flwr``), we can create a Flower application by running the ``flwr new`` "
+"command. The console will then prompt us to give a name to the project, "
+"e.g., ``flwr_azure_test``, the name of the author and select the type of "
+"the Flower Framework we want to run, e.g., ``numpy``."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:161
+msgid ""
+"An alternative approach would be to use Docker in each VM, with each "
+"image containing the necessary environment and dependencies. For more "
+"details please refer to the |flower_docker_index|_ guide."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:166
+msgid "Server Initialization"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:168
+msgid ""
+"After configuring the Flower application environment, we proceed by "
+"starting the Flower long-running processes (i.e., ``SuperLink`` and "
+"``SuperNode``) at each VM instance. In particular, we need to run the "
+"following commands, first in the server (``SuperLink``) and then at each "
+"client (``SuperNode``)."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:175
+msgid ""
+"To enable authentication and encrypted communication during the execution"
+" lifecycle of the Flower application, please have a look at the following"
+" resources: |authenticate_supernodes|_, |enable_tls_connections|_"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:197
+#, fuzzy
+msgid "Run Flower App"
+msgstr "O nome do repositório da imagem base."
+
+#: ../../source/how-to-run-flower-on-azure.rst:199
+msgid ""
+"Finally, after all running Flower processes have been initialized on the "
+"Microsoft Azure cluster, in our local machine, we first need to install "
+"Flower and can create a project with a similar structure as the one we "
+"have in the server and the clients, or copy the project structure from "
+"one of them. Once we have the project locally, we can open the "
+"``pyproject.toml`` file, and then add the following sections:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:214
+msgid "Then from our local machine we need to run ``flwr run . my-federation``."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:221
+msgid ""
+"This guide is not suitable for production environments due to missing "
+"authentication and TLS security."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:224
+msgid ""
+"To enable authentication and establish secure connections, please refer "
+"to the following resources: |authenticate_supernodes|_, "
+"|enable_tls_connections|_"
+msgstr ""
+
#: ../../source/how-to-run-simulations.rst:22
msgid "Run simulations"
msgstr ""
@@ -7581,7 +7872,7 @@ msgstr ""
msgid "How-to guides"
msgstr ""
-#: ../../source/index.rst:107 ../../source/index.rst:112
+#: ../../source/index.rst:108 ../../source/index.rst:113
msgid "Explanations"
msgstr ""
@@ -7589,23 +7880,23 @@ msgstr ""
msgid "API reference"
msgstr ""
-#: ../../source/index.rst:138
+#: ../../source/index.rst:139
msgid "Reference docs"
msgstr ""
-#: ../../source/index.rst:153
+#: ../../source/index.rst:154
msgid "Contributor tutorials"
msgstr ""
-#: ../../source/index.rst:160
+#: ../../source/index.rst:161
msgid "Contributor how-to guides"
msgstr ""
-#: ../../source/index.rst:172
+#: ../../source/index.rst:173
msgid "Contributor explanations"
msgstr ""
-#: ../../source/index.rst:178
+#: ../../source/index.rst:179
msgid "Contributor references"
msgstr ""
@@ -7689,33 +7980,33 @@ msgid ""
"specific goal."
msgstr ""
-#: ../../source/index.rst:109
+#: ../../source/index.rst:110
msgid ""
"Understanding-oriented concept guides explain and discuss key topics and "
"underlying ideas behind Flower and collaborative AI."
msgstr ""
-#: ../../source/index.rst:121
+#: ../../source/index.rst:122
msgid "References"
msgstr ""
-#: ../../source/index.rst:123
+#: ../../source/index.rst:124
msgid "Information-oriented API reference and other reference material."
msgstr ""
-#: ../../source/index.rst:132::1
+#: ../../source/index.rst:133::1
msgid ":py:obj:`flwr `\\"
msgstr ""
-#: ../../source/index.rst:132::1 flwr:1 of
+#: ../../source/index.rst:133::1 flwr:1 of
msgid "Flower main package."
msgstr ""
-#: ../../source/index.rst:148
+#: ../../source/index.rst:149
msgid "Contributor docs"
msgstr ""
-#: ../../source/index.rst:150
+#: ../../source/index.rst:151
msgid ""
"The Flower community welcomes contributions. The following docs are "
"intended to help along the way."
@@ -7819,7 +8110,7 @@ msgstr ""
msgid "Arguments"
msgstr "Argumento de compilação"
-#: ../../flwr install:1 log:1 ls:1 new:1 run:1
+#: ../../flwr install:1 log:1 ls:1 new:1 run:1 stop:1
#, fuzzy
msgid "Optional argument"
msgstr "Argumento de compilação"
@@ -7844,7 +8135,7 @@ msgstr ""
msgid "``True``"
msgstr ""
-#: ../../flwr log:1
+#: ../../flwr log:1 stop:1
#, fuzzy
msgid "Required argument"
msgstr "Argumento de compilação"
@@ -7878,12 +8169,21 @@ msgstr "``FLWR_VERSION``"
msgid "Specific run ID to display"
msgstr ""
-#: ../../flwr ls:1
+#: ../../flwr ls:1 run:1
+msgid "Format output using 'default' view or 'json'"
+msgstr ""
+
+#: ../../flwr ls:1 run:1
+#, fuzzy
+msgid "``'default'``"
+msgstr "``FLWR_VERSION``"
+
+#: ../../flwr ls:1 stop:1
#, fuzzy
msgid "Path of the Flower project"
msgstr "O nome do repositório da imagem base."
-#: ../../flwr ls:1
+#: ../../flwr ls:1 stop:1
msgid "Name of the federation"
msgstr ""
@@ -7949,6 +8249,14 @@ msgstr "O nome do repositório da imagem base."
msgid "Name of the federation to run the app on."
msgstr ""
+#: ../../flwr stop:1
+msgid "Stop a run."
+msgstr ""
+
+#: ../../flwr stop:1
+msgid "The Flower run ID to stop"
+msgstr ""
+
#: ../../source/ref-api-cli.rst:19
#, fuzzy
msgid "``flower-superlink``"
@@ -24655,7 +24963,7 @@ msgid ""
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:41
-msgid "|80152fa658904be08c849b4a594b76e1|"
+msgid "|6102f514742c4211b093aae3a5a74e51|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:109
@@ -24670,7 +24978,7 @@ msgid ""
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:53
-msgid "|35b60a1068f944ce937ac2988661aad5|"
+msgid "|24080db3b13d4b0c8546096de73ac82a|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:111
@@ -24692,7 +25000,7 @@ msgid ""
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:67
-msgid "|efead7f2c2224b60b7b42705004c15e6|"
+msgid "|9087a1f0e9ab41c083f5209a3f17e600|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:113
@@ -24708,7 +25016,7 @@ msgid ""
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:79
-msgid "|5421fee4e7ed450c903cbcd8a9d8a5d4|"
+msgid "|a5d1853a0b3c44d4bdd408d15a89e7ac|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:115
@@ -24724,7 +25032,7 @@ msgid ""
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:91
-msgid "|811fcf35e9214bd5b4e613e41f7c0a27|"
+msgid "|8e6e9164d7414c39bf37f67e2fda59bd|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:117
@@ -24739,7 +25047,7 @@ msgid ""
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:103
-msgid "|e61d38b0948f4c07a7257755f3799b54|"
+msgid "|e8b1d08849514de1b09fee325db970d0|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:119
@@ -24759,7 +25067,7 @@ msgid ""
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:138
-msgid "|e82c29351e2e480087c61b939eb7c041|"
+msgid "|ca0b3cb207164665b5bef1d869c37dff|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:173
@@ -24774,7 +25082,7 @@ msgid ""
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:150
-msgid "|21ca40f4fb1a405c89098fd1d24880a4|"
+msgid "|977cb114b97047329a7bb908afbac2cd|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:175
@@ -24914,7 +25222,7 @@ msgid ""
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:210
-msgid "|1351a2629c2c46d981b13b19f9fa45f0|"
+msgid "|9f497b02d2634af2925a65244cc0eb1b|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:307
@@ -24938,7 +25246,7 @@ msgid ""
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:225
-msgid "|124c2c188b994c7ab1c862cfdb326923|"
+msgid "|938ae2cd4fae49ce9292e6e2d9bd880d|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:309
@@ -24962,7 +25270,7 @@ msgid ""
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:240
-msgid "|42e1951c36f2406e93c7ae0ec5b299f9|"
+msgid "|47cd7c6cb4094846833faff5b05e0d46|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:311
@@ -24985,7 +25293,7 @@ msgid ""
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:255
-msgid "|ec637b8a84234d068995ee1ccb2dd3b1|"
+msgid "|c90d6613b0a34a42bf3023ca5a81c8e2|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:313
@@ -25023,7 +25331,7 @@ msgid ""
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:273
-msgid "|5bceb9d16b1a4d2db18d8a5b2f0cacb3|"
+msgid "|91c29c3c9b1b411590de3983d94ed76a|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:315
@@ -25117,7 +25425,7 @@ msgid ""
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:334
-msgid "|502b10044e864ca2b15282a393ab7faf|"
+msgid "|e4adf0f92ebf4c3d9e6e64355204f897|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:340
@@ -37501,3 +37809,87 @@ msgstr ""
#~ msgid "|7bfcfcb57ae5403f8e18486f45ca48b4|"
#~ msgstr ""
+#~ msgid "|80152fa658904be08c849b4a594b76e1|"
+#~ msgstr ""
+
+#~ msgid "|35b60a1068f944ce937ac2988661aad5|"
+#~ msgstr ""
+
+#~ msgid "|efead7f2c2224b60b7b42705004c15e6|"
+#~ msgstr ""
+
+#~ msgid "|5421fee4e7ed450c903cbcd8a9d8a5d4|"
+#~ msgstr ""
+
+#~ msgid "|811fcf35e9214bd5b4e613e41f7c0a27|"
+#~ msgstr ""
+
+#~ msgid "|e61d38b0948f4c07a7257755f3799b54|"
+#~ msgstr ""
+
+#~ msgid "|e82c29351e2e480087c61b939eb7c041|"
+#~ msgstr ""
+
+#~ msgid "|21ca40f4fb1a405c89098fd1d24880a4|"
+#~ msgstr ""
+
+#~ msgid "|1351a2629c2c46d981b13b19f9fa45f0|"
+#~ msgstr ""
+
+#~ msgid "|124c2c188b994c7ab1c862cfdb326923|"
+#~ msgstr ""
+
+#~ msgid "|42e1951c36f2406e93c7ae0ec5b299f9|"
+#~ msgstr ""
+
+#~ msgid "|ec637b8a84234d068995ee1ccb2dd3b1|"
+#~ msgstr ""
+
+#~ msgid "|5bceb9d16b1a4d2db18d8a5b2f0cacb3|"
+#~ msgstr ""
+
+#~ msgid "|502b10044e864ca2b15282a393ab7faf|"
+#~ msgstr ""
+
+#~ msgid "|dbd9718fb89b4e219a54b72b6eecf502|"
+#~ msgstr ""
+
+#~ msgid "|18916394e69e4fdaafbb56f7bba690d3|"
+#~ msgstr ""
+
+#~ msgid "|20988fac7e2e497ea15f786730279299|"
+#~ msgstr ""
+
+#~ msgid "|5d612ca92b074af4a034bf4c0f498d2e|"
+#~ msgstr ""
+
+#~ msgid "|6721ae86e3f348e2bce58d358a2ee79c|"
+#~ msgstr ""
+
+#~ msgid "|d255f931abb44ca8a7eba0d90dfcf6a1|"
+#~ msgstr ""
+
+#~ msgid "|f98da3b55eca452390fb33429a7d7ebe|"
+#~ msgstr ""
+
+#~ msgid "|10dc1f84d36b432e95d7f61fcd25a701|"
+#~ msgstr ""
+
+#~ msgid "|f963159664b54e40a64a7f1c19414349|"
+#~ msgstr ""
+
+#~ msgid "|3647c3b36916415ab40c1597a3ddd4b0|"
+#~ msgstr ""
+
+#~ msgid "|a3c07b2cf1214488a99267b3757d9426|"
+#~ msgstr ""
+
+#~ msgid "|2f6bce3bfacf4c85ac3a7e0fd1d5aa84|"
+#~ msgstr ""
+
+#~ msgid "|19ebdce05cab40d791a2117f743290c3|"
+#~ msgstr ""
+
+#~ msgid "|dd729f8776d640ffb136545f3f26210f|"
+#~ msgstr ""
+
diff --git a/doc/locales/pt_BR/LC_MESSAGES/sphinx.po b/framework/doc/locales/pt_BR/LC_MESSAGES/sphinx.po
similarity index 100%
rename from doc/locales/pt_BR/LC_MESSAGES/sphinx.po
rename to framework/doc/locales/pt_BR/LC_MESSAGES/sphinx.po
diff --git a/doc/locales/zh_Hans/LC_MESSAGES/framework-docs.po b/framework/doc/locales/zh_Hans/LC_MESSAGES/framework-docs.po
similarity index 99%
rename from doc/locales/zh_Hans/LC_MESSAGES/framework-docs.po
rename to framework/doc/locales/zh_Hans/LC_MESSAGES/framework-docs.po
index 3b56d02c7503..41918a42b1d3 100644
--- a/doc/locales/zh_Hans/LC_MESSAGES/framework-docs.po
+++ b/framework/doc/locales/zh_Hans/LC_MESSAGES/framework-docs.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Flower main\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-11-30 00:31+0000\n"
+"POT-Creation-Date: 2024-12-09 00:34+0000\n"
"PO-Revision-Date: 2024-06-12 10:09+0000\n"
"Last-Translator: Yan Gao \n"
"Language: zh_Hans\n"
@@ -6152,6 +6152,7 @@ msgid ""
msgstr ""
#: ../../source/how-to-implement-fedbn.rst:99
+#: ../../source/how-to-run-flower-on-azure.rst:217
msgid "Next Steps"
msgstr "下一步工作"
@@ -6621,6 +6622,303 @@ msgid ""
"should be installed with the ``simulation`` extra:"
msgstr "对于使用虚拟客户端引擎的模拟,`flwr-nightly`应与`simulation`一起安装:"
+#: ../../source/how-to-run-flower-on-azure.rst:18
+#, fuzzy
+msgid "Run Flower on Azure"
+msgstr "Flower 服务器。"
+
+#: ../../source/how-to-run-flower-on-azure.rst:22
+msgid ""
+"There are many ways to deploy Flower on Microst Azure. The instructions "
+"provided in this guide is just a basic walkthrough, step-by-step guide on"
+" how to quickly setup and run a Flower application on a Federated "
+"Learning environment on Microst Azure."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:26
+msgid ""
+"In this how-to guide, we want to create a Federated Learning environment "
+"on Microst Azure using three Virtual Machines (VMs). From the three "
+"machines, one machine will be used as the Federation server and two as "
+"the Federation clients. Our goal is to create a Flower federation on "
+"Microst Azure where we can run Flower apps from our local machine, e.g., "
+"laptop."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:32
+msgid ""
+"On the Federation server VM we will deploy the long-running Flower server"
+" (``SuperLink``) and on the two Federation client VMs we will deploy the "
+"long-running Flower client (``SuperNode``). For more details For more "
+"details regarding the ``SuperLink`` and ``SuperNode`` concepts, please "
+"see the |flower_architecture_link|_ ."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:38
+msgid "Azure VMs"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:40
+msgid ""
+"First we need to create the three VMs configure their Python "
+"environments, and inbound networking rules to allow cross-VM "
+"communication."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:44
+msgid "VM Create"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:46
+msgid ""
+"Assuming we are already inside the Microst Azure portal, we navigate to "
+"the ``Create`` page and we select ``Azure virtual machine``. In the new "
+"page, for each VM we edit the properties as follows:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:55
+msgid "**Virtual machine name**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:56
+msgid ""
+"for server machine we can use ``flower-server`` and for clients, "
+"``flower-client-1`` and ``flower-client-2``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:58
+#, fuzzy
+msgid "**Image**"
+msgstr "**进行修改**"
+
+#: ../../source/how-to-run-flower-on-azure.rst:59
+msgid "in this guide, we use ``Ubuntu Server 24.04 - x64 Gen2 LTS``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:60
+#, fuzzy
+msgid "**Size**"
+msgstr "**success**"
+
+#: ../../source/how-to-run-flower-on-azure.rst:61
+msgid "in this guide, we use ``Standard_D2s_v3 - 2 vcpus, 8GiB memory``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:65
+msgid "For resource group, we can create a new group and assign it to all VMs."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:67
+msgid ""
+"When each VM instance has been created the portal will allow you to "
+"download the public key (.pem) of each instance. Make sure you save this "
+"key in safe place and change its permissions to user read only, i.e., run"
+" the ``chmod 400 `` command for every .pem file."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:72
+msgid ""
+"Once all three VMs are created then navigate to the overview page where "
+"all three VMs are listed and open every other VM, and copy its Public IP "
+"address. Using the Public IP address and the public key (after changing "
+"the permissions), login to the instances from our local machine by "
+"running the following command (by default Azure creates the "
+"``azureuser``):"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:83
+msgid "VM Networking"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:85
+msgid ""
+"During the execution of the Flower application, the server VM "
+"(``SuperLink``) will be responsible to orchestrate the execution of the "
+"application across the client VMs (``SuperNode``). When the SuperLink "
+"server starts, by default, it listens to the following ports: ``{9092, "
+"9093}``. Port `9092` is used to communicate with the Federation clients "
+"(``SuperNode``) and port ``9093`` to receive and execute Flower "
+"applications."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:92
+msgid ""
+"Therefore, to enable this communication we need to allow inbound traffic "
+"to the server VM instance. To achieve this, we need to navigate to the "
+"Networking page of the server VM in the Microsoft Azure portal. There, we"
+" will click the ``Add inbound port rule``. In the new window that "
+"appears, we edit the rule properties as follows:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:97
+msgid "The rest of the fields can be left at their default values."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:104
+#: ../../source/how-to-run-flower-on-azure.rst:145
+#, fuzzy
+msgid "**Source**"
+msgstr "**success**"
+
+#: ../../source/how-to-run-flower-on-azure.rst:105
+msgid "``IP Addresses``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:106
+#: ../../source/how-to-run-flower-on-azure.rst:133
+msgid "**Source IP addresses/CIDR ranges**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:107
+msgid "add client VMs' Public IP (separated by comma)"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:108
+#, fuzzy
+msgid "**Destination**"
+msgstr "停用"
+
+#: ../../source/how-to-run-flower-on-azure.rst:109
+#: ../../source/how-to-run-flower-on-azure.rst:146
+#, fuzzy
+msgid "``Any``"
+msgstr "``FLWR_VERSION``"
+
+#: ../../source/how-to-run-flower-on-azure.rst:110
+#, fuzzy
+msgid "**Service**"
+msgstr "flower-superlink"
+
+#: ../../source/how-to-run-flower-on-azure.rst:111
+#, fuzzy
+msgid "``custom``"
+msgstr "``UBUNTU_VERSION``"
+
+#: ../../source/how-to-run-flower-on-azure.rst:112
+#: ../../source/how-to-run-flower-on-azure.rst:135
+#: ../../source/how-to-run-flower-on-azure.rst:147
+msgid "**Destination port ranges**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:113
+msgid "``9092``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:114
+msgid "**Protocol**"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:115
+#, fuzzy
+msgid "``TCP``"
+msgstr "配置日志记录"
+
+#: ../../source/how-to-run-flower-on-azure.rst:117
+msgid ""
+"Finally, we need to also open port 9093 to allow receiving and executing "
+"incoming application requests. To enable this we just need to repeat the "
+"steps above, i.e., create a new inbound rule, where for port range we "
+"assign port 9093. If we already know the Public IP from which our local "
+"machine (e.g., laptop) will be submitting applications to the Azure "
+"cluster, then we just need to specify the Source IP address/CIDR range. "
+"However, if we want to keep the port widely open we simply need to change"
+" source to ``Any``."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:125
+msgid ""
+"To be more precise, if we know the Public IP of our machine, then we make"
+" the following changes:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:134
+msgid "add machine's Public IP"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:136
+#: ../../source/how-to-run-flower-on-azure.rst:148
+msgid "``9093``"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:138
+msgid "Otherwise, we change the properties as follows:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:151
+#, fuzzy
+msgid "Flower Environment"
+msgstr "创建/删除虚拟环境"
+
+#: ../../source/how-to-run-flower-on-azure.rst:153
+msgid ""
+"Assuming we have been able to login to each VM, and create a Python "
+"environment with Flower and all its dependencies installed (``pip install"
+" flwr``), we can create a Flower application by running the ``flwr new`` "
+"command. The console will then prompt us to give a name to the project, "
+"e.g., ``flwr_azure_test``, the name of the author and select the type of "
+"the Flower Framework we want to run, e.g., ``numpy``."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:161
+msgid ""
+"An alternative approach would be to use Docker in each VM, with each "
+"image containing the necessary environment and dependencies. For more "
+"details please refer to the |flower_docker_index|_ guide."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:166
+#, fuzzy
+msgid "Server Initialization"
+msgstr "验证安装"
+
+#: ../../source/how-to-run-flower-on-azure.rst:168
+msgid ""
+"After configuring the Flower application environment, we proceed by "
+"starting the Flower long-running processes (i.e., ``SuperLink`` and "
+"``SuperNode``) at each VM instance. In particular, we need to run the "
+"following commands, first in the server (``SuperLink``) and then at each "
+"client (``SuperNode``)."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:175
+msgid ""
+"To enable authentication and encrypted communication during the execution"
+" lifecycle of the Flower application, please have a look at the following"
+" resources: |authenticate_supernodes|_, |enable_tls_connections|_"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:197
+#, fuzzy
+msgid "Run Flower App"
+msgstr "Flower 服务器。"
+
+#: ../../source/how-to-run-flower-on-azure.rst:199
+msgid ""
+"Finally, after all running Flower processes have been initialized on the "
+"Microsoft Azure cluster, in our local machine, we first need to install "
+"Flower and can create a project with a similar structure as the one we "
+"have in the server and the clients, or copy the project structure from "
+"one of them. Once we have the project locally, we can open the "
+"``pyproject.toml`` file, and then add the following sections:"
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:214
+msgid "Then from our local machine we need to run ``flwr run . my-federation``."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:221
+msgid ""
+"This guide is not suitable for production environments due to missing "
+"authentication and TLS security."
+msgstr ""
+
+#: ../../source/how-to-run-flower-on-azure.rst:224
+msgid ""
+"To enable authentication and establish secure connections, please refer "
+"to the following resources: |authenticate_supernodes|_, "
+"|enable_tls_connections|_"
+msgstr ""
+
#: ../../source/how-to-run-simulations.rst:22
msgid "Run simulations"
msgstr "运行模拟"
@@ -8470,7 +8768,7 @@ msgstr "快速入门教程"
msgid "How-to guides"
msgstr "操作指南"
-#: ../../source/index.rst:107 ../../source/index.rst:112
+#: ../../source/index.rst:108 ../../source/index.rst:113
msgid "Explanations"
msgstr "说明"
@@ -8478,23 +8776,23 @@ msgstr "说明"
msgid "API reference"
msgstr "应用程序接口参考"
-#: ../../source/index.rst:138
+#: ../../source/index.rst:139
msgid "Reference docs"
msgstr "参考文档"
-#: ../../source/index.rst:153
+#: ../../source/index.rst:154
msgid "Contributor tutorials"
msgstr "贡献者教程"
-#: ../../source/index.rst:160
+#: ../../source/index.rst:161
msgid "Contributor how-to guides"
msgstr "投稿指南"
-#: ../../source/index.rst:172
+#: ../../source/index.rst:173
msgid "Contributor explanations"
msgstr "贡献者解释"
-#: ../../source/index.rst:178
+#: ../../source/index.rst:179
msgid "Contributor references"
msgstr "贡献者参考资料"
@@ -8591,35 +8889,35 @@ msgid ""
"specific goal."
msgstr "以问题为导向的 \"如何做 \"指南逐步展示如何实现特定目标。"
-#: ../../source/index.rst:109
+#: ../../source/index.rst:110
msgid ""
"Understanding-oriented concept guides explain and discuss key topics and "
"underlying ideas behind Flower and collaborative AI."
msgstr "以理解为导向的概念指南解释并讨论了Flower和协作式人工智能背后的关键主题和基本思想。"
-#: ../../source/index.rst:121
+#: ../../source/index.rst:122
msgid "References"
msgstr "参考资料"
-#: ../../source/index.rst:123
+#: ../../source/index.rst:124
msgid "Information-oriented API reference and other reference material."
msgstr "以信息为导向的 API 参考资料和其他参考资料。"
-#: ../../source/index.rst:132::1
+#: ../../source/index.rst:133::1
#, fuzzy
msgid ":py:obj:`flwr `\\"
msgstr ":py:obj:`flwr `\\"
-#: ../../source/index.rst:132::1 flwr:1 of
+#: ../../source/index.rst:133::1 flwr:1 of
#, fuzzy
msgid "Flower main package."
msgstr "Flower 主包装。"
-#: ../../source/index.rst:148
+#: ../../source/index.rst:149
msgid "Contributor docs"
msgstr "贡献者文档"
-#: ../../source/index.rst:150
+#: ../../source/index.rst:151
msgid ""
"The Flower community welcomes contributions. The following docs are "
"intended to help along the way."
@@ -8728,7 +9026,7 @@ msgstr ""
msgid "Arguments"
msgstr "构建文档"
-#: ../../flwr install:1 log:1 ls:1 new:1 run:1
+#: ../../flwr install:1 log:1 ls:1 new:1 run:1 stop:1
#, fuzzy
msgid "Optional argument"
msgstr "可选的改进措施"
@@ -8754,7 +9052,7 @@ msgstr "工作流程"
msgid "``True``"
msgstr ""
-#: ../../flwr log:1
+#: ../../flwr log:1 stop:1
#, fuzzy
msgid "Required argument"
msgstr "构建文档"
@@ -8789,12 +9087,21 @@ msgstr "``FLWR_VERSION``"
msgid "Specific run ID to display"
msgstr ""
-#: ../../flwr ls:1
+#: ../../flwr ls:1 run:1
+msgid "Format output using 'default' view or 'json'"
+msgstr ""
+
+#: ../../flwr ls:1 run:1
+#, fuzzy
+msgid "``'default'``"
+msgstr "工作流程"
+
+#: ../../flwr ls:1 stop:1
#, fuzzy
msgid "Path of the Flower project"
msgstr "基础镜像的存储库名称。"
-#: ../../flwr ls:1
+#: ../../flwr ls:1 stop:1
msgid "Name of the federation"
msgstr ""
@@ -8863,6 +9170,15 @@ msgstr "基础镜像的存储库名称。"
msgid "Name of the federation to run the app on."
msgstr ""
+#: ../../flwr stop:1
+msgid "Stop a run."
+msgstr ""
+
+#: ../../flwr stop:1
+#, fuzzy
+msgid "The Flower run ID to stop"
+msgstr "加入 Flower 社区"
+
#: ../../source/ref-api-cli.rst:19
#, fuzzy
msgid "``flower-superlink``"
@@ -29806,7 +30122,7 @@ msgid ""
msgstr "在机器学习中,我们有一个模型和数据。模型可以是一个神经网络(如图所示),也可以是其他东西,比如经典的线性回归。"
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:41
-msgid "|80152fa658904be08c849b4a594b76e1|"
+msgid "|6102f514742c4211b093aae3a5a74e51|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:109
@@ -29821,7 +30137,7 @@ msgid ""
msgstr "我们使用数据来训练模型,以完成一项有用的任务。任务可以是检测图像中的物体、转录音频或玩围棋等游戏。"
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:53
-msgid "|35b60a1068f944ce937ac2988661aad5|"
+msgid "|24080db3b13d4b0c8546096de73ac82a|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:111
@@ -29845,7 +30161,7 @@ msgid ""
msgstr "它源于智能手机上用户与应用程序的交互、汽车上传感器数据的收集、笔记本电脑上键盘输入的接收,或者智能扬声器上某人试着唱的歌。"
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:67
-msgid "|efead7f2c2224b60b7b42705004c15e6|"
+msgid "|9087a1f0e9ab41c083f5209a3f17e600|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:113
@@ -29863,7 +30179,7 @@ msgstr ""
"\"通常不只是一个地方,而是很多地方。它可能是多个运行同一应用程序的设备。但也可能是多个组织,都在为同一任务生成数据。"
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:79
-msgid "|5421fee4e7ed450c903cbcd8a9d8a5d4|"
+msgid "|a5d1853a0b3c44d4bdd408d15a89e7ac|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:115
@@ -29880,7 +30196,7 @@ msgid ""
msgstr "因此,要使用机器学习或任何类型的数据分析,过去使用的方法是在中央服务器上收集所有数据。这个服务器可以在数据中心的某个地方,也可以在云端的某个地方。"
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:91
-msgid "|811fcf35e9214bd5b4e613e41f7c0a27|"
+msgid "|8e6e9164d7414c39bf37f67e2fda59bd|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:117
@@ -29895,7 +30211,7 @@ msgid ""
msgstr "一旦所有数据都收集到一处,我们最终就可以使用机器学习算法在数据上训练我们的模型。这就是我们基本上一直依赖的机器学习方法。"
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:103
-msgid "|e61d38b0948f4c07a7257755f3799b54|"
+msgid "|e8b1d08849514de1b09fee325db970d0|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:119
@@ -29916,7 +30232,7 @@ msgid ""
msgstr "我们刚刚看到的经典机器学习方法可以在某些情况下使用。很好的例子包括对假日照片进行分类或分析网络流量。在这些案例中,所有数据自然都可以在中央服务器上获得。"
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:138
-msgid "|e82c29351e2e480087c61b939eb7c041|"
+msgid "|ca0b3cb207164665b5bef1d869c37dff|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:173
@@ -29931,7 +30247,7 @@ msgid ""
msgstr "但这种方法并不适用于许多其他情况。例如,集中服务器上没有数据,或者一台服务器上的数据不足以训练出一个好的模型。"
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:150
-msgid "|21ca40f4fb1a405c89098fd1d24880a4|"
+msgid "|977cb114b97047329a7bb908afbac2cd|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:175
@@ -30091,7 +30407,7 @@ msgid ""
msgstr "我们首先在服务器上初始化模型。这与经典的集中式学习完全相同:我们随机或从先前保存的检查点初始化模型参数。"
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:210
-msgid "|1351a2629c2c46d981b13b19f9fa45f0|"
+msgid "|9f497b02d2634af2925a65244cc0eb1b|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:307
@@ -30116,7 +30432,7 @@ msgid ""
msgstr "接下来,我们会将全局模型的参数发送到连接的客户端节点(如智能手机等边缘设备或企业的服务器)。这是为了确保每个参与节点都使用相同的模型参数开始本地训练。我们通常只使用几个连接节点,而不是所有节点。这样做的原因是,选择越来越多的客户端节点会导致收益递减。"
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:225
-msgid "|124c2c188b994c7ab1c862cfdb326923|"
+msgid "|938ae2cd4fae49ce9292e6e2d9bd880d|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:309
@@ -30142,7 +30458,7 @@ msgstr ""
"(mini-batches)。"
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:240
-msgid "|42e1951c36f2406e93c7ae0ec5b299f9|"
+msgid "|47cd7c6cb4094846833faff5b05e0d46|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:311
@@ -30165,7 +30481,7 @@ msgid ""
msgstr "经过本地训练后,每个客户节点最初收到的模型参数都会略有不同。参数之所以不同,是因为每个客户端节点的本地数据集中都有不同的数据。然后,客户端节点将这些模型更新发回服务器。它们发送的模型更新既可以是完整的模型参数,也可以只是本地训练过程中积累的梯度。"
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:255
-msgid "|ec637b8a84234d068995ee1ccb2dd3b1|"
+msgid "|c90d6613b0a34a42bf3023ca5a81c8e2|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:313
@@ -30212,7 +30528,7 @@ msgstr ""
" 100 个示例的 10 倍。"
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:273
-msgid "|5bceb9d16b1a4d2db18d8a5b2f0cacb3|"
+msgid "|91c29c3c9b1b411590de3983d94ed76a|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:315
@@ -30320,7 +30636,7 @@ msgstr ""
"为联邦学习、分析和评估提供了一种统一的方法。它允许用户联邦化任何工作负载、任何 ML 框架和任何编程语言。"
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:334
-msgid "|502b10044e864ca2b15282a393ab7faf|"
+msgid "|e4adf0f92ebf4c3d9e6e64355204f897|"
msgstr ""
#: ../../source/tutorial-series-what-is-federated-learning.ipynb:340
@@ -37825,3 +38141,87 @@ msgstr ""
#~ msgid "|7bfcfcb57ae5403f8e18486f45ca48b4|"
#~ msgstr ""
+#~ msgid "|80152fa658904be08c849b4a594b76e1|"
+#~ msgstr ""
+
+#~ msgid "|35b60a1068f944ce937ac2988661aad5|"
+#~ msgstr ""
+
+#~ msgid "|efead7f2c2224b60b7b42705004c15e6|"
+#~ msgstr ""
+
+#~ msgid "|5421fee4e7ed450c903cbcd8a9d8a5d4|"
+#~ msgstr ""
+
+#~ msgid "|811fcf35e9214bd5b4e613e41f7c0a27|"
+#~ msgstr ""
+
+#~ msgid "|e61d38b0948f4c07a7257755f3799b54|"
+#~ msgstr ""
+
+#~ msgid "|e82c29351e2e480087c61b939eb7c041|"
+#~ msgstr ""
+
+#~ msgid "|21ca40f4fb1a405c89098fd1d24880a4|"
+#~ msgstr ""
+
+#~ msgid "|1351a2629c2c46d981b13b19f9fa45f0|"
+#~ msgstr ""
+
+#~ msgid "|124c2c188b994c7ab1c862cfdb326923|"
+#~ msgstr ""
+
+#~ msgid "|42e1951c36f2406e93c7ae0ec5b299f9|"
+#~ msgstr ""
+
+#~ msgid "|ec637b8a84234d068995ee1ccb2dd3b1|"
+#~ msgstr ""
+
+#~ msgid "|5bceb9d16b1a4d2db18d8a5b2f0cacb3|"
+#~ msgstr ""
+
+#~ msgid "|502b10044e864ca2b15282a393ab7faf|"
+#~ msgstr ""
+
+#~ msgid "|dbd9718fb89b4e219a54b72b6eecf502|"
+#~ msgstr ""
+
+#~ msgid "|18916394e69e4fdaafbb56f7bba690d3|"
+#~ msgstr ""
+
+#~ msgid "|20988fac7e2e497ea15f786730279299|"
+#~ msgstr ""
+
+#~ msgid "|5d612ca92b074af4a034bf4c0f498d2e|"
+#~ msgstr ""
+
+#~ msgid "|6721ae86e3f348e2bce58d358a2ee79c|"
+#~ msgstr ""
+
+#~ msgid "|d255f931abb44ca8a7eba0d90dfcf6a1|"
+#~ msgstr ""
+
+#~ msgid "|f98da3b55eca452390fb33429a7d7ebe|"
+#~ msgstr ""
+
+#~ msgid "|10dc1f84d36b432e95d7f61fcd25a701|"
+#~ msgstr ""
+
+#~ msgid "|f963159664b54e40a64a7f1c19414349|"
+#~ msgstr ""
+
+#~ msgid "|3647c3b36916415ab40c1597a3ddd4b0|"
+#~ msgstr ""
+
+#~ msgid "|a3c07b2cf1214488a99267b3757d9426|"
+#~ msgstr ""
+
+#~ msgid "|2f6bce3bfacf4c85ac3a7e0fd1d5aa84|"
+#~ msgstr ""
+
+#~ msgid "|19ebdce05cab40d791a2117f743290c3|"
+#~ msgstr ""
+
+#~ msgid "|dd729f8776d640ffb136545f3f26210f|"
+#~ msgstr ""
+
diff --git a/doc/locales/zh_Hans/LC_MESSAGES/sphinx.po b/framework/doc/locales/zh_Hans/LC_MESSAGES/sphinx.po
similarity index 100%
rename from doc/locales/zh_Hans/LC_MESSAGES/sphinx.po
rename to framework/doc/locales/zh_Hans/LC_MESSAGES/sphinx.po
diff --git a/doc/make.bat b/framework/doc/make.bat
similarity index 100%
rename from doc/make.bat
rename to framework/doc/make.bat
diff --git a/datasets/doc/source/.gitignore b/framework/doc/source/.gitignore
similarity index 100%
rename from datasets/doc/source/.gitignore
rename to framework/doc/source/.gitignore
diff --git a/doc/source/_static/DP/CDP.png b/framework/doc/source/_static/DP/CDP.png
similarity index 100%
rename from doc/source/_static/DP/CDP.png
rename to framework/doc/source/_static/DP/CDP.png
diff --git a/doc/source/_static/DP/LDP.png b/framework/doc/source/_static/DP/LDP.png
similarity index 100%
rename from doc/source/_static/DP/LDP.png
rename to framework/doc/source/_static/DP/LDP.png
diff --git a/doc/source/_static/DP/clientsideCDP.png b/framework/doc/source/_static/DP/clientsideCDP.png
similarity index 100%
rename from doc/source/_static/DP/clientsideCDP.png
rename to framework/doc/source/_static/DP/clientsideCDP.png
diff --git a/doc/source/_static/DP/clipping.png b/framework/doc/source/_static/DP/clipping.png
similarity index 100%
rename from doc/source/_static/DP/clipping.png
rename to framework/doc/source/_static/DP/clipping.png
diff --git a/doc/source/_static/DP/dp-intro.png b/framework/doc/source/_static/DP/dp-intro.png
similarity index 100%
rename from doc/source/_static/DP/dp-intro.png
rename to framework/doc/source/_static/DP/dp-intro.png
diff --git a/doc/source/_static/DP/localdp.png b/framework/doc/source/_static/DP/localdp.png
similarity index 100%
rename from doc/source/_static/DP/localdp.png
rename to framework/doc/source/_static/DP/localdp.png
diff --git a/doc/source/_static/DP/serversideCDP.png b/framework/doc/source/_static/DP/serversideCDP.png
similarity index 100%
rename from doc/source/_static/DP/serversideCDP.png
rename to framework/doc/source/_static/DP/serversideCDP.png
diff --git a/doc/source/_static/changes_requested.png b/framework/doc/source/_static/changes_requested.png
similarity index 100%
rename from doc/source/_static/changes_requested.png
rename to framework/doc/source/_static/changes_requested.png
diff --git a/doc/source/_static/cloning_fork.png b/framework/doc/source/_static/cloning_fork.png
similarity index 100%
rename from doc/source/_static/cloning_fork.png
rename to framework/doc/source/_static/cloning_fork.png
diff --git a/doc/source/_static/cloning_repo.png b/framework/doc/source/_static/cloning_repo.png
similarity index 100%
rename from doc/source/_static/cloning_repo.png
rename to framework/doc/source/_static/cloning_repo.png
diff --git a/doc/source/_static/compare_and_pr.png b/framework/doc/source/_static/compare_and_pr.png
similarity index 100%
rename from doc/source/_static/compare_and_pr.png
rename to framework/doc/source/_static/compare_and_pr.png
diff --git a/doc/source/_static/creating_pr.png b/framework/doc/source/_static/creating_pr.png
similarity index 100%
rename from doc/source/_static/creating_pr.png
rename to framework/doc/source/_static/creating_pr.png
diff --git a/doc/source/_static/custom.css b/framework/doc/source/_static/custom.css
similarity index 100%
rename from doc/source/_static/custom.css
rename to framework/doc/source/_static/custom.css
diff --git a/doc/source/_static/draft_pr.png b/framework/doc/source/_static/draft_pr.png
similarity index 100%
rename from doc/source/_static/draft_pr.png
rename to framework/doc/source/_static/draft_pr.png
diff --git a/doc/source/_static/favicon.ico b/framework/doc/source/_static/favicon.ico
similarity index 100%
rename from doc/source/_static/favicon.ico
rename to framework/doc/source/_static/favicon.ico
diff --git a/doc/source/_static/flower-actors.drawio.png b/framework/doc/source/_static/flower-actors.drawio.png
similarity index 100%
rename from doc/source/_static/flower-actors.drawio.png
rename to framework/doc/source/_static/flower-actors.drawio.png
diff --git a/doc/source/_static/flower-architecture-basic-architecture.svg b/framework/doc/source/_static/flower-architecture-basic-architecture.svg
similarity index 100%
rename from doc/source/_static/flower-architecture-basic-architecture.svg
rename to framework/doc/source/_static/flower-architecture-basic-architecture.svg
diff --git a/doc/source/_static/flower-architecture-hub-and-spoke.svg b/framework/doc/source/_static/flower-architecture-hub-and-spoke.svg
similarity index 100%
rename from doc/source/_static/flower-architecture-hub-and-spoke.svg
rename to framework/doc/source/_static/flower-architecture-hub-and-spoke.svg
diff --git a/doc/source/_static/flower-architecture-multi-run-1.svg b/framework/doc/source/_static/flower-architecture-multi-run-1.svg
similarity index 100%
rename from doc/source/_static/flower-architecture-multi-run-1.svg
rename to framework/doc/source/_static/flower-architecture-multi-run-1.svg
diff --git a/doc/source/_static/flower-architecture-multi-run-2.svg b/framework/doc/source/_static/flower-architecture-multi-run-2.svg
similarity index 100%
rename from doc/source/_static/flower-architecture-multi-run-2.svg
rename to framework/doc/source/_static/flower-architecture-multi-run-2.svg
diff --git a/doc/source/_static/flower-architecture-multi-run.svg b/framework/doc/source/_static/flower-architecture-multi-run.svg
similarity index 100%
rename from doc/source/_static/flower-architecture-multi-run.svg
rename to framework/doc/source/_static/flower-architecture-multi-run.svg
diff --git a/doc/source/_static/flower-logo.png b/framework/doc/source/_static/flower-logo.png
similarity index 100%
rename from doc/source/_static/flower-logo.png
rename to framework/doc/source/_static/flower-logo.png
diff --git a/doc/source/_static/fork_button.png b/framework/doc/source/_static/fork_button.png
similarity index 100%
rename from doc/source/_static/fork_button.png
rename to framework/doc/source/_static/fork_button.png
diff --git a/doc/source/_static/fork_link.png b/framework/doc/source/_static/fork_link.png
similarity index 100%
rename from doc/source/_static/fork_link.png
rename to framework/doc/source/_static/fork_link.png
diff --git a/doc/source/_static/forking-repo.png b/framework/doc/source/_static/forking-repo.png
similarity index 100%
rename from doc/source/_static/forking-repo.png
rename to framework/doc/source/_static/forking-repo.png
diff --git a/doc/source/_static/github_schema.png b/framework/doc/source/_static/github_schema.png
similarity index 100%
rename from doc/source/_static/github_schema.png
rename to framework/doc/source/_static/github_schema.png
diff --git a/doc/source/_static/make_changes.png b/framework/doc/source/_static/make_changes.png
similarity index 100%
rename from doc/source/_static/make_changes.png
rename to framework/doc/source/_static/make_changes.png
diff --git a/doc/source/_static/merging_branch.png b/framework/doc/source/_static/merging_branch.png
similarity index 100%
rename from doc/source/_static/merging_branch.png
rename to framework/doc/source/_static/merging_branch.png
diff --git a/doc/source/_static/merging_pr.png b/framework/doc/source/_static/merging_pr.png
similarity index 100%
rename from doc/source/_static/merging_pr.png
rename to framework/doc/source/_static/merging_pr.png
diff --git a/doc/source/_static/opened_pr.png b/framework/doc/source/_static/opened_pr.png
similarity index 100%
rename from doc/source/_static/opened_pr.png
rename to framework/doc/source/_static/opened_pr.png
diff --git a/doc/source/_static/opening-pr.png b/framework/doc/source/_static/opening-pr.png
similarity index 100%
rename from doc/source/_static/opening-pr.png
rename to framework/doc/source/_static/opening-pr.png
diff --git a/doc/source/_static/resolve_conv.png b/framework/doc/source/_static/resolve_conv.png
similarity index 100%
rename from doc/source/_static/resolve_conv.png
rename to framework/doc/source/_static/resolve_conv.png
diff --git a/doc/source/_static/tutorial/central-model-training.png b/framework/doc/source/_static/tutorial/central-model-training.png
similarity index 100%
rename from doc/source/_static/tutorial/central-model-training.png
rename to framework/doc/source/_static/tutorial/central-model-training.png
diff --git a/doc/source/_static/tutorial/centralized-impossible.png b/framework/doc/source/_static/tutorial/centralized-impossible.png
similarity index 100%
rename from doc/source/_static/tutorial/centralized-impossible.png
rename to framework/doc/source/_static/tutorial/centralized-impossible.png
diff --git a/doc/source/_static/tutorial/centralized-possible.png b/framework/doc/source/_static/tutorial/centralized-possible.png
similarity index 100%
rename from doc/source/_static/tutorial/centralized-possible.png
rename to framework/doc/source/_static/tutorial/centralized-possible.png
diff --git a/doc/source/_static/tutorial/collect-data.png b/framework/doc/source/_static/tutorial/collect-data.png
similarity index 100%
rename from doc/source/_static/tutorial/collect-data.png
rename to framework/doc/source/_static/tutorial/collect-data.png
diff --git a/doc/source/_static/tutorial/data-on-phone.png b/framework/doc/source/_static/tutorial/data-on-phone.png
similarity index 100%
rename from doc/source/_static/tutorial/data-on-phone.png
rename to framework/doc/source/_static/tutorial/data-on-phone.png
diff --git a/doc/source/_static/tutorial/fl-aggregate-model-updates.png b/framework/doc/source/_static/tutorial/fl-aggregate-model-updates.png
similarity index 100%
rename from doc/source/_static/tutorial/fl-aggregate-model-updates.png
rename to framework/doc/source/_static/tutorial/fl-aggregate-model-updates.png
diff --git a/doc/source/_static/tutorial/fl-initialize-global-model.png b/framework/doc/source/_static/tutorial/fl-initialize-global-model.png
similarity index 100%
rename from doc/source/_static/tutorial/fl-initialize-global-model.png
rename to framework/doc/source/_static/tutorial/fl-initialize-global-model.png
diff --git a/doc/source/_static/tutorial/fl-local-training.png b/framework/doc/source/_static/tutorial/fl-local-training.png
similarity index 100%
rename from doc/source/_static/tutorial/fl-local-training.png
rename to framework/doc/source/_static/tutorial/fl-local-training.png
diff --git a/doc/source/_static/tutorial/fl-send-global-model.png b/framework/doc/source/_static/tutorial/fl-send-global-model.png
similarity index 100%
rename from doc/source/_static/tutorial/fl-send-global-model.png
rename to framework/doc/source/_static/tutorial/fl-send-global-model.png
diff --git a/doc/source/_static/tutorial/fl-send-model-updates.png b/framework/doc/source/_static/tutorial/fl-send-model-updates.png
similarity index 100%
rename from doc/source/_static/tutorial/fl-send-model-updates.png
rename to framework/doc/source/_static/tutorial/fl-send-model-updates.png
diff --git a/doc/source/_static/tutorial/flower-any.jpeg b/framework/doc/source/_static/tutorial/flower-any.jpeg
similarity index 100%
rename from doc/source/_static/tutorial/flower-any.jpeg
rename to framework/doc/source/_static/tutorial/flower-any.jpeg
diff --git a/doc/source/_static/tutorial/many-devices-with-data.png b/framework/doc/source/_static/tutorial/many-devices-with-data.png
similarity index 100%
rename from doc/source/_static/tutorial/many-devices-with-data.png
rename to framework/doc/source/_static/tutorial/many-devices-with-data.png
diff --git a/doc/source/_static/tutorial/model-and-data.png b/framework/doc/source/_static/tutorial/model-and-data.png
similarity index 100%
rename from doc/source/_static/tutorial/model-and-data.png
rename to framework/doc/source/_static/tutorial/model-and-data.png
diff --git a/doc/source/_static/tutorial/train-model.png b/framework/doc/source/_static/tutorial/train-model.png
similarity index 100%
rename from doc/source/_static/tutorial/train-model.png
rename to framework/doc/source/_static/tutorial/train-model.png
diff --git a/doc/source/_static/upstream_link.png b/framework/doc/source/_static/upstream_link.png
similarity index 100%
rename from doc/source/_static/upstream_link.png
rename to framework/doc/source/_static/upstream_link.png
diff --git a/doc/source/_static/weblate_interface.png b/framework/doc/source/_static/weblate_interface.png
similarity index 100%
rename from doc/source/_static/weblate_interface.png
rename to framework/doc/source/_static/weblate_interface.png
diff --git a/doc/source/_static/weblate_status.png b/framework/doc/source/_static/weblate_status.png
similarity index 100%
rename from doc/source/_static/weblate_status.png
rename to framework/doc/source/_static/weblate_status.png
diff --git a/datasets/doc/source/_templates/autosummary/base.rst b/framework/doc/source/_templates/autosummary/base.rst
similarity index 100%
rename from datasets/doc/source/_templates/autosummary/base.rst
rename to framework/doc/source/_templates/autosummary/base.rst
diff --git a/datasets/doc/source/_templates/autosummary/class.rst b/framework/doc/source/_templates/autosummary/class.rst
similarity index 100%
rename from datasets/doc/source/_templates/autosummary/class.rst
rename to framework/doc/source/_templates/autosummary/class.rst
diff --git a/datasets/doc/source/_templates/autosummary/module.rst b/framework/doc/source/_templates/autosummary/module.rst
similarity index 100%
rename from datasets/doc/source/_templates/autosummary/module.rst
rename to framework/doc/source/_templates/autosummary/module.rst
diff --git a/doc/source/_templates/base.html b/framework/doc/source/_templates/base.html
similarity index 100%
rename from doc/source/_templates/base.html
rename to framework/doc/source/_templates/base.html
diff --git a/doc/source/_templates/sidebar/brand.html b/framework/doc/source/_templates/sidebar/brand.html
similarity index 100%
rename from doc/source/_templates/sidebar/brand.html
rename to framework/doc/source/_templates/sidebar/brand.html
diff --git a/doc/source/_templates/sidebar/lang.html b/framework/doc/source/_templates/sidebar/lang.html
similarity index 100%
rename from doc/source/_templates/sidebar/lang.html
rename to framework/doc/source/_templates/sidebar/lang.html
diff --git a/datasets/doc/source/_templates/sidebar/search.html b/framework/doc/source/_templates/sidebar/search.html
similarity index 100%
rename from datasets/doc/source/_templates/sidebar/search.html
rename to framework/doc/source/_templates/sidebar/search.html
diff --git a/doc/source/_templates/sidebar/versioning.html b/framework/doc/source/_templates/sidebar/versioning.html
similarity index 100%
rename from doc/source/_templates/sidebar/versioning.html
rename to framework/doc/source/_templates/sidebar/versioning.html
diff --git a/doc/source/conf.py b/framework/doc/source/conf.py
similarity index 100%
rename from doc/source/conf.py
rename to framework/doc/source/conf.py
diff --git a/doc/source/contributor-explanation-public-and-private-apis.rst b/framework/doc/source/contributor-explanation-public-and-private-apis.rst
similarity index 100%
rename from doc/source/contributor-explanation-public-and-private-apis.rst
rename to framework/doc/source/contributor-explanation-public-and-private-apis.rst
diff --git a/doc/source/contributor-how-to-build-docker-images.rst b/framework/doc/source/contributor-how-to-build-docker-images.rst
similarity index 100%
rename from doc/source/contributor-how-to-build-docker-images.rst
rename to framework/doc/source/contributor-how-to-build-docker-images.rst
diff --git a/doc/source/contributor-how-to-contribute-translations.rst b/framework/doc/source/contributor-how-to-contribute-translations.rst
similarity index 100%
rename from doc/source/contributor-how-to-contribute-translations.rst
rename to framework/doc/source/contributor-how-to-contribute-translations.rst
diff --git a/doc/source/contributor-how-to-develop-in-vscode-dev-containers.rst b/framework/doc/source/contributor-how-to-develop-in-vscode-dev-containers.rst
similarity index 100%
rename from doc/source/contributor-how-to-develop-in-vscode-dev-containers.rst
rename to framework/doc/source/contributor-how-to-develop-in-vscode-dev-containers.rst
diff --git a/doc/source/contributor-how-to-install-development-versions.rst b/framework/doc/source/contributor-how-to-install-development-versions.rst
similarity index 100%
rename from doc/source/contributor-how-to-install-development-versions.rst
rename to framework/doc/source/contributor-how-to-install-development-versions.rst
diff --git a/doc/source/contributor-how-to-release-flower.rst b/framework/doc/source/contributor-how-to-release-flower.rst
similarity index 100%
rename from doc/source/contributor-how-to-release-flower.rst
rename to framework/doc/source/contributor-how-to-release-flower.rst
diff --git a/doc/source/contributor-how-to-set-up-a-virtual-env.rst b/framework/doc/source/contributor-how-to-set-up-a-virtual-env.rst
similarity index 100%
rename from doc/source/contributor-how-to-set-up-a-virtual-env.rst
rename to framework/doc/source/contributor-how-to-set-up-a-virtual-env.rst
diff --git a/doc/source/contributor-how-to-write-documentation.rst b/framework/doc/source/contributor-how-to-write-documentation.rst
similarity index 100%
rename from doc/source/contributor-how-to-write-documentation.rst
rename to framework/doc/source/contributor-how-to-write-documentation.rst
diff --git a/doc/source/contributor-ref-good-first-contributions.rst b/framework/doc/source/contributor-ref-good-first-contributions.rst
similarity index 100%
rename from doc/source/contributor-ref-good-first-contributions.rst
rename to framework/doc/source/contributor-ref-good-first-contributions.rst
diff --git a/doc/source/contributor-ref-secure-aggregation-protocols.rst b/framework/doc/source/contributor-ref-secure-aggregation-protocols.rst
similarity index 100%
rename from doc/source/contributor-ref-secure-aggregation-protocols.rst
rename to framework/doc/source/contributor-ref-secure-aggregation-protocols.rst
diff --git a/doc/source/contributor-tutorial-contribute-on-github.rst b/framework/doc/source/contributor-tutorial-contribute-on-github.rst
similarity index 100%
rename from doc/source/contributor-tutorial-contribute-on-github.rst
rename to framework/doc/source/contributor-tutorial-contribute-on-github.rst
diff --git a/doc/source/contributor-tutorial-get-started-as-a-contributor.rst b/framework/doc/source/contributor-tutorial-get-started-as-a-contributor.rst
similarity index 100%
rename from doc/source/contributor-tutorial-get-started-as-a-contributor.rst
rename to framework/doc/source/contributor-tutorial-get-started-as-a-contributor.rst
diff --git a/doc/source/docker/enable-tls.rst b/framework/doc/source/docker/enable-tls.rst
similarity index 100%
rename from doc/source/docker/enable-tls.rst
rename to framework/doc/source/docker/enable-tls.rst
diff --git a/doc/source/docker/index.rst b/framework/doc/source/docker/index.rst
similarity index 100%
rename from doc/source/docker/index.rst
rename to framework/doc/source/docker/index.rst
diff --git a/doc/source/docker/persist-superlink-state.rst b/framework/doc/source/docker/persist-superlink-state.rst
similarity index 100%
rename from doc/source/docker/persist-superlink-state.rst
rename to framework/doc/source/docker/persist-superlink-state.rst
diff --git a/doc/source/docker/pin-version.rst b/framework/doc/source/docker/pin-version.rst
similarity index 100%
rename from doc/source/docker/pin-version.rst
rename to framework/doc/source/docker/pin-version.rst
diff --git a/doc/source/docker/run-as-root-user.rst b/framework/doc/source/docker/run-as-root-user.rst
similarity index 100%
rename from doc/source/docker/run-as-root-user.rst
rename to framework/doc/source/docker/run-as-root-user.rst
diff --git a/doc/source/docker/run-as-subprocess.rst b/framework/doc/source/docker/run-as-subprocess.rst
similarity index 100%
rename from doc/source/docker/run-as-subprocess.rst
rename to framework/doc/source/docker/run-as-subprocess.rst
diff --git a/doc/source/docker/run-quickstart-examples-docker-compose.rst b/framework/doc/source/docker/run-quickstart-examples-docker-compose.rst
similarity index 100%
rename from doc/source/docker/run-quickstart-examples-docker-compose.rst
rename to framework/doc/source/docker/run-quickstart-examples-docker-compose.rst
diff --git a/doc/source/docker/set-environment-variables.rst b/framework/doc/source/docker/set-environment-variables.rst
similarity index 100%
rename from doc/source/docker/set-environment-variables.rst
rename to framework/doc/source/docker/set-environment-variables.rst
diff --git a/doc/source/docker/tutorial-deploy-on-multiple-machines.rst b/framework/doc/source/docker/tutorial-deploy-on-multiple-machines.rst
similarity index 100%
rename from doc/source/docker/tutorial-deploy-on-multiple-machines.rst
rename to framework/doc/source/docker/tutorial-deploy-on-multiple-machines.rst
diff --git a/doc/source/docker/tutorial-quickstart-docker-compose.rst b/framework/doc/source/docker/tutorial-quickstart-docker-compose.rst
similarity index 100%
rename from doc/source/docker/tutorial-quickstart-docker-compose.rst
rename to framework/doc/source/docker/tutorial-quickstart-docker-compose.rst
diff --git a/doc/source/docker/tutorial-quickstart-docker.rst b/framework/doc/source/docker/tutorial-quickstart-docker.rst
similarity index 100%
rename from doc/source/docker/tutorial-quickstart-docker.rst
rename to framework/doc/source/docker/tutorial-quickstart-docker.rst
diff --git a/doc/source/docker/use-a-different-version.rst b/framework/doc/source/docker/use-a-different-version.rst
similarity index 100%
rename from doc/source/docker/use-a-different-version.rst
rename to framework/doc/source/docker/use-a-different-version.rst
diff --git a/doc/source/explanation-differential-privacy.rst b/framework/doc/source/explanation-differential-privacy.rst
similarity index 100%
rename from doc/source/explanation-differential-privacy.rst
rename to framework/doc/source/explanation-differential-privacy.rst
diff --git a/doc/source/explanation-federated-evaluation.rst b/framework/doc/source/explanation-federated-evaluation.rst
similarity index 100%
rename from doc/source/explanation-federated-evaluation.rst
rename to framework/doc/source/explanation-federated-evaluation.rst
diff --git a/doc/source/explanation-flower-architecture.rst b/framework/doc/source/explanation-flower-architecture.rst
similarity index 100%
rename from doc/source/explanation-flower-architecture.rst
rename to framework/doc/source/explanation-flower-architecture.rst
diff --git a/doc/source/how-to-aggregate-evaluation-results.rst b/framework/doc/source/how-to-aggregate-evaluation-results.rst
similarity index 100%
rename from doc/source/how-to-aggregate-evaluation-results.rst
rename to framework/doc/source/how-to-aggregate-evaluation-results.rst
diff --git a/doc/source/how-to-authenticate-supernodes.rst b/framework/doc/source/how-to-authenticate-supernodes.rst
similarity index 100%
rename from doc/source/how-to-authenticate-supernodes.rst
rename to framework/doc/source/how-to-authenticate-supernodes.rst
diff --git a/doc/source/how-to-configure-clients.rst b/framework/doc/source/how-to-configure-clients.rst
similarity index 100%
rename from doc/source/how-to-configure-clients.rst
rename to framework/doc/source/how-to-configure-clients.rst
diff --git a/doc/source/how-to-design-stateful-clients.rst b/framework/doc/source/how-to-design-stateful-clients.rst
similarity index 100%
rename from doc/source/how-to-design-stateful-clients.rst
rename to framework/doc/source/how-to-design-stateful-clients.rst
diff --git a/doc/source/how-to-enable-tls-connections.rst b/framework/doc/source/how-to-enable-tls-connections.rst
similarity index 100%
rename from doc/source/how-to-enable-tls-connections.rst
rename to framework/doc/source/how-to-enable-tls-connections.rst
diff --git a/doc/source/how-to-implement-fedbn.rst b/framework/doc/source/how-to-implement-fedbn.rst
similarity index 100%
rename from doc/source/how-to-implement-fedbn.rst
rename to framework/doc/source/how-to-implement-fedbn.rst
diff --git a/doc/source/how-to-implement-strategies.rst b/framework/doc/source/how-to-implement-strategies.rst
similarity index 100%
rename from doc/source/how-to-implement-strategies.rst
rename to framework/doc/source/how-to-implement-strategies.rst
diff --git a/doc/source/how-to-install-flower.rst b/framework/doc/source/how-to-install-flower.rst
similarity index 100%
rename from doc/source/how-to-install-flower.rst
rename to framework/doc/source/how-to-install-flower.rst
diff --git a/doc/source/how-to-run-simulations.rst b/framework/doc/source/how-to-run-simulations.rst
similarity index 100%
rename from doc/source/how-to-run-simulations.rst
rename to framework/doc/source/how-to-run-simulations.rst
diff --git a/doc/source/how-to-save-and-load-model-checkpoints.rst b/framework/doc/source/how-to-save-and-load-model-checkpoints.rst
similarity index 100%
rename from doc/source/how-to-save-and-load-model-checkpoints.rst
rename to framework/doc/source/how-to-save-and-load-model-checkpoints.rst
diff --git a/doc/source/how-to-upgrade-to-flower-1.0.rst b/framework/doc/source/how-to-upgrade-to-flower-1.0.rst
similarity index 100%
rename from doc/source/how-to-upgrade-to-flower-1.0.rst
rename to framework/doc/source/how-to-upgrade-to-flower-1.0.rst
diff --git a/doc/source/how-to-upgrade-to-flower-1.13.rst b/framework/doc/source/how-to-upgrade-to-flower-1.13.rst
similarity index 100%
rename from doc/source/how-to-upgrade-to-flower-1.13.rst
rename to framework/doc/source/how-to-upgrade-to-flower-1.13.rst
diff --git a/doc/source/how-to-use-built-in-mods.rst b/framework/doc/source/how-to-use-built-in-mods.rst
similarity index 100%
rename from doc/source/how-to-use-built-in-mods.rst
rename to framework/doc/source/how-to-use-built-in-mods.rst
diff --git a/doc/source/how-to-use-differential-privacy.rst b/framework/doc/source/how-to-use-differential-privacy.rst
similarity index 100%
rename from doc/source/how-to-use-differential-privacy.rst
rename to framework/doc/source/how-to-use-differential-privacy.rst
diff --git a/doc/source/how-to-use-strategies.rst b/framework/doc/source/how-to-use-strategies.rst
similarity index 100%
rename from doc/source/how-to-use-strategies.rst
rename to framework/doc/source/how-to-use-strategies.rst
diff --git a/doc/source/index.rst b/framework/doc/source/index.rst
similarity index 99%
rename from doc/source/index.rst
rename to framework/doc/source/index.rst
index 8695935acb04..ddb123acd27b 100644
--- a/doc/source/index.rst
+++ b/framework/doc/source/index.rst
@@ -99,6 +99,7 @@ Problem-oriented how-to guides show step-by-step how to achieve a specific goal.
how-to-use-differential-privacy
how-to-authenticate-supernodes
how-to-implement-fedbn
+ how-to-run-flower-on-azure
docker/index
how-to-upgrade-to-flower-1.0
how-to-upgrade-to-flower-1.13
diff --git a/doc/source/ref-api-cli.rst b/framework/doc/source/ref-api-cli.rst
similarity index 100%
rename from doc/source/ref-api-cli.rst
rename to framework/doc/source/ref-api-cli.rst
diff --git a/doc/source/ref-changelog.md b/framework/doc/source/ref-changelog.md
similarity index 100%
rename from doc/source/ref-changelog.md
rename to framework/doc/source/ref-changelog.md
diff --git a/doc/source/ref-example-projects.rst b/framework/doc/source/ref-example-projects.rst
similarity index 100%
rename from doc/source/ref-example-projects.rst
rename to framework/doc/source/ref-example-projects.rst
diff --git a/doc/source/ref-faq.rst b/framework/doc/source/ref-faq.rst
similarity index 100%
rename from doc/source/ref-faq.rst
rename to framework/doc/source/ref-faq.rst
diff --git a/doc/source/ref-telemetry.md b/framework/doc/source/ref-telemetry.md
similarity index 100%
rename from doc/source/ref-telemetry.md
rename to framework/doc/source/ref-telemetry.md
diff --git a/doc/source/tutorial-quickstart-android.rst b/framework/doc/source/tutorial-quickstart-android.rst
similarity index 100%
rename from doc/source/tutorial-quickstart-android.rst
rename to framework/doc/source/tutorial-quickstart-android.rst
diff --git a/doc/source/tutorial-quickstart-fastai.rst b/framework/doc/source/tutorial-quickstart-fastai.rst
similarity index 100%
rename from doc/source/tutorial-quickstart-fastai.rst
rename to framework/doc/source/tutorial-quickstart-fastai.rst
diff --git a/doc/source/tutorial-quickstart-huggingface.rst b/framework/doc/source/tutorial-quickstart-huggingface.rst
similarity index 100%
rename from doc/source/tutorial-quickstart-huggingface.rst
rename to framework/doc/source/tutorial-quickstart-huggingface.rst
diff --git a/doc/source/tutorial-quickstart-ios.rst b/framework/doc/source/tutorial-quickstart-ios.rst
similarity index 100%
rename from doc/source/tutorial-quickstart-ios.rst
rename to framework/doc/source/tutorial-quickstart-ios.rst
diff --git a/doc/source/tutorial-quickstart-jax.rst b/framework/doc/source/tutorial-quickstart-jax.rst
similarity index 100%
rename from doc/source/tutorial-quickstart-jax.rst
rename to framework/doc/source/tutorial-quickstart-jax.rst
diff --git a/doc/source/tutorial-quickstart-mlx.rst b/framework/doc/source/tutorial-quickstart-mlx.rst
similarity index 100%
rename from doc/source/tutorial-quickstart-mlx.rst
rename to framework/doc/source/tutorial-quickstart-mlx.rst
diff --git a/doc/source/tutorial-quickstart-pandas.rst b/framework/doc/source/tutorial-quickstart-pandas.rst
similarity index 100%
rename from doc/source/tutorial-quickstart-pandas.rst
rename to framework/doc/source/tutorial-quickstart-pandas.rst
diff --git a/doc/source/tutorial-quickstart-pytorch-lightning.rst b/framework/doc/source/tutorial-quickstart-pytorch-lightning.rst
similarity index 100%
rename from doc/source/tutorial-quickstart-pytorch-lightning.rst
rename to framework/doc/source/tutorial-quickstart-pytorch-lightning.rst
diff --git a/doc/source/tutorial-quickstart-pytorch.rst b/framework/doc/source/tutorial-quickstart-pytorch.rst
similarity index 100%
rename from doc/source/tutorial-quickstart-pytorch.rst
rename to framework/doc/source/tutorial-quickstart-pytorch.rst
diff --git a/doc/source/tutorial-quickstart-scikitlearn.rst b/framework/doc/source/tutorial-quickstart-scikitlearn.rst
similarity index 100%
rename from doc/source/tutorial-quickstart-scikitlearn.rst
rename to framework/doc/source/tutorial-quickstart-scikitlearn.rst
diff --git a/doc/source/tutorial-quickstart-tensorflow.rst b/framework/doc/source/tutorial-quickstart-tensorflow.rst
similarity index 100%
rename from doc/source/tutorial-quickstart-tensorflow.rst
rename to framework/doc/source/tutorial-quickstart-tensorflow.rst
diff --git a/doc/source/tutorial-quickstart-xgboost.rst b/framework/doc/source/tutorial-quickstart-xgboost.rst
similarity index 100%
rename from doc/source/tutorial-quickstart-xgboost.rst
rename to framework/doc/source/tutorial-quickstart-xgboost.rst
diff --git a/doc/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb b/framework/doc/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb
similarity index 100%
rename from doc/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb
rename to framework/doc/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb
diff --git a/doc/source/tutorial-series-customize-the-client-pytorch.ipynb b/framework/doc/source/tutorial-series-customize-the-client-pytorch.ipynb
similarity index 100%
rename from doc/source/tutorial-series-customize-the-client-pytorch.ipynb
rename to framework/doc/source/tutorial-series-customize-the-client-pytorch.ipynb
diff --git a/doc/source/tutorial-series-get-started-with-flower-pytorch.ipynb b/framework/doc/source/tutorial-series-get-started-with-flower-pytorch.ipynb
similarity index 100%
rename from doc/source/tutorial-series-get-started-with-flower-pytorch.ipynb
rename to framework/doc/source/tutorial-series-get-started-with-flower-pytorch.ipynb
diff --git a/doc/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb b/framework/doc/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb
similarity index 100%
rename from doc/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb
rename to framework/doc/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb
diff --git a/doc/source/tutorial-series-what-is-federated-learning.ipynb b/framework/doc/source/tutorial-series-what-is-federated-learning.ipynb
similarity index 100%
rename from doc/source/tutorial-series-what-is-federated-learning.ipynb
rename to framework/doc/source/tutorial-series-what-is-federated-learning.ipynb
diff --git a/examples/doc/make.bat b/framework/docs/make.bat
similarity index 100%
rename from examples/doc/make.bat
rename to framework/docs/make.bat
diff --git a/doc/source/.gitignore b/framework/docs/source/.gitignore
similarity index 100%
rename from doc/source/.gitignore
rename to framework/docs/source/.gitignore
diff --git a/examples/doc/source/_static/custom.css b/framework/docs/source/_static/custom.css
similarity index 100%
rename from examples/doc/source/_static/custom.css
rename to framework/docs/source/_static/custom.css
diff --git a/examples/doc/source/_static/favicon.ico b/framework/docs/source/_static/favicon.ico
similarity index 100%
rename from examples/doc/source/_static/favicon.ico
rename to framework/docs/source/_static/favicon.ico
diff --git a/doc/source/_templates/autosummary/base.rst b/framework/docs/source/_templates/autosummary/base.rst
similarity index 100%
rename from doc/source/_templates/autosummary/base.rst
rename to framework/docs/source/_templates/autosummary/base.rst
diff --git a/doc/source/_templates/autosummary/class.rst b/framework/docs/source/_templates/autosummary/class.rst
similarity index 100%
rename from doc/source/_templates/autosummary/class.rst
rename to framework/docs/source/_templates/autosummary/class.rst
diff --git a/doc/source/_templates/autosummary/module.rst b/framework/docs/source/_templates/autosummary/module.rst
similarity index 100%
rename from doc/source/_templates/autosummary/module.rst
rename to framework/docs/source/_templates/autosummary/module.rst
diff --git a/doc/source/_templates/sidebar/search.html b/framework/docs/source/_templates/sidebar/search.html
similarity index 100%
rename from doc/source/_templates/sidebar/search.html
rename to framework/docs/source/_templates/sidebar/search.html
diff --git a/framework/docs/source/how-to-run-flower-on-azure.rst b/framework/docs/source/how-to-run-flower-on-azure.rst
new file mode 100644
index 000000000000..dfeda022377f
--- /dev/null
+++ b/framework/docs/source/how-to-run-flower-on-azure.rst
@@ -0,0 +1,225 @@
+.. |authenticate_supernodes| replace:: Authenticate Supernodes
+
+.. _authenticate_supernodes: how-to-authenticate-supernodes.html
+
+.. |enable_tls_connections| replace:: Enable TLS Connections
+
+.. _enable_tls_connections: how-to-enable-tls-connections.html
+
+.. |flower_architecture_link| replace:: Flower Architecture
+
+.. _flower_architecture_link: explanation-flower-architecture.html
+
+.. |flower_docker_index| replace:: Run Flower using Docker
+
+.. _flower_docker_index: docker/index.html
+
+Run Flower on Azure
+===================
+
+.. note::
+
+ There are many ways to deploy Flower on Microst Azure. The instructions provided in
+ this guide is just a basic walkthrough, step-by-step guide on how to quickly setup
+ and run a Flower application on a Federated Learning environment on Microst Azure.
+
+In this how-to guide, we want to create a Federated Learning environment on Microst
+Azure using three Virtual Machines (VMs). From the three machines, one machine will be
+used as the Federation server and two as the Federation clients. Our goal is to create a
+Flower federation on Microst Azure where we can run Flower apps from our local machine,
+e.g., laptop.
+
+On the Federation server VM we will deploy the long-running Flower server
+(``SuperLink``) and on the two Federation client VMs we will deploy the long-running
+Flower client (``SuperNode``). For more details For more details regarding the
+``SuperLink`` and ``SuperNode`` concepts, please see the |flower_architecture_link|_ .
+
+Azure VMs
+---------
+
+First we need to create the three VMs configure their Python environments, and inbound
+networking rules to allow cross-VM communication.
+
+VM Create
+~~~~~~~~~
+
+Assuming we are already inside the Microst Azure portal, we navigate to the ``Create``
+page and we select ``Azure virtual machine``. In the new page, for each VM we edit the
+properties as follows:
+
+.. list-table::
+ :align: left
+ :widths: 13 30
+ :header-rows: 0
+
+ - - **Virtual machine name**
+ - for server machine we can use ``flower-server`` and for clients,
+ ``flower-client-1`` and ``flower-client-2``
+ - - **Image**
+ - in this guide, we use ``Ubuntu Server 24.04 - x64 Gen2 LTS``
+ - - **Size**
+ - in this guide, we use ``Standard_D2s_v3 - 2 vcpus, 8GiB memory``
+
+.. tip::
+
+ For resource group, we can create a new group and assign it to all VMs.
+
+When each VM instance has been created the portal will allow you to download the public
+key (.pem) of each instance. Make sure you save this key in safe place and change its
+permissions to user read only, i.e., run the ``chmod 400 `` command
+for every .pem file.
+
+Once all three VMs are created then navigate to the overview page where all three VMs
+are listed and open every other VM, and copy its Public IP address. Using the Public IP
+address and the public key (after changing the permissions), login to the instances from
+our local machine by running the following command (by default Azure creates the
+``azureuser``):
+
+.. code-block:: bash
+
+ ssh -i azureuser@
+
+VM Networking
+~~~~~~~~~~~~~
+
+During the execution of the Flower application, the server VM (``SuperLink``) will be
+responsible to orchestrate the execution of the application across the client VMs
+(``SuperNode``). When the SuperLink server starts, by default, it listens to the
+following ports: ``{9092, 9093}``. Port `9092` is used to communicate with the
+Federation clients (``SuperNode``) and port ``9093`` to receive and execute Flower
+applications.
+
+Therefore, to enable this communication we need to allow inbound traffic to the server
+VM instance. To achieve this, we need to navigate to the Networking page of the server
+VM in the Microsoft Azure portal. There, we will click the ``Add inbound port rule``. In
+the new window that appears, we edit the rule properties as follows:
+
+The rest of the fields can be left at their default values.
+
+.. list-table::
+ :align: left
+ :widths: 25 30
+ :header-rows: 0
+
+ - - **Source**
+ - ``IP Addresses``
+ - - **Source IP addresses/CIDR ranges**
+ - add client VMs' Public IP (separated by comma)
+ - - **Destination**
+ - ``Any``
+ - - **Service**
+ - ``custom``
+ - - **Destination port ranges**
+ - ``9092``
+ - - **Protocol**
+ - ``TCP``
+
+Finally, we need to also open port 9093 to allow receiving and executing incoming
+application requests. To enable this we just need to repeat the steps above, i.e.,
+create a new inbound rule, where for port range we assign port 9093. If we already know
+the Public IP from which our local machine (e.g., laptop) will be submitting
+applications to the Azure cluster, then we just need to specify the Source IP
+address/CIDR range. However, if we want to keep the port widely open we simply need to
+change source to ``Any``.
+
+To be more precise, if we know the Public IP of our machine, then we make the following
+changes:
+
+.. list-table::
+ :align: left
+ :widths: 25 25
+ :header-rows: 0
+
+ - - **Source IP addresses/CIDR ranges**
+ - add machine's Public IP
+ - - **Destination port ranges**
+ - ``9093``
+
+Otherwise, we change the properties as follows:
+
+.. list-table::
+ :align: left
+ :widths: 25 25
+ :header-rows: 0
+
+ - - **Source**
+ - ``Any``
+ - - **Destination port ranges**
+ - ``9093``
+
+Flower Environment
+------------------
+
+Assuming we have been able to login to each VM, and create a Python environment with
+Flower and all its dependencies installed (``pip install flwr``), we can create a Flower
+application by running the ``flwr new`` command. The console will then prompt us to give
+a name to the project, e.g., ``flwr_azure_test``, the name of the author and select the
+type of the Flower Framework we want to run, e.g., ``numpy``.
+
+.. note::
+
+ An alternative approach would be to use Docker in each VM, with each image
+ containing the necessary environment and dependencies. For more details please refer
+ to the |flower_docker_index|_ guide.
+
+Server Initialization
+~~~~~~~~~~~~~~~~~~~~~
+
+After configuring the Flower application environment, we proceed by starting the Flower
+long-running processes (i.e., ``SuperLink`` and ``SuperNode``) at each VM instance. In
+particular, we need to run the following commands, first in the server (``SuperLink``)
+and then at each client (``SuperNode``).
+
+.. note::
+
+ To enable authentication and encrypted communication during the execution lifecycle
+ of the Flower application, please have a look at the following resources:
+ |authenticate_supernodes|_, |enable_tls_connections|_
+
+.. code-block:: bash
+
+ # Server VM (SuperLink)
+ flower-superlink --insecure
+
+ # Client-1 VM (SuperNode-1)
+ flower-supernode \
+ --insecure \
+ --clientappio-api-address="0.0.0.0:9094" \ # SuperNode listening port
+ --superlink="SUPERLINK_PUBLIC_IP:9092" # SuperLink public ip and port
+
+ # Client-2 VM (SuperNode-2)
+ flower-supernode \
+ --insecure \
+ --clientappio-api-address="0.0.0.0:9095" \ # SuperNode listening port
+ --superlink="SUPERLINK_PUBLIC_IP:9092" # SuperLink public ip and port
+
+Run Flower App
+~~~~~~~~~~~~~~
+
+Finally, after all running Flower processes have been initialized on the Microsoft Azure
+cluster, in our local machine, we first need to install Flower and can create a project
+with a similar structure as the one we have in the server and the clients, or copy the
+project structure from one of them. Once we have the project locally, we can open the
+``pyproject.toml`` file, and then add the following sections:
+
+.. code-block:: bash
+
+ [tool.flwr.federations]
+ default = "my-federation" # replaced the default value with "my-federation"
+
+ [tool.flwr.federations.my-federation] # replaced name with "my-federation"
+ address = "SUPERLINK_PUBLIC_IP:9093" # Address of the SuperLink Exec API
+ insecure = true
+
+Then from our local machine we need to run ``flwr run . my-federation``.
+
+Next Steps
+----------
+
+.. warning::
+
+ This guide is not suitable for production environments due to missing authentication
+ and TLS security.
+
+To enable authentication and establish secure connections, please refer to the following
+resources: |authenticate_supernodes|_, |enable_tls_connections|_
diff --git a/e2e/README.md b/framework/e2e/README.md
similarity index 100%
rename from e2e/README.md
rename to framework/e2e/README.md
diff --git a/e2e/docker/README.md b/framework/e2e/docker/README.md
similarity index 100%
rename from e2e/docker/README.md
rename to framework/e2e/docker/README.md
diff --git a/e2e/docker/client.py b/framework/e2e/docker/client.py
similarity index 100%
rename from e2e/docker/client.py
rename to framework/e2e/docker/client.py
diff --git a/e2e/docker/compose.yaml b/framework/e2e/docker/compose.yaml
similarity index 100%
rename from e2e/docker/compose.yaml
rename to framework/e2e/docker/compose.yaml
diff --git a/e2e/docker/pyproject.toml b/framework/e2e/docker/pyproject.toml
similarity index 100%
rename from e2e/docker/pyproject.toml
rename to framework/e2e/docker/pyproject.toml
diff --git a/e2e/docker/server.py b/framework/e2e/docker/server.py
similarity index 100%
rename from e2e/docker/server.py
rename to framework/e2e/docker/server.py
diff --git a/e2e/docker/serverapp.Dockerfile b/framework/e2e/docker/serverapp.Dockerfile
similarity index 100%
rename from e2e/docker/serverapp.Dockerfile
rename to framework/e2e/docker/serverapp.Dockerfile
diff --git a/e2e/docker/supernode.Dockerfile b/framework/e2e/docker/supernode.Dockerfile
similarity index 100%
rename from e2e/docker/supernode.Dockerfile
rename to framework/e2e/docker/supernode.Dockerfile
diff --git a/e2e/e2e-bare-auth/README.md b/framework/e2e/e2e-bare-auth/README.md
similarity index 100%
rename from e2e/e2e-bare-auth/README.md
rename to framework/e2e/e2e-bare-auth/README.md
diff --git a/e2e/e2e-bare-auth/certificate.conf b/framework/e2e/e2e-bare-auth/certificate.conf
similarity index 100%
rename from e2e/e2e-bare-auth/certificate.conf
rename to framework/e2e/e2e-bare-auth/certificate.conf
diff --git a/e2e/e2e-bare-auth/e2e_bare_auth/__init__.py b/framework/e2e/e2e-bare-auth/e2e_bare_auth/__init__.py
similarity index 100%
rename from e2e/e2e-bare-auth/e2e_bare_auth/__init__.py
rename to framework/e2e/e2e-bare-auth/e2e_bare_auth/__init__.py
diff --git a/e2e/e2e-bare-auth/e2e_bare_auth/client_app.py b/framework/e2e/e2e-bare-auth/e2e_bare_auth/client_app.py
similarity index 100%
rename from e2e/e2e-bare-auth/e2e_bare_auth/client_app.py
rename to framework/e2e/e2e-bare-auth/e2e_bare_auth/client_app.py
diff --git a/e2e/e2e-bare-auth/e2e_bare_auth/server_app.py b/framework/e2e/e2e-bare-auth/e2e_bare_auth/server_app.py
similarity index 100%
rename from e2e/e2e-bare-auth/e2e_bare_auth/server_app.py
rename to framework/e2e/e2e-bare-auth/e2e_bare_auth/server_app.py
diff --git a/e2e/e2e-bare-auth/generate.sh b/framework/e2e/e2e-bare-auth/generate.sh
similarity index 100%
rename from e2e/e2e-bare-auth/generate.sh
rename to framework/e2e/e2e-bare-auth/generate.sh
diff --git a/e2e/e2e-bare-auth/pyproject.toml b/framework/e2e/e2e-bare-auth/pyproject.toml
similarity index 91%
rename from e2e/e2e-bare-auth/pyproject.toml
rename to framework/e2e/e2e-bare-auth/pyproject.toml
index d3ca5e543011..66e8a7b94203 100644
--- a/e2e/e2e-bare-auth/pyproject.toml
+++ b/framework/e2e/e2e-bare-auth/pyproject.toml
@@ -7,7 +7,7 @@ name = "e2e-bare-auth"
version = "1.0.0"
description = "Auth-enabled bare Federated Learning test with Flower"
license = "Apache-2.0"
-dependencies = ["flwr @ {root:parent:parent:uri}"]
+dependencies = ["flwr @ {root:parent:parent:parent:uri}"]
[tool.hatch.build.targets.wheel]
packages = ["."]
diff --git a/e2e/e2e-bare-https/README.md b/framework/e2e/e2e-bare-https/README.md
similarity index 100%
rename from e2e/e2e-bare-https/README.md
rename to framework/e2e/e2e-bare-https/README.md
diff --git a/e2e/e2e-bare-https/certificate.conf b/framework/e2e/e2e-bare-https/certificate.conf
similarity index 100%
rename from e2e/e2e-bare-https/certificate.conf
rename to framework/e2e/e2e-bare-https/certificate.conf
diff --git a/e2e/e2e-bare-https/e2e_bare_https/__init__.py b/framework/e2e/e2e-bare-https/e2e_bare_https/__init__.py
similarity index 100%
rename from e2e/e2e-bare-https/e2e_bare_https/__init__.py
rename to framework/e2e/e2e-bare-https/e2e_bare_https/__init__.py
diff --git a/e2e/e2e-bare-https/e2e_bare_https/client_app.py b/framework/e2e/e2e-bare-https/e2e_bare_https/client_app.py
similarity index 100%
rename from e2e/e2e-bare-https/e2e_bare_https/client_app.py
rename to framework/e2e/e2e-bare-https/e2e_bare_https/client_app.py
diff --git a/e2e/e2e-bare-https/e2e_bare_https/server_app.py b/framework/e2e/e2e-bare-https/e2e_bare_https/server_app.py
similarity index 100%
rename from e2e/e2e-bare-https/e2e_bare_https/server_app.py
rename to framework/e2e/e2e-bare-https/e2e_bare_https/server_app.py
diff --git a/e2e/e2e-bare-https/generate.sh b/framework/e2e/e2e-bare-https/generate.sh
similarity index 100%
rename from e2e/e2e-bare-https/generate.sh
rename to framework/e2e/e2e-bare-https/generate.sh
diff --git a/e2e/e2e-bare-https/pyproject.toml b/framework/e2e/e2e-bare-https/pyproject.toml
similarity index 91%
rename from e2e/e2e-bare-https/pyproject.toml
rename to framework/e2e/e2e-bare-https/pyproject.toml
index e1ec84157788..202be3ddc0b1 100644
--- a/e2e/e2e-bare-https/pyproject.toml
+++ b/framework/e2e/e2e-bare-https/pyproject.toml
@@ -7,7 +7,7 @@ name = "e2e-bare-https"
version = "1.0.0"
description = "HTTPS-enabled bare Federated Learning test with Flower"
license = "Apache-2.0"
-dependencies = ["flwr @ {root:parent:parent:uri}"]
+dependencies = ["flwr @ {root:parent:parent:parent:uri}"]
[tool.hatch.build.targets.wheel]
packages = ["."]
diff --git a/e2e/e2e-bare-https/simulation.py b/framework/e2e/e2e-bare-https/simulation.py
similarity index 100%
rename from e2e/e2e-bare-https/simulation.py
rename to framework/e2e/e2e-bare-https/simulation.py
diff --git a/e2e/e2e-bare/README.md b/framework/e2e/e2e-bare/README.md
similarity index 100%
rename from e2e/e2e-bare/README.md
rename to framework/e2e/e2e-bare/README.md
diff --git a/e2e/e2e-bare/e2e_bare/__init__.py b/framework/e2e/e2e-bare/e2e_bare/__init__.py
similarity index 100%
rename from e2e/e2e-bare/e2e_bare/__init__.py
rename to framework/e2e/e2e-bare/e2e_bare/__init__.py
diff --git a/e2e/e2e-bare/e2e_bare/client_app.py b/framework/e2e/e2e-bare/e2e_bare/client_app.py
similarity index 100%
rename from e2e/e2e-bare/e2e_bare/client_app.py
rename to framework/e2e/e2e-bare/e2e_bare/client_app.py
diff --git a/e2e/e2e-bare/e2e_bare/server_app.py b/framework/e2e/e2e-bare/e2e_bare/server_app.py
similarity index 100%
rename from e2e/e2e-bare/e2e_bare/server_app.py
rename to framework/e2e/e2e-bare/e2e_bare/server_app.py
diff --git a/e2e/e2e-bare/pyproject.toml b/framework/e2e/e2e-bare/pyproject.toml
similarity index 88%
rename from e2e/e2e-bare/pyproject.toml
rename to framework/e2e/e2e-bare/pyproject.toml
index 12099fcd9027..1e6e94795f14 100644
--- a/e2e/e2e-bare/pyproject.toml
+++ b/framework/e2e/e2e-bare/pyproject.toml
@@ -7,7 +7,7 @@ name = "e2e-bare"
version = "1.0.0"
description = "Bare Federated Learning test with Flower"
license = "Apache-2.0"
-dependencies = ["flwr[simulation,rest] @ {root:parent:parent:uri}"]
+dependencies = ["flwr[simulation,rest] @ {root:parent:parent:parent:uri}"]
[tool.hatch.build.targets.wheel]
packages = ["."]
diff --git a/e2e/e2e-bare/simulation.py b/framework/e2e/e2e-bare/simulation.py
similarity index 100%
rename from e2e/e2e-bare/simulation.py
rename to framework/e2e/e2e-bare/simulation.py
diff --git a/e2e/e2e-fastai/README.md b/framework/e2e/e2e-fastai/README.md
similarity index 100%
rename from e2e/e2e-fastai/README.md
rename to framework/e2e/e2e-fastai/README.md
diff --git a/e2e/e2e-fastai/e2e_fastai/__init__.py b/framework/e2e/e2e-fastai/e2e_fastai/__init__.py
similarity index 100%
rename from e2e/e2e-fastai/e2e_fastai/__init__.py
rename to framework/e2e/e2e-fastai/e2e_fastai/__init__.py
diff --git a/e2e/e2e-fastai/e2e_fastai/client_app.py b/framework/e2e/e2e-fastai/e2e_fastai/client_app.py
similarity index 100%
rename from e2e/e2e-fastai/e2e_fastai/client_app.py
rename to framework/e2e/e2e-fastai/e2e_fastai/client_app.py
diff --git a/e2e/e2e-fastai/e2e_fastai/server_app.py b/framework/e2e/e2e-fastai/e2e_fastai/server_app.py
similarity index 100%
rename from e2e/e2e-fastai/e2e_fastai/server_app.py
rename to framework/e2e/e2e-fastai/e2e_fastai/server_app.py
diff --git a/e2e/e2e-fastai/pyproject.toml b/framework/e2e/e2e-fastai/pyproject.toml
similarity index 92%
rename from e2e/e2e-fastai/pyproject.toml
rename to framework/e2e/e2e-fastai/pyproject.toml
index 6b1cbd66600e..767719f49198 100644
--- a/e2e/e2e-fastai/pyproject.toml
+++ b/framework/e2e/e2e-fastai/pyproject.toml
@@ -8,7 +8,7 @@ version = "1.0.0"
description = "Fastai Federated Learning E2E test with Flower"
license = "Apache-2.0"
dependencies = [
- "flwr[simulation] @ {root:parent:parent:uri}",
+ "flwr[simulation] @ {root:parent:parent:parent:uri}",
"fastai>=2.7.12,<3.0.0",
"torch>=2.0.0,!=2.0.1,<2.1.0",
"spacy==3.7.6",
diff --git a/e2e/e2e-fastai/simulation.py b/framework/e2e/e2e-fastai/simulation.py
similarity index 100%
rename from e2e/e2e-fastai/simulation.py
rename to framework/e2e/e2e-fastai/simulation.py
diff --git a/e2e/e2e-jax/README.md b/framework/e2e/e2e-jax/README.md
similarity index 100%
rename from e2e/e2e-jax/README.md
rename to framework/e2e/e2e-jax/README.md
diff --git a/e2e/e2e-jax/e2e_jax/__init__.py b/framework/e2e/e2e-jax/e2e_jax/__init__.py
similarity index 100%
rename from e2e/e2e-jax/e2e_jax/__init__.py
rename to framework/e2e/e2e-jax/e2e_jax/__init__.py
diff --git a/e2e/e2e-jax/e2e_jax/client_app.py b/framework/e2e/e2e-jax/e2e_jax/client_app.py
similarity index 100%
rename from e2e/e2e-jax/e2e_jax/client_app.py
rename to framework/e2e/e2e-jax/e2e_jax/client_app.py
diff --git a/e2e/e2e-jax/e2e_jax/jax_training.py b/framework/e2e/e2e-jax/e2e_jax/jax_training.py
similarity index 100%
rename from e2e/e2e-jax/e2e_jax/jax_training.py
rename to framework/e2e/e2e-jax/e2e_jax/jax_training.py
diff --git a/e2e/e2e-jax/e2e_jax/server_app.py b/framework/e2e/e2e-jax/e2e_jax/server_app.py
similarity index 100%
rename from e2e/e2e-jax/e2e_jax/server_app.py
rename to framework/e2e/e2e-jax/e2e_jax/server_app.py
diff --git a/e2e/e2e-jax/pyproject.toml b/framework/e2e/e2e-jax/pyproject.toml
similarity index 92%
rename from e2e/e2e-jax/pyproject.toml
rename to framework/e2e/e2e-jax/pyproject.toml
index b259f66a7bc3..7439246f7c4d 100644
--- a/e2e/e2e-jax/pyproject.toml
+++ b/framework/e2e/e2e-jax/pyproject.toml
@@ -8,7 +8,7 @@ version = "1.0.0"
description = "JAX example training a linear regression model with federated learning"
license = "Apache-2.0"
dependencies = [
- "flwr[simulation] @ {root:parent:parent:uri}",
+ "flwr[simulation] @ {root:parent:parent:parent:uri}",
"jax==0.4.13",
"jaxlib==0.4.13",
"scikit-learn>=1.1.1,<2.0.0",
diff --git a/e2e/e2e-jax/simulation.py b/framework/e2e/e2e-jax/simulation.py
similarity index 100%
rename from e2e/e2e-jax/simulation.py
rename to framework/e2e/e2e-jax/simulation.py
diff --git a/e2e/e2e-opacus/.gitignore b/framework/e2e/e2e-opacus/.gitignore
similarity index 100%
rename from e2e/e2e-opacus/.gitignore
rename to framework/e2e/e2e-opacus/.gitignore
diff --git a/e2e/e2e-opacus/README.md b/framework/e2e/e2e-opacus/README.md
similarity index 100%
rename from e2e/e2e-opacus/README.md
rename to framework/e2e/e2e-opacus/README.md
diff --git a/e2e/e2e-opacus/e2e_opacus/__init__.py b/framework/e2e/e2e-opacus/e2e_opacus/__init__.py
similarity index 100%
rename from e2e/e2e-opacus/e2e_opacus/__init__.py
rename to framework/e2e/e2e-opacus/e2e_opacus/__init__.py
diff --git a/e2e/e2e-opacus/e2e_opacus/client_app.py b/framework/e2e/e2e-opacus/e2e_opacus/client_app.py
similarity index 100%
rename from e2e/e2e-opacus/e2e_opacus/client_app.py
rename to framework/e2e/e2e-opacus/e2e_opacus/client_app.py
diff --git a/e2e/e2e-opacus/e2e_opacus/server_app.py b/framework/e2e/e2e-opacus/e2e_opacus/server_app.py
similarity index 100%
rename from e2e/e2e-opacus/e2e_opacus/server_app.py
rename to framework/e2e/e2e-opacus/e2e_opacus/server_app.py
diff --git a/e2e/e2e-opacus/pyproject.toml b/framework/e2e/e2e-opacus/pyproject.toml
similarity index 92%
rename from e2e/e2e-opacus/pyproject.toml
rename to framework/e2e/e2e-opacus/pyproject.toml
index 54aa54a7b357..4bf0629cc113 100644
--- a/e2e/e2e-opacus/pyproject.toml
+++ b/framework/e2e/e2e-opacus/pyproject.toml
@@ -8,7 +8,7 @@ version = "1.0.0"
description = "Opacus E2E testing"
license = "Apache-2.0"
dependencies = [
- "flwr[simulation] @ {root:parent:parent:uri}",
+ "flwr[simulation] @ {root:parent:parent:parent:uri}",
"opacus>=1.4.0,<2.0.0",
"torch>=1.13.1,<3.0.0",
"torchvision>=0.14.0,<2.0.0",
diff --git a/e2e/e2e-opacus/simulation.py b/framework/e2e/e2e-opacus/simulation.py
similarity index 100%
rename from e2e/e2e-opacus/simulation.py
rename to framework/e2e/e2e-opacus/simulation.py
diff --git a/e2e/e2e-pandas/README.md b/framework/e2e/e2e-pandas/README.md
similarity index 100%
rename from e2e/e2e-pandas/README.md
rename to framework/e2e/e2e-pandas/README.md
diff --git a/e2e/e2e-pandas/e2e_pandas/__init__.py b/framework/e2e/e2e-pandas/e2e_pandas/__init__.py
similarity index 100%
rename from e2e/e2e-pandas/e2e_pandas/__init__.py
rename to framework/e2e/e2e-pandas/e2e_pandas/__init__.py
diff --git a/e2e/e2e-pandas/e2e_pandas/client_app.py b/framework/e2e/e2e-pandas/e2e_pandas/client_app.py
similarity index 100%
rename from e2e/e2e-pandas/e2e_pandas/client_app.py
rename to framework/e2e/e2e-pandas/e2e_pandas/client_app.py
diff --git a/e2e/e2e-pandas/e2e_pandas/server_app.py b/framework/e2e/e2e-pandas/e2e_pandas/server_app.py
similarity index 100%
rename from e2e/e2e-pandas/e2e_pandas/server_app.py
rename to framework/e2e/e2e-pandas/e2e_pandas/server_app.py
diff --git a/e2e/e2e-pandas/e2e_pandas/strategy.py b/framework/e2e/e2e-pandas/e2e_pandas/strategy.py
similarity index 100%
rename from e2e/e2e-pandas/e2e_pandas/strategy.py
rename to framework/e2e/e2e-pandas/e2e_pandas/strategy.py
diff --git a/e2e/e2e-pandas/pyproject.toml b/framework/e2e/e2e-pandas/pyproject.toml
similarity index 93%
rename from e2e/e2e-pandas/pyproject.toml
rename to framework/e2e/e2e-pandas/pyproject.toml
index 120e9b8e6d35..cb0566fb5519 100644
--- a/e2e/e2e-pandas/pyproject.toml
+++ b/framework/e2e/e2e-pandas/pyproject.toml
@@ -10,7 +10,7 @@ license = "Apache-2.0"
authors = [{ name = "Ragy Haddad", email = "ragy202@gmail.com" }]
maintainers = [{ name = "The Flower Authors", email = "hello@flower.ai" }]
dependencies = [
- "flwr[simulation] @ {root:parent:parent:uri}",
+ "flwr[simulation] @ {root:parent:parent:parent:uri}",
"numpy>=2.0.0",
"pandas>=2.0.0,<3.0.0",
"scikit-learn>=1.1.1,<2.0.0",
diff --git a/e2e/e2e-pandas/simulation.py b/framework/e2e/e2e-pandas/simulation.py
similarity index 100%
rename from e2e/e2e-pandas/simulation.py
rename to framework/e2e/e2e-pandas/simulation.py
diff --git a/e2e/e2e-pytorch-lightning/README.md b/framework/e2e/e2e-pytorch-lightning/README.md
similarity index 100%
rename from e2e/e2e-pytorch-lightning/README.md
rename to framework/e2e/e2e-pytorch-lightning/README.md
diff --git a/e2e/e2e-pytorch-lightning/e2e_pytorch_lightning/__init__.py b/framework/e2e/e2e-pytorch-lightning/e2e_pytorch_lightning/__init__.py
similarity index 100%
rename from e2e/e2e-pytorch-lightning/e2e_pytorch_lightning/__init__.py
rename to framework/e2e/e2e-pytorch-lightning/e2e_pytorch_lightning/__init__.py
diff --git a/e2e/e2e-pytorch-lightning/e2e_pytorch_lightning/client_app.py b/framework/e2e/e2e-pytorch-lightning/e2e_pytorch_lightning/client_app.py
similarity index 100%
rename from e2e/e2e-pytorch-lightning/e2e_pytorch_lightning/client_app.py
rename to framework/e2e/e2e-pytorch-lightning/e2e_pytorch_lightning/client_app.py
diff --git a/e2e/e2e-pytorch-lightning/e2e_pytorch_lightning/mnist.py b/framework/e2e/e2e-pytorch-lightning/e2e_pytorch_lightning/mnist.py
similarity index 100%
rename from e2e/e2e-pytorch-lightning/e2e_pytorch_lightning/mnist.py
rename to framework/e2e/e2e-pytorch-lightning/e2e_pytorch_lightning/mnist.py
diff --git a/e2e/e2e-pytorch-lightning/e2e_pytorch_lightning/server_app.py b/framework/e2e/e2e-pytorch-lightning/e2e_pytorch_lightning/server_app.py
similarity index 100%
rename from e2e/e2e-pytorch-lightning/e2e_pytorch_lightning/server_app.py
rename to framework/e2e/e2e-pytorch-lightning/e2e_pytorch_lightning/server_app.py
diff --git a/e2e/e2e-pytorch-lightning/pyproject.toml b/framework/e2e/e2e-pytorch-lightning/pyproject.toml
similarity index 92%
rename from e2e/e2e-pytorch-lightning/pyproject.toml
rename to framework/e2e/e2e-pytorch-lightning/pyproject.toml
index efb0eb1bebf1..a02cbe9b035a 100644
--- a/e2e/e2e-pytorch-lightning/pyproject.toml
+++ b/framework/e2e/e2e-pytorch-lightning/pyproject.toml
@@ -8,7 +8,7 @@ version = "1.0.0"
description = "Federated Learning E2E test with Flower and PyTorch Lightning"
license = "Apache-2.0"
dependencies = [
- "flwr[simulation] @ {root:parent:parent:uri}",
+ "flwr[simulation] @ {root:parent:parent:parent:uri}",
"pytorch-lightning==2.4.0",
"torchvision>=0.20.1,<0.21.0",
]
diff --git a/e2e/e2e-pytorch-lightning/simulation.py b/framework/e2e/e2e-pytorch-lightning/simulation.py
similarity index 100%
rename from e2e/e2e-pytorch-lightning/simulation.py
rename to framework/e2e/e2e-pytorch-lightning/simulation.py
diff --git a/e2e/e2e-pytorch/README.md b/framework/e2e/e2e-pytorch/README.md
similarity index 100%
rename from e2e/e2e-pytorch/README.md
rename to framework/e2e/e2e-pytorch/README.md
diff --git a/e2e/e2e-pytorch/e2e_pytorch/__init__.py b/framework/e2e/e2e-pytorch/e2e_pytorch/__init__.py
similarity index 100%
rename from e2e/e2e-pytorch/e2e_pytorch/__init__.py
rename to framework/e2e/e2e-pytorch/e2e_pytorch/__init__.py
diff --git a/e2e/e2e-pytorch/e2e_pytorch/client_app.py b/framework/e2e/e2e-pytorch/e2e_pytorch/client_app.py
similarity index 100%
rename from e2e/e2e-pytorch/e2e_pytorch/client_app.py
rename to framework/e2e/e2e-pytorch/e2e_pytorch/client_app.py
diff --git a/e2e/e2e-pytorch/e2e_pytorch/server_app.py b/framework/e2e/e2e-pytorch/e2e_pytorch/server_app.py
similarity index 100%
rename from e2e/e2e-pytorch/e2e_pytorch/server_app.py
rename to framework/e2e/e2e-pytorch/e2e_pytorch/server_app.py
diff --git a/e2e/e2e-pytorch/pyproject.toml b/framework/e2e/e2e-pytorch/pyproject.toml
similarity index 92%
rename from e2e/e2e-pytorch/pyproject.toml
rename to framework/e2e/e2e-pytorch/pyproject.toml
index 9e2029aecefb..78b4244666ce 100644
--- a/e2e/e2e-pytorch/pyproject.toml
+++ b/framework/e2e/e2e-pytorch/pyproject.toml
@@ -8,7 +8,7 @@ version = "1.0.0"
description = "PyTorch Federated Learning E2E test with Flower"
license = "Apache-2.0"
dependencies = [
- "flwr[simulation] @ {root:parent:parent:uri}",
+ "flwr[simulation] @ {root:parent:parent:parent:uri}",
"torch>=2.5.0,<3.0.0",
"torchvision>=0.20.1,<0.21.0",
"tqdm>=4.63.0,<5.0.0",
diff --git a/e2e/e2e-pytorch/simulation.py b/framework/e2e/e2e-pytorch/simulation.py
similarity index 100%
rename from e2e/e2e-pytorch/simulation.py
rename to framework/e2e/e2e-pytorch/simulation.py
diff --git a/e2e/e2e-pytorch/simulation_next.py b/framework/e2e/e2e-pytorch/simulation_next.py
similarity index 100%
rename from e2e/e2e-pytorch/simulation_next.py
rename to framework/e2e/e2e-pytorch/simulation_next.py
diff --git a/e2e/e2e-scikit-learn/README.md b/framework/e2e/e2e-scikit-learn/README.md
similarity index 100%
rename from e2e/e2e-scikit-learn/README.md
rename to framework/e2e/e2e-scikit-learn/README.md
diff --git a/e2e/e2e-scikit-learn/e2e_scikit_learn/__init__.py b/framework/e2e/e2e-scikit-learn/e2e_scikit_learn/__init__.py
similarity index 100%
rename from e2e/e2e-scikit-learn/e2e_scikit_learn/__init__.py
rename to framework/e2e/e2e-scikit-learn/e2e_scikit_learn/__init__.py
diff --git a/e2e/e2e-scikit-learn/e2e_scikit_learn/client_app.py b/framework/e2e/e2e-scikit-learn/e2e_scikit_learn/client_app.py
similarity index 100%
rename from e2e/e2e-scikit-learn/e2e_scikit_learn/client_app.py
rename to framework/e2e/e2e-scikit-learn/e2e_scikit_learn/client_app.py
diff --git a/e2e/e2e-scikit-learn/e2e_scikit_learn/server_app.py b/framework/e2e/e2e-scikit-learn/e2e_scikit_learn/server_app.py
similarity index 100%
rename from e2e/e2e-scikit-learn/e2e_scikit_learn/server_app.py
rename to framework/e2e/e2e-scikit-learn/e2e_scikit_learn/server_app.py
diff --git a/e2e/e2e-scikit-learn/e2e_scikit_learn/utils.py b/framework/e2e/e2e-scikit-learn/e2e_scikit_learn/utils.py
similarity index 100%
rename from e2e/e2e-scikit-learn/e2e_scikit_learn/utils.py
rename to framework/e2e/e2e-scikit-learn/e2e_scikit_learn/utils.py
diff --git a/e2e/e2e-scikit-learn/pyproject.toml b/framework/e2e/e2e-scikit-learn/pyproject.toml
similarity index 93%
rename from e2e/e2e-scikit-learn/pyproject.toml
rename to framework/e2e/e2e-scikit-learn/pyproject.toml
index 03f5540aa15d..c8de7e0e3b19 100644
--- a/e2e/e2e-scikit-learn/pyproject.toml
+++ b/framework/e2e/e2e-scikit-learn/pyproject.toml
@@ -12,7 +12,7 @@ authors = [
{ name = "Kaushik Amar Das", email = "kaushik.das@iiitg.ac.in" },
]
dependencies = [
- "flwr[simulation,rest] @ {root:parent:parent:uri}",
+ "flwr[simulation,rest] @ {root:parent:parent:parent:uri}",
"scikit-learn>=1.1.1,<2.0.0",
"openml>=0.14.0,<0.15.0",
"numpy<2.0.0",
diff --git a/e2e/e2e-scikit-learn/simulation.py b/framework/e2e/e2e-scikit-learn/simulation.py
similarity index 100%
rename from e2e/e2e-scikit-learn/simulation.py
rename to framework/e2e/e2e-scikit-learn/simulation.py
diff --git a/e2e/e2e-tensorflow/README.md b/framework/e2e/e2e-tensorflow/README.md
similarity index 100%
rename from e2e/e2e-tensorflow/README.md
rename to framework/e2e/e2e-tensorflow/README.md
diff --git a/e2e/e2e-tensorflow/e2e_tensorflow/__init__.py b/framework/e2e/e2e-tensorflow/e2e_tensorflow/__init__.py
similarity index 100%
rename from e2e/e2e-tensorflow/e2e_tensorflow/__init__.py
rename to framework/e2e/e2e-tensorflow/e2e_tensorflow/__init__.py
diff --git a/e2e/e2e-tensorflow/e2e_tensorflow/client_app.py b/framework/e2e/e2e-tensorflow/e2e_tensorflow/client_app.py
similarity index 100%
rename from e2e/e2e-tensorflow/e2e_tensorflow/client_app.py
rename to framework/e2e/e2e-tensorflow/e2e_tensorflow/client_app.py
diff --git a/e2e/e2e-tensorflow/e2e_tensorflow/server_app.py b/framework/e2e/e2e-tensorflow/e2e_tensorflow/server_app.py
similarity index 100%
rename from e2e/e2e-tensorflow/e2e_tensorflow/server_app.py
rename to framework/e2e/e2e-tensorflow/e2e_tensorflow/server_app.py
diff --git a/e2e/e2e-tensorflow/pyproject.toml b/framework/e2e/e2e-tensorflow/pyproject.toml
similarity index 92%
rename from e2e/e2e-tensorflow/pyproject.toml
rename to framework/e2e/e2e-tensorflow/pyproject.toml
index dd89123944c7..4710b71beddb 100644
--- a/e2e/e2e-tensorflow/pyproject.toml
+++ b/framework/e2e/e2e-tensorflow/pyproject.toml
@@ -8,7 +8,7 @@ version = "1.0.0"
description = "Keras Federated Learning E2E test with Flower"
license = "Apache-2.0"
dependencies = [
- "flwr[simulation] @ {root:parent:parent:uri}",
+ "flwr[simulation] @ {root:parent:parent:parent:uri}",
"tensorflow-cpu>=2.9.1,!=2.11.1",
"tensorflow-io-gcs-filesystem<0.35.0",
]
diff --git a/e2e/e2e-tensorflow/simulation.py b/framework/e2e/e2e-tensorflow/simulation.py
similarity index 100%
rename from e2e/e2e-tensorflow/simulation.py
rename to framework/e2e/e2e-tensorflow/simulation.py
diff --git a/e2e/e2e-tensorflow/simulation_next.py b/framework/e2e/e2e-tensorflow/simulation_next.py
similarity index 100%
rename from e2e/e2e-tensorflow/simulation_next.py
rename to framework/e2e/e2e-tensorflow/simulation_next.py
diff --git a/e2e/pyproject.toml b/framework/e2e/pyproject.toml
similarity index 100%
rename from e2e/pyproject.toml
rename to framework/e2e/pyproject.toml
diff --git a/e2e/strategies/README.md b/framework/e2e/strategies/README.md
similarity index 100%
rename from e2e/strategies/README.md
rename to framework/e2e/strategies/README.md
diff --git a/e2e/strategies/client.py b/framework/e2e/strategies/client.py
similarity index 100%
rename from e2e/strategies/client.py
rename to framework/e2e/strategies/client.py
diff --git a/e2e/strategies/pyproject.toml b/framework/e2e/strategies/pyproject.toml
similarity index 84%
rename from e2e/strategies/pyproject.toml
rename to framework/e2e/strategies/pyproject.toml
index 3ad62ec836a7..cfc23aa9ee01 100644
--- a/e2e/strategies/pyproject.toml
+++ b/framework/e2e/strategies/pyproject.toml
@@ -10,6 +10,6 @@ authors = ["The Flower Authors "]
[tool.poetry.dependencies]
python = ">=3.9,<3.11"
-flwr = { path = "../../", develop = true, extras = ["simulation"] }
+flwr = { path = "../../../", develop = true, extras = ["simulation"] }
tensorflow-cpu = "^2.9.1, !=2.11.1"
tensorflow-io-gcs-filesystem = "<0.35.0"
diff --git a/e2e/strategies/test.py b/framework/e2e/strategies/test.py
similarity index 100%
rename from e2e/strategies/test.py
rename to framework/e2e/strategies/test.py
diff --git a/e2e/test_exec_api.sh b/framework/e2e/test_exec_api.sh
similarity index 100%
rename from e2e/test_exec_api.sh
rename to framework/e2e/test_exec_api.sh
diff --git a/e2e/test_legacy.sh b/framework/e2e/test_legacy.sh
similarity index 100%
rename from e2e/test_legacy.sh
rename to framework/e2e/test_legacy.sh
diff --git a/e2e/test_reconnection.sh b/framework/e2e/test_reconnection.sh
similarity index 100%
rename from e2e/test_reconnection.sh
rename to framework/e2e/test_reconnection.sh
diff --git a/e2e/test_superlink.sh b/framework/e2e/test_superlink.sh
similarity index 100%
rename from e2e/test_superlink.sh
rename to framework/e2e/test_superlink.sh
diff --git a/src/cc/flwr/.gitignore b/framework/src/cc/flwr/.gitignore
similarity index 100%
rename from src/cc/flwr/.gitignore
rename to framework/src/cc/flwr/.gitignore
diff --git a/src/cc/flwr/CMakeLists.txt b/framework/src/cc/flwr/CMakeLists.txt
similarity index 98%
rename from src/cc/flwr/CMakeLists.txt
rename to framework/src/cc/flwr/CMakeLists.txt
index 9955d21e84ad..ab83d1f08ccd 100644
--- a/src/cc/flwr/CMakeLists.txt
+++ b/framework/src/cc/flwr/CMakeLists.txt
@@ -75,6 +75,8 @@ GENERATE_AND_COPY(task)
GENERATE_AND_COPY(fleet)
GENERATE_AND_COPY(error)
GENERATE_AND_COPY(recordset)
+GENERATE_AND_COPY(fab)
+GENERATE_AND_COPY(run)
add_library(flwr_grpc_proto STATIC ${ALL_PROTO_FILES})
diff --git a/src/cc/flwr/cmake/StartLibConfig.cmake.in b/framework/src/cc/flwr/cmake/StartLibConfig.cmake.in
similarity index 100%
rename from src/cc/flwr/cmake/StartLibConfig.cmake.in
rename to framework/src/cc/flwr/cmake/StartLibConfig.cmake.in
diff --git a/src/cc/flwr/cmake/flwrConfig.cmake.in b/framework/src/cc/flwr/cmake/flwrConfig.cmake.in
similarity index 100%
rename from src/cc/flwr/cmake/flwrConfig.cmake.in
rename to framework/src/cc/flwr/cmake/flwrConfig.cmake.in
diff --git a/src/cc/flwr/include/client.h b/framework/src/cc/flwr/include/client.h
similarity index 100%
rename from src/cc/flwr/include/client.h
rename to framework/src/cc/flwr/include/client.h
diff --git a/src/cc/flwr/include/communicator.h b/framework/src/cc/flwr/include/communicator.h
similarity index 100%
rename from src/cc/flwr/include/communicator.h
rename to framework/src/cc/flwr/include/communicator.h
diff --git a/src/cc/flwr/include/flwr/proto/error.grpc.pb.cc b/framework/src/cc/flwr/include/flwr/proto/error.grpc.pb.cc
similarity index 100%
rename from src/cc/flwr/include/flwr/proto/error.grpc.pb.cc
rename to framework/src/cc/flwr/include/flwr/proto/error.grpc.pb.cc
diff --git a/src/cc/flwr/include/flwr/proto/error.grpc.pb.h b/framework/src/cc/flwr/include/flwr/proto/error.grpc.pb.h
similarity index 100%
rename from src/cc/flwr/include/flwr/proto/error.grpc.pb.h
rename to framework/src/cc/flwr/include/flwr/proto/error.grpc.pb.h
diff --git a/src/cc/flwr/include/flwr/proto/error.pb.cc b/framework/src/cc/flwr/include/flwr/proto/error.pb.cc
similarity index 100%
rename from src/cc/flwr/include/flwr/proto/error.pb.cc
rename to framework/src/cc/flwr/include/flwr/proto/error.pb.cc
diff --git a/src/cc/flwr/include/flwr/proto/error.pb.h b/framework/src/cc/flwr/include/flwr/proto/error.pb.h
similarity index 100%
rename from src/cc/flwr/include/flwr/proto/error.pb.h
rename to framework/src/cc/flwr/include/flwr/proto/error.pb.h
diff --git a/framework/src/cc/flwr/include/flwr/proto/fab.grpc.pb.cc b/framework/src/cc/flwr/include/flwr/proto/fab.grpc.pb.cc
new file mode 100644
index 000000000000..53ed1fc926a4
--- /dev/null
+++ b/framework/src/cc/flwr/include/flwr/proto/fab.grpc.pb.cc
@@ -0,0 +1,27 @@
+// Generated by the gRPC C++ plugin.
+// If you make any local change, they will be lost.
+// source: flwr/proto/fab.proto
+
+#include "flwr/proto/fab.pb.h"
+#include "flwr/proto/fab.grpc.pb.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+namespace flwr {
+namespace proto {
+
+} // namespace flwr
+} // namespace proto
+
diff --git a/framework/src/cc/flwr/include/flwr/proto/fab.grpc.pb.h b/framework/src/cc/flwr/include/flwr/proto/fab.grpc.pb.h
new file mode 100644
index 000000000000..593e4e18673b
--- /dev/null
+++ b/framework/src/cc/flwr/include/flwr/proto/fab.grpc.pb.h
@@ -0,0 +1,51 @@
+// Generated by the gRPC C++ plugin.
+// If you make any local change, they will be lost.
+// source: flwr/proto/fab.proto
+// Original file comments:
+// Copyright 2024 Flower Labs GmbH. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ==============================================================================
+//
+#ifndef GRPC_flwr_2fproto_2ffab_2eproto__INCLUDED
+#define GRPC_flwr_2fproto_2ffab_2eproto__INCLUDED
+
+#include "flwr/proto/fab.pb.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace flwr {
+namespace proto {
+
+} // namespace proto
+} // namespace flwr
+
+
+#endif // GRPC_flwr_2fproto_2ffab_2eproto__INCLUDED
diff --git a/framework/src/cc/flwr/include/flwr/proto/fab.pb.cc b/framework/src/cc/flwr/include/flwr/proto/fab.pb.cc
new file mode 100644
index 000000000000..547c1d2e9cea
--- /dev/null
+++ b/framework/src/cc/flwr/include/flwr/proto/fab.pb.cc
@@ -0,0 +1,821 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: flwr/proto/fab.proto
+
+#include "flwr/proto/fab.pb.h"
+
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+// @@protoc_insertion_point(includes)
+#include
+
+PROTOBUF_PRAGMA_INIT_SEG
+namespace flwr {
+namespace proto {
+constexpr Fab::Fab(
+ ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized)
+ : hash_str_(&::PROTOBUF_NAMESPACE_ID::internal::fixed_address_empty_string)
+ , content_(&::PROTOBUF_NAMESPACE_ID::internal::fixed_address_empty_string){}
+struct FabDefaultTypeInternal {
+ constexpr FabDefaultTypeInternal()
+ : _instance(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized{}) {}
+ ~FabDefaultTypeInternal() {}
+ union {
+ Fab _instance;
+ };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT FabDefaultTypeInternal _Fab_default_instance_;
+constexpr GetFabRequest::GetFabRequest(
+ ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized)
+ : hash_str_(&::PROTOBUF_NAMESPACE_ID::internal::fixed_address_empty_string)
+ , node_(nullptr){}
+struct GetFabRequestDefaultTypeInternal {
+ constexpr GetFabRequestDefaultTypeInternal()
+ : _instance(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized{}) {}
+ ~GetFabRequestDefaultTypeInternal() {}
+ union {
+ GetFabRequest _instance;
+ };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT GetFabRequestDefaultTypeInternal _GetFabRequest_default_instance_;
+constexpr GetFabResponse::GetFabResponse(
+ ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized)
+ : fab_(nullptr){}
+struct GetFabResponseDefaultTypeInternal {
+ constexpr GetFabResponseDefaultTypeInternal()
+ : _instance(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized{}) {}
+ ~GetFabResponseDefaultTypeInternal() {}
+ union {
+ GetFabResponse _instance;
+ };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT GetFabResponseDefaultTypeInternal _GetFabResponse_default_instance_;
+} // namespace proto
+} // namespace flwr
+static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_flwr_2fproto_2ffab_2eproto[3];
+static constexpr ::PROTOBUF_NAMESPACE_ID::EnumDescriptor const** file_level_enum_descriptors_flwr_2fproto_2ffab_2eproto = nullptr;
+static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_flwr_2fproto_2ffab_2eproto = nullptr;
+
+const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_flwr_2fproto_2ffab_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
+ ~0u, // no _has_bits_
+ PROTOBUF_FIELD_OFFSET(::flwr::proto::Fab, _internal_metadata_),
+ ~0u, // no _extensions_
+ ~0u, // no _oneof_case_
+ ~0u, // no _weak_field_map_
+ ~0u, // no _inlined_string_donated_
+ PROTOBUF_FIELD_OFFSET(::flwr::proto::Fab, hash_str_),
+ PROTOBUF_FIELD_OFFSET(::flwr::proto::Fab, content_),
+ ~0u, // no _has_bits_
+ PROTOBUF_FIELD_OFFSET(::flwr::proto::GetFabRequest, _internal_metadata_),
+ ~0u, // no _extensions_
+ ~0u, // no _oneof_case_
+ ~0u, // no _weak_field_map_
+ ~0u, // no _inlined_string_donated_
+ PROTOBUF_FIELD_OFFSET(::flwr::proto::GetFabRequest, node_),
+ PROTOBUF_FIELD_OFFSET(::flwr::proto::GetFabRequest, hash_str_),
+ ~0u, // no _has_bits_
+ PROTOBUF_FIELD_OFFSET(::flwr::proto::GetFabResponse, _internal_metadata_),
+ ~0u, // no _extensions_
+ ~0u, // no _oneof_case_
+ ~0u, // no _weak_field_map_
+ ~0u, // no _inlined_string_donated_
+ PROTOBUF_FIELD_OFFSET(::flwr::proto::GetFabResponse, fab_),
+};
+static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
+ { 0, -1, -1, sizeof(::flwr::proto::Fab)},
+ { 8, -1, -1, sizeof(::flwr::proto::GetFabRequest)},
+ { 16, -1, -1, sizeof(::flwr::proto::GetFabResponse)},
+};
+
+static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
+ reinterpret_cast(&::flwr::proto::_Fab_default_instance_),
+ reinterpret_cast(&::flwr::proto::_GetFabRequest_default_instance_),
+ reinterpret_cast(&::flwr::proto::_GetFabResponse_default_instance_),
+};
+
+const char descriptor_table_protodef_flwr_2fproto_2ffab_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
+ "\n\024flwr/proto/fab.proto\022\nflwr.proto\032\025flwr"
+ "/proto/node.proto\"(\n\003Fab\022\020\n\010hash_str\030\001 \001"
+ "(\t\022\017\n\007content\030\002 \001(\014\"A\n\rGetFabRequest\022\036\n\004"
+ "node\030\001 \001(\0132\020.flwr.proto.Node\022\020\n\010hash_str"
+ "\030\002 \001(\t\".\n\016GetFabResponse\022\034\n\003fab\030\001 \001(\0132\017."
+ "flwr.proto.Fabb\006proto3"
+ ;
+static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_flwr_2fproto_2ffab_2eproto_deps[1] = {
+ &::descriptor_table_flwr_2fproto_2fnode_2eproto,
+};
+static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_flwr_2fproto_2ffab_2eproto_once;
+const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_flwr_2fproto_2ffab_2eproto = {
+ false, false, 222, descriptor_table_protodef_flwr_2fproto_2ffab_2eproto, "flwr/proto/fab.proto",
+ &descriptor_table_flwr_2fproto_2ffab_2eproto_once, descriptor_table_flwr_2fproto_2ffab_2eproto_deps, 1, 3,
+ schemas, file_default_instances, TableStruct_flwr_2fproto_2ffab_2eproto::offsets,
+ file_level_metadata_flwr_2fproto_2ffab_2eproto, file_level_enum_descriptors_flwr_2fproto_2ffab_2eproto, file_level_service_descriptors_flwr_2fproto_2ffab_2eproto,
+};
+PROTOBUF_ATTRIBUTE_WEAK const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable* descriptor_table_flwr_2fproto_2ffab_2eproto_getter() {
+ return &descriptor_table_flwr_2fproto_2ffab_2eproto;
+}
+
+// Force running AddDescriptors() at dynamic initialization time.
+PROTOBUF_ATTRIBUTE_INIT_PRIORITY static ::PROTOBUF_NAMESPACE_ID::internal::AddDescriptorsRunner dynamic_init_dummy_flwr_2fproto_2ffab_2eproto(&descriptor_table_flwr_2fproto_2ffab_2eproto);
+namespace flwr {
+namespace proto {
+
+// ===================================================================
+
+class Fab::_Internal {
+ public:
+};
+
+Fab::Fab(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+ bool is_message_owned)
+ : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+ SharedCtor();
+ if (!is_message_owned) {
+ RegisterArenaDtor(arena);
+ }
+ // @@protoc_insertion_point(arena_constructor:flwr.proto.Fab)
+}
+Fab::Fab(const Fab& from)
+ : ::PROTOBUF_NAMESPACE_ID::Message() {
+ _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+ hash_str_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+ if (!from._internal_hash_str().empty()) {
+ hash_str_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_hash_str(),
+ GetArenaForAllocation());
+ }
+ content_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+ if (!from._internal_content().empty()) {
+ content_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_content(),
+ GetArenaForAllocation());
+ }
+ // @@protoc_insertion_point(copy_constructor:flwr.proto.Fab)
+}
+
+void Fab::SharedCtor() {
+hash_str_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+content_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+
+Fab::~Fab() {
+ // @@protoc_insertion_point(destructor:flwr.proto.Fab)
+ if (GetArenaForAllocation() != nullptr) return;
+ SharedDtor();
+ _internal_metadata_.Delete<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+inline void Fab::SharedDtor() {
+ GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+ hash_str_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+ content_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+
+void Fab::ArenaDtor(void* object) {
+ Fab* _this = reinterpret_cast< Fab* >(object);
+ (void)_this;
+}
+void Fab::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
+}
+void Fab::SetCachedSize(int size) const {
+ _cached_size_.Set(size);
+}
+
+void Fab::Clear() {
+// @@protoc_insertion_point(message_clear_start:flwr.proto.Fab)
+ ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+ // Prevent compiler warnings about cached_has_bits being unused
+ (void) cached_has_bits;
+
+ hash_str_.ClearToEmpty();
+ content_.ClearToEmpty();
+ _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* Fab::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+ while (!ctx->Done(&ptr)) {
+ ::PROTOBUF_NAMESPACE_ID::uint32 tag;
+ ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
+ switch (tag >> 3) {
+ // string hash_str = 1;
+ case 1:
+ if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
+ auto str = _internal_mutable_hash_str();
+ ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
+ CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "flwr.proto.Fab.hash_str"));
+ CHK_(ptr);
+ } else
+ goto handle_unusual;
+ continue;
+ // bytes content = 2;
+ case 2:
+ if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
+ auto str = _internal_mutable_content();
+ ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
+ CHK_(ptr);
+ } else
+ goto handle_unusual;
+ continue;
+ default:
+ goto handle_unusual;
+ } // switch
+ handle_unusual:
+ if ((tag == 0) || ((tag & 7) == 4)) {
+ CHK_(ptr);
+ ctx->SetLastTag(tag);
+ goto message_done;
+ }
+ ptr = UnknownFieldParse(
+ tag,
+ _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+ ptr, ctx);
+ CHK_(ptr != nullptr);
+ } // while
+message_done:
+ return ptr;
+failure:
+ ptr = nullptr;
+ goto message_done;
+#undef CHK_
+}
+
+::PROTOBUF_NAMESPACE_ID::uint8* Fab::_InternalSerialize(
+ ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+ // @@protoc_insertion_point(serialize_to_array_start:flwr.proto.Fab)
+ ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+ (void) cached_has_bits;
+
+ // string hash_str = 1;
+ if (!this->_internal_hash_str().empty()) {
+ ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+ this->_internal_hash_str().data(), static_cast(this->_internal_hash_str().length()),
+ ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+ "flwr.proto.Fab.hash_str");
+ target = stream->WriteStringMaybeAliased(
+ 1, this->_internal_hash_str(), target);
+ }
+
+ // bytes content = 2;
+ if (!this->_internal_content().empty()) {
+ target = stream->WriteBytesMaybeAliased(
+ 2, this->_internal_content(), target);
+ }
+
+ if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+ target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
+ _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+ }
+ // @@protoc_insertion_point(serialize_to_array_end:flwr.proto.Fab)
+ return target;
+}
+
+size_t Fab::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:flwr.proto.Fab)
+ size_t total_size = 0;
+
+ ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+ // Prevent compiler warnings about cached_has_bits being unused
+ (void) cached_has_bits;
+
+ // string hash_str = 1;
+ if (!this->_internal_hash_str().empty()) {
+ total_size += 1 +
+ ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+ this->_internal_hash_str());
+ }
+
+ // bytes content = 2;
+ if (!this->_internal_content().empty()) {
+ total_size += 1 +
+ ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
+ this->_internal_content());
+ }
+
+ return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Fab::_class_data_ = {
+ ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+ Fab::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Fab::GetClassData() const { return &_class_data_; }
+
+void Fab::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+ const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+ static_cast(to)->MergeFrom(
+ static_cast(from));
+}
+
+
+void Fab::MergeFrom(const Fab& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:flwr.proto.Fab)
+ GOOGLE_DCHECK_NE(&from, this);
+ ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+ (void) cached_has_bits;
+
+ if (!from._internal_hash_str().empty()) {
+ _internal_set_hash_str(from._internal_hash_str());
+ }
+ if (!from._internal_content().empty()) {
+ _internal_set_content(from._internal_content());
+ }
+ _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void Fab::CopyFrom(const Fab& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:flwr.proto.Fab)
+ if (&from == this) return;
+ Clear();
+ MergeFrom(from);
+}
+
+bool Fab::IsInitialized() const {
+ return true;
+}
+
+void Fab::InternalSwap(Fab* other) {
+ using std::swap;
+ auto* lhs_arena = GetArenaForAllocation();
+ auto* rhs_arena = other->GetArenaForAllocation();
+ _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+ ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+ &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+ &hash_str_, lhs_arena,
+ &other->hash_str_, rhs_arena
+ );
+ ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+ &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+ &content_, lhs_arena,
+ &other->content_, rhs_arena
+ );
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata Fab::GetMetadata() const {
+ return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
+ &descriptor_table_flwr_2fproto_2ffab_2eproto_getter, &descriptor_table_flwr_2fproto_2ffab_2eproto_once,
+ file_level_metadata_flwr_2fproto_2ffab_2eproto[0]);
+}
+
+// ===================================================================
+
+class GetFabRequest::_Internal {
+ public:
+ static const ::flwr::proto::Node& node(const GetFabRequest* msg);
+};
+
+const ::flwr::proto::Node&
+GetFabRequest::_Internal::node(const GetFabRequest* msg) {
+ return *msg->node_;
+}
+void GetFabRequest::clear_node() {
+ if (GetArenaForAllocation() == nullptr && node_ != nullptr) {
+ delete node_;
+ }
+ node_ = nullptr;
+}
+GetFabRequest::GetFabRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+ bool is_message_owned)
+ : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+ SharedCtor();
+ if (!is_message_owned) {
+ RegisterArenaDtor(arena);
+ }
+ // @@protoc_insertion_point(arena_constructor:flwr.proto.GetFabRequest)
+}
+GetFabRequest::GetFabRequest(const GetFabRequest& from)
+ : ::PROTOBUF_NAMESPACE_ID::Message() {
+ _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+ hash_str_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+ if (!from._internal_hash_str().empty()) {
+ hash_str_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_hash_str(),
+ GetArenaForAllocation());
+ }
+ if (from._internal_has_node()) {
+ node_ = new ::flwr::proto::Node(*from.node_);
+ } else {
+ node_ = nullptr;
+ }
+ // @@protoc_insertion_point(copy_constructor:flwr.proto.GetFabRequest)
+}
+
+void GetFabRequest::SharedCtor() {
+hash_str_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+node_ = nullptr;
+}
+
+GetFabRequest::~GetFabRequest() {
+ // @@protoc_insertion_point(destructor:flwr.proto.GetFabRequest)
+ if (GetArenaForAllocation() != nullptr) return;
+ SharedDtor();
+ _internal_metadata_.Delete<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+inline void GetFabRequest::SharedDtor() {
+ GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+ hash_str_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+ if (this != internal_default_instance()) delete node_;
+}
+
+void GetFabRequest::ArenaDtor(void* object) {
+ GetFabRequest* _this = reinterpret_cast< GetFabRequest* >(object);
+ (void)_this;
+}
+void GetFabRequest::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
+}
+void GetFabRequest::SetCachedSize(int size) const {
+ _cached_size_.Set(size);
+}
+
+void GetFabRequest::Clear() {
+// @@protoc_insertion_point(message_clear_start:flwr.proto.GetFabRequest)
+ ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+ // Prevent compiler warnings about cached_has_bits being unused
+ (void) cached_has_bits;
+
+ hash_str_.ClearToEmpty();
+ if (GetArenaForAllocation() == nullptr && node_ != nullptr) {
+ delete node_;
+ }
+ node_ = nullptr;
+ _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* GetFabRequest::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+ while (!ctx->Done(&ptr)) {
+ ::PROTOBUF_NAMESPACE_ID::uint32 tag;
+ ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
+ switch (tag >> 3) {
+ // .flwr.proto.Node node = 1;
+ case 1:
+ if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
+ ptr = ctx->ParseMessage(_internal_mutable_node(), ptr);
+ CHK_(ptr);
+ } else
+ goto handle_unusual;
+ continue;
+ // string hash_str = 2;
+ case 2:
+ if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
+ auto str = _internal_mutable_hash_str();
+ ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
+ CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "flwr.proto.GetFabRequest.hash_str"));
+ CHK_(ptr);
+ } else
+ goto handle_unusual;
+ continue;
+ default:
+ goto handle_unusual;
+ } // switch
+ handle_unusual:
+ if ((tag == 0) || ((tag & 7) == 4)) {
+ CHK_(ptr);
+ ctx->SetLastTag(tag);
+ goto message_done;
+ }
+ ptr = UnknownFieldParse(
+ tag,
+ _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+ ptr, ctx);
+ CHK_(ptr != nullptr);
+ } // while
+message_done:
+ return ptr;
+failure:
+ ptr = nullptr;
+ goto message_done;
+#undef CHK_
+}
+
+::PROTOBUF_NAMESPACE_ID::uint8* GetFabRequest::_InternalSerialize(
+ ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+ // @@protoc_insertion_point(serialize_to_array_start:flwr.proto.GetFabRequest)
+ ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+ (void) cached_has_bits;
+
+ // .flwr.proto.Node node = 1;
+ if (this->_internal_has_node()) {
+ target = stream->EnsureSpace(target);
+ target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+ InternalWriteMessage(
+ 1, _Internal::node(this), target, stream);
+ }
+
+ // string hash_str = 2;
+ if (!this->_internal_hash_str().empty()) {
+ ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+ this->_internal_hash_str().data(), static_cast(this->_internal_hash_str().length()),
+ ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+ "flwr.proto.GetFabRequest.hash_str");
+ target = stream->WriteStringMaybeAliased(
+ 2, this->_internal_hash_str(), target);
+ }
+
+ if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+ target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
+ _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+ }
+ // @@protoc_insertion_point(serialize_to_array_end:flwr.proto.GetFabRequest)
+ return target;
+}
+
+size_t GetFabRequest::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:flwr.proto.GetFabRequest)
+ size_t total_size = 0;
+
+ ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+ // Prevent compiler warnings about cached_has_bits being unused
+ (void) cached_has_bits;
+
+ // string hash_str = 2;
+ if (!this->_internal_hash_str().empty()) {
+ total_size += 1 +
+ ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+ this->_internal_hash_str());
+ }
+
+ // .flwr.proto.Node node = 1;
+ if (this->_internal_has_node()) {
+ total_size += 1 +
+ ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+ *node_);
+ }
+
+ return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData GetFabRequest::_class_data_ = {
+ ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+ GetFabRequest::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetFabRequest::GetClassData() const { return &_class_data_; }
+
+void GetFabRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+ const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+ static_cast(to)->MergeFrom(
+ static_cast(from));
+}
+
+
+void GetFabRequest::MergeFrom(const GetFabRequest& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:flwr.proto.GetFabRequest)
+ GOOGLE_DCHECK_NE(&from, this);
+ ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+ (void) cached_has_bits;
+
+ if (!from._internal_hash_str().empty()) {
+ _internal_set_hash_str(from._internal_hash_str());
+ }
+ if (from._internal_has_node()) {
+ _internal_mutable_node()->::flwr::proto::Node::MergeFrom(from._internal_node());
+ }
+ _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void GetFabRequest::CopyFrom(const GetFabRequest& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:flwr.proto.GetFabRequest)
+ if (&from == this) return;
+ Clear();
+ MergeFrom(from);
+}
+
+bool GetFabRequest::IsInitialized() const {
+ return true;
+}
+
+void GetFabRequest::InternalSwap(GetFabRequest* other) {
+ using std::swap;
+ auto* lhs_arena = GetArenaForAllocation();
+ auto* rhs_arena = other->GetArenaForAllocation();
+ _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+ ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+ &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+ &hash_str_, lhs_arena,
+ &other->hash_str_, rhs_arena
+ );
+ swap(node_, other->node_);
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata GetFabRequest::GetMetadata() const {
+ return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
+ &descriptor_table_flwr_2fproto_2ffab_2eproto_getter, &descriptor_table_flwr_2fproto_2ffab_2eproto_once,
+ file_level_metadata_flwr_2fproto_2ffab_2eproto[1]);
+}
+
+// ===================================================================
+
+class GetFabResponse::_Internal {
+ public:
+ static const ::flwr::proto::Fab& fab(const GetFabResponse* msg);
+};
+
+const ::flwr::proto::Fab&
+GetFabResponse::_Internal::fab(const GetFabResponse* msg) {
+ return *msg->fab_;
+}
+GetFabResponse::GetFabResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+ bool is_message_owned)
+ : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+ SharedCtor();
+ if (!is_message_owned) {
+ RegisterArenaDtor(arena);
+ }
+ // @@protoc_insertion_point(arena_constructor:flwr.proto.GetFabResponse)
+}
+GetFabResponse::GetFabResponse(const GetFabResponse& from)
+ : ::PROTOBUF_NAMESPACE_ID::Message() {
+ _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+ if (from._internal_has_fab()) {
+ fab_ = new ::flwr::proto::Fab(*from.fab_);
+ } else {
+ fab_ = nullptr;
+ }
+ // @@protoc_insertion_point(copy_constructor:flwr.proto.GetFabResponse)
+}
+
+void GetFabResponse::SharedCtor() {
+fab_ = nullptr;
+}
+
+GetFabResponse::~GetFabResponse() {
+ // @@protoc_insertion_point(destructor:flwr.proto.GetFabResponse)
+ if (GetArenaForAllocation() != nullptr) return;
+ SharedDtor();
+ _internal_metadata_.Delete<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+inline void GetFabResponse::SharedDtor() {
+ GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+ if (this != internal_default_instance()) delete fab_;
+}
+
+void GetFabResponse::ArenaDtor(void* object) {
+ GetFabResponse* _this = reinterpret_cast< GetFabResponse* >(object);
+ (void)_this;
+}
+void GetFabResponse::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
+}
+void GetFabResponse::SetCachedSize(int size) const {
+ _cached_size_.Set(size);
+}
+
+void GetFabResponse::Clear() {
+// @@protoc_insertion_point(message_clear_start:flwr.proto.GetFabResponse)
+ ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+ // Prevent compiler warnings about cached_has_bits being unused
+ (void) cached_has_bits;
+
+ if (GetArenaForAllocation() == nullptr && fab_ != nullptr) {
+ delete fab_;
+ }
+ fab_ = nullptr;
+ _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* GetFabResponse::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+ while (!ctx->Done(&ptr)) {
+ ::PROTOBUF_NAMESPACE_ID::uint32 tag;
+ ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
+ switch (tag >> 3) {
+ // .flwr.proto.Fab fab = 1;
+ case 1:
+ if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
+ ptr = ctx->ParseMessage(_internal_mutable_fab(), ptr);
+ CHK_(ptr);
+ } else
+ goto handle_unusual;
+ continue;
+ default:
+ goto handle_unusual;
+ } // switch
+ handle_unusual:
+ if ((tag == 0) || ((tag & 7) == 4)) {
+ CHK_(ptr);
+ ctx->SetLastTag(tag);
+ goto message_done;
+ }
+ ptr = UnknownFieldParse(
+ tag,
+ _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+ ptr, ctx);
+ CHK_(ptr != nullptr);
+ } // while
+message_done:
+ return ptr;
+failure:
+ ptr = nullptr;
+ goto message_done;
+#undef CHK_
+}
+
+::PROTOBUF_NAMESPACE_ID::uint8* GetFabResponse::_InternalSerialize(
+ ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+ // @@protoc_insertion_point(serialize_to_array_start:flwr.proto.GetFabResponse)
+ ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+ (void) cached_has_bits;
+
+ // .flwr.proto.Fab fab = 1;
+ if (this->_internal_has_fab()) {
+ target = stream->EnsureSpace(target);
+ target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+ InternalWriteMessage(
+ 1, _Internal::fab(this), target, stream);
+ }
+
+ if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+ target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
+ _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+ }
+ // @@protoc_insertion_point(serialize_to_array_end:flwr.proto.GetFabResponse)
+ return target;
+}
+
+size_t GetFabResponse::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:flwr.proto.GetFabResponse)
+ size_t total_size = 0;
+
+ ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+ // Prevent compiler warnings about cached_has_bits being unused
+ (void) cached_has_bits;
+
+ // .flwr.proto.Fab fab = 1;
+ if (this->_internal_has_fab()) {
+ total_size += 1 +
+ ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+ *fab_);
+ }
+
+ return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData GetFabResponse::_class_data_ = {
+ ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+ GetFabResponse::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetFabResponse::GetClassData() const { return &_class_data_; }
+
+void GetFabResponse::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+ const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+ static_cast(to)->MergeFrom(
+ static_cast(from));
+}
+
+
+void GetFabResponse::MergeFrom(const GetFabResponse& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:flwr.proto.GetFabResponse)
+ GOOGLE_DCHECK_NE(&from, this);
+ ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+ (void) cached_has_bits;
+
+ if (from._internal_has_fab()) {
+ _internal_mutable_fab()->::flwr::proto::Fab::MergeFrom(from._internal_fab());
+ }
+ _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void GetFabResponse::CopyFrom(const GetFabResponse& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:flwr.proto.GetFabResponse)
+ if (&from == this) return;
+ Clear();
+ MergeFrom(from);
+}
+
+bool GetFabResponse::IsInitialized() const {
+ return true;
+}
+
+void GetFabResponse::InternalSwap(GetFabResponse* other) {
+ using std::swap;
+ _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+ swap(fab_, other->fab_);
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata GetFabResponse::GetMetadata() const {
+ return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
+ &descriptor_table_flwr_2fproto_2ffab_2eproto_getter, &descriptor_table_flwr_2fproto_2ffab_2eproto_once,
+ file_level_metadata_flwr_2fproto_2ffab_2eproto[2]);
+}
+
+// @@protoc_insertion_point(namespace_scope)
+} // namespace proto
+} // namespace flwr
+PROTOBUF_NAMESPACE_OPEN
+template<> PROTOBUF_NOINLINE ::flwr::proto::Fab* Arena::CreateMaybeMessage< ::flwr::proto::Fab >(Arena* arena) {
+ return Arena::CreateMessageInternal< ::flwr::proto::Fab >(arena);
+}
+template<> PROTOBUF_NOINLINE ::flwr::proto::GetFabRequest* Arena::CreateMaybeMessage< ::flwr::proto::GetFabRequest >(Arena* arena) {
+ return Arena::CreateMessageInternal< ::flwr::proto::GetFabRequest >(arena);
+}
+template<> PROTOBUF_NOINLINE ::flwr::proto::GetFabResponse* Arena::CreateMaybeMessage< ::flwr::proto::GetFabResponse >(Arena* arena) {
+ return Arena::CreateMessageInternal< ::flwr::proto::GetFabResponse >(arena);
+}
+PROTOBUF_NAMESPACE_CLOSE
+
+// @@protoc_insertion_point(global_scope)
+#include
diff --git a/framework/src/cc/flwr/include/flwr/proto/fab.pb.h b/framework/src/cc/flwr/include/flwr/proto/fab.pb.h
new file mode 100644
index 000000000000..b80703990636
--- /dev/null
+++ b/framework/src/cc/flwr/include/flwr/proto/fab.pb.h
@@ -0,0 +1,911 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: flwr/proto/fab.proto
+
+#ifndef GOOGLE_PROTOBUF_INCLUDED_flwr_2fproto_2ffab_2eproto
+#define GOOGLE_PROTOBUF_INCLUDED_flwr_2fproto_2ffab_2eproto
+
+#include
+#include
+
+#include
+#if PROTOBUF_VERSION < 3018000
+#error This file was generated by a newer version of protoc which is
+#error incompatible with your Protocol Buffer headers. Please update
+#error your headers.
+#endif
+#if 3018001 < PROTOBUF_MIN_PROTOC_VERSION
+#error This file was generated by an older version of protoc which is
+#error incompatible with your Protocol Buffer headers. Please
+#error regenerate this file with a newer version of protoc.
+#endif
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include // IWYU pragma: export
+#include // IWYU pragma: export
+#include
+#include "flwr/proto/node.pb.h"
+// @@protoc_insertion_point(includes)
+#include
+#define PROTOBUF_INTERNAL_EXPORT_flwr_2fproto_2ffab_2eproto
+PROTOBUF_NAMESPACE_OPEN
+namespace internal {
+class AnyMetadata;
+} // namespace internal
+PROTOBUF_NAMESPACE_CLOSE
+
+// Internal implementation detail -- do not use these members.
+struct TableStruct_flwr_2fproto_2ffab_2eproto {
+ static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[]
+ PROTOBUF_SECTION_VARIABLE(protodesc_cold);
+ static const ::PROTOBUF_NAMESPACE_ID::internal::AuxiliaryParseTableField aux[]
+ PROTOBUF_SECTION_VARIABLE(protodesc_cold);
+ static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[3]
+ PROTOBUF_SECTION_VARIABLE(protodesc_cold);
+ static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
+ static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
+ static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
+};
+extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_flwr_2fproto_2ffab_2eproto;
+namespace flwr {
+namespace proto {
+class Fab;
+struct FabDefaultTypeInternal;
+extern FabDefaultTypeInternal _Fab_default_instance_;
+class GetFabRequest;
+struct GetFabRequestDefaultTypeInternal;
+extern GetFabRequestDefaultTypeInternal _GetFabRequest_default_instance_;
+class GetFabResponse;
+struct GetFabResponseDefaultTypeInternal;
+extern GetFabResponseDefaultTypeInternal _GetFabResponse_default_instance_;
+} // namespace proto
+} // namespace flwr
+PROTOBUF_NAMESPACE_OPEN
+template<> ::flwr::proto::Fab* Arena::CreateMaybeMessage<::flwr::proto::Fab>(Arena*);
+template<> ::flwr::proto::GetFabRequest* Arena::CreateMaybeMessage<::flwr::proto::GetFabRequest>(Arena*);
+template<> ::flwr::proto::GetFabResponse* Arena::CreateMaybeMessage<::flwr::proto::GetFabResponse>(Arena*);
+PROTOBUF_NAMESPACE_CLOSE
+namespace flwr {
+namespace proto {
+
+// ===================================================================
+
+class Fab final :
+ public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:flwr.proto.Fab) */ {
+ public:
+ inline Fab() : Fab(nullptr) {}
+ ~Fab() override;
+ explicit constexpr Fab(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+ Fab(const Fab& from);
+ Fab(Fab&& from) noexcept
+ : Fab() {
+ *this = ::std::move(from);
+ }
+
+ inline Fab& operator=(const Fab& from) {
+ CopyFrom(from);
+ return *this;
+ }
+ inline Fab& operator=(Fab&& from) noexcept {
+ if (this == &from) return *this;
+ if (GetOwningArena() == from.GetOwningArena()
+ #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+ && GetOwningArena() != nullptr
+ #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+ ) {
+ InternalSwap(&from);
+ } else {
+ CopyFrom(from);
+ }
+ return *this;
+ }
+
+ static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+ return GetDescriptor();
+ }
+ static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+ return default_instance().GetMetadata().descriptor;
+ }
+ static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+ return default_instance().GetMetadata().reflection;
+ }
+ static const Fab& default_instance() {
+ return *internal_default_instance();
+ }
+ static inline const Fab* internal_default_instance() {
+ return reinterpret_cast(
+ &_Fab_default_instance_);
+ }
+ static constexpr int kIndexInFileMessages =
+ 0;
+
+ friend void swap(Fab& a, Fab& b) {
+ a.Swap(&b);
+ }
+ inline void Swap(Fab* other) {
+ if (other == this) return;
+ if (GetOwningArena() == other->GetOwningArena()) {
+ InternalSwap(other);
+ } else {
+ ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+ }
+ }
+ void UnsafeArenaSwap(Fab* other) {
+ if (other == this) return;
+ GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+ InternalSwap(other);
+ }
+
+ // implements Message ----------------------------------------------
+
+ inline Fab* New() const final {
+ return new Fab();
+ }
+
+ Fab* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
+ return CreateMaybeMessage(arena);
+ }
+ using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+ void CopyFrom(const Fab& from);
+ using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+ void MergeFrom(const Fab& from);
+ private:
+ static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+ public:
+ PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+ bool IsInitialized() const final;
+
+ size_t ByteSizeLong() const final;
+ const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+ ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
+ ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+ int GetCachedSize() const final { return _cached_size_.Get(); }
+
+ private:
+ void SharedCtor();
+ void SharedDtor();
+ void SetCachedSize(int size) const final;
+ void InternalSwap(Fab* other);
+ friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+ static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+ return "flwr.proto.Fab";
+ }
+ protected:
+ explicit Fab(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+ bool is_message_owned = false);
+ private:
+ static void ArenaDtor(void* object);
+ inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
+ public:
+
+ static const ClassData _class_data_;
+ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+ ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+ // nested types ----------------------------------------------------
+
+ // accessors -------------------------------------------------------
+
+ enum : int {
+ kHashStrFieldNumber = 1,
+ kContentFieldNumber = 2,
+ };
+ // string hash_str = 1;
+ void clear_hash_str();
+ const std::string& hash_str() const;
+ template
+ void set_hash_str(ArgT0&& arg0, ArgT... args);
+ std::string* mutable_hash_str();
+ PROTOBUF_MUST_USE_RESULT std::string* release_hash_str();
+ void set_allocated_hash_str(std::string* hash_str);
+ private:
+ const std::string& _internal_hash_str() const;
+ inline PROTOBUF_ALWAYS_INLINE void _internal_set_hash_str(const std::string& value);
+ std::string* _internal_mutable_hash_str();
+ public:
+
+ // bytes content = 2;
+ void clear_content();
+ const std::string& content() const;
+ template
+ void set_content(ArgT0&& arg0, ArgT... args);
+ std::string* mutable_content();
+ PROTOBUF_MUST_USE_RESULT std::string* release_content();
+ void set_allocated_content(std::string* content);
+ private:
+ const std::string& _internal_content() const;
+ inline PROTOBUF_ALWAYS_INLINE void _internal_set_content(const std::string& value);
+ std::string* _internal_mutable_content();
+ public:
+
+ // @@protoc_insertion_point(class_scope:flwr.proto.Fab)
+ private:
+ class _Internal;
+
+ template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+ typedef void InternalArenaConstructable_;
+ typedef void DestructorSkippable_;
+ ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr hash_str_;
+ ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr content_;
+ mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+ friend struct ::TableStruct_flwr_2fproto_2ffab_2eproto;
+};
+// -------------------------------------------------------------------
+
+class GetFabRequest final :
+ public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:flwr.proto.GetFabRequest) */ {
+ public:
+ inline GetFabRequest() : GetFabRequest(nullptr) {}
+ ~GetFabRequest() override;
+ explicit constexpr GetFabRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+ GetFabRequest(const GetFabRequest& from);
+ GetFabRequest(GetFabRequest&& from) noexcept
+ : GetFabRequest() {
+ *this = ::std::move(from);
+ }
+
+ inline GetFabRequest& operator=(const GetFabRequest& from) {
+ CopyFrom(from);
+ return *this;
+ }
+ inline GetFabRequest& operator=(GetFabRequest&& from) noexcept {
+ if (this == &from) return *this;
+ if (GetOwningArena() == from.GetOwningArena()
+ #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+ && GetOwningArena() != nullptr
+ #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+ ) {
+ InternalSwap(&from);
+ } else {
+ CopyFrom(from);
+ }
+ return *this;
+ }
+
+ static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+ return GetDescriptor();
+ }
+ static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+ return default_instance().GetMetadata().descriptor;
+ }
+ static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+ return default_instance().GetMetadata().reflection;
+ }
+ static const GetFabRequest& default_instance() {
+ return *internal_default_instance();
+ }
+ static inline const GetFabRequest* internal_default_instance() {
+ return reinterpret_cast(
+ &_GetFabRequest_default_instance_);
+ }
+ static constexpr int kIndexInFileMessages =
+ 1;
+
+ friend void swap(GetFabRequest& a, GetFabRequest& b) {
+ a.Swap(&b);
+ }
+ inline void Swap(GetFabRequest* other) {
+ if (other == this) return;
+ if (GetOwningArena() == other->GetOwningArena()) {
+ InternalSwap(other);
+ } else {
+ ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+ }
+ }
+ void UnsafeArenaSwap(GetFabRequest* other) {
+ if (other == this) return;
+ GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+ InternalSwap(other);
+ }
+
+ // implements Message ----------------------------------------------
+
+ inline GetFabRequest* New() const final {
+ return new GetFabRequest();
+ }
+
+ GetFabRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
+ return CreateMaybeMessage(arena);
+ }
+ using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+ void CopyFrom(const GetFabRequest& from);
+ using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+ void MergeFrom(const GetFabRequest& from);
+ private:
+ static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+ public:
+ PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+ bool IsInitialized() const final;
+
+ size_t ByteSizeLong() const final;
+ const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+ ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
+ ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+ int GetCachedSize() const final { return _cached_size_.Get(); }
+
+ private:
+ void SharedCtor();
+ void SharedDtor();
+ void SetCachedSize(int size) const final;
+ void InternalSwap(GetFabRequest* other);
+ friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+ static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+ return "flwr.proto.GetFabRequest";
+ }
+ protected:
+ explicit GetFabRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+ bool is_message_owned = false);
+ private:
+ static void ArenaDtor(void* object);
+ inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
+ public:
+
+ static const ClassData _class_data_;
+ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+ ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+ // nested types ----------------------------------------------------
+
+ // accessors -------------------------------------------------------
+
+ enum : int {
+ kHashStrFieldNumber = 2,
+ kNodeFieldNumber = 1,
+ };
+ // string hash_str = 2;
+ void clear_hash_str();
+ const std::string& hash_str() const;
+ template
+ void set_hash_str(ArgT0&& arg0, ArgT... args);
+ std::string* mutable_hash_str();
+ PROTOBUF_MUST_USE_RESULT std::string* release_hash_str();
+ void set_allocated_hash_str(std::string* hash_str);
+ private:
+ const std::string& _internal_hash_str() const;
+ inline PROTOBUF_ALWAYS_INLINE void _internal_set_hash_str(const std::string& value);
+ std::string* _internal_mutable_hash_str();
+ public:
+
+ // .flwr.proto.Node node = 1;
+ bool has_node() const;
+ private:
+ bool _internal_has_node() const;
+ public:
+ void clear_node();
+ const ::flwr::proto::Node& node() const;
+ PROTOBUF_MUST_USE_RESULT ::flwr::proto::Node* release_node();
+ ::flwr::proto::Node* mutable_node();
+ void set_allocated_node(::flwr::proto::Node* node);
+ private:
+ const ::flwr::proto::Node& _internal_node() const;
+ ::flwr::proto::Node* _internal_mutable_node();
+ public:
+ void unsafe_arena_set_allocated_node(
+ ::flwr::proto::Node* node);
+ ::flwr::proto::Node* unsafe_arena_release_node();
+
+ // @@protoc_insertion_point(class_scope:flwr.proto.GetFabRequest)
+ private:
+ class _Internal;
+
+ template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+ typedef void InternalArenaConstructable_;
+ typedef void DestructorSkippable_;
+ ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr hash_str_;
+ ::flwr::proto::Node* node_;
+ mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+ friend struct ::TableStruct_flwr_2fproto_2ffab_2eproto;
+};
+// -------------------------------------------------------------------
+
+class GetFabResponse final :
+ public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:flwr.proto.GetFabResponse) */ {
+ public:
+ inline GetFabResponse() : GetFabResponse(nullptr) {}
+ ~GetFabResponse() override;
+ explicit constexpr GetFabResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+ GetFabResponse(const GetFabResponse& from);
+ GetFabResponse(GetFabResponse&& from) noexcept
+ : GetFabResponse() {
+ *this = ::std::move(from);
+ }
+
+ inline GetFabResponse& operator=(const GetFabResponse& from) {
+ CopyFrom(from);
+ return *this;
+ }
+ inline GetFabResponse& operator=(GetFabResponse&& from) noexcept {
+ if (this == &from) return *this;
+ if (GetOwningArena() == from.GetOwningArena()
+ #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+ && GetOwningArena() != nullptr
+ #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+ ) {
+ InternalSwap(&from);
+ } else {
+ CopyFrom(from);
+ }
+ return *this;
+ }
+
+ static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+ return GetDescriptor();
+ }
+ static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+ return default_instance().GetMetadata().descriptor;
+ }
+ static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+ return default_instance().GetMetadata().reflection;
+ }
+ static const GetFabResponse& default_instance() {
+ return *internal_default_instance();
+ }
+ static inline const GetFabResponse* internal_default_instance() {
+ return reinterpret_cast(
+ &_GetFabResponse_default_instance_);
+ }
+ static constexpr int kIndexInFileMessages =
+ 2;
+
+ friend void swap(GetFabResponse& a, GetFabResponse& b) {
+ a.Swap(&b);
+ }
+ inline void Swap(GetFabResponse* other) {
+ if (other == this) return;
+ if (GetOwningArena() == other->GetOwningArena()) {
+ InternalSwap(other);
+ } else {
+ ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+ }
+ }
+ void UnsafeArenaSwap(GetFabResponse* other) {
+ if (other == this) return;
+ GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+ InternalSwap(other);
+ }
+
+ // implements Message ----------------------------------------------
+
+ inline GetFabResponse* New() const final {
+ return new GetFabResponse();
+ }
+
+ GetFabResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
+ return CreateMaybeMessage(arena);
+ }
+ using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+ void CopyFrom(const GetFabResponse& from);
+ using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+ void MergeFrom(const GetFabResponse& from);
+ private:
+ static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+ public:
+ PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+ bool IsInitialized() const final;
+
+ size_t ByteSizeLong() const final;
+ const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+ ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
+ ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+ int GetCachedSize() const final { return _cached_size_.Get(); }
+
+ private:
+ void SharedCtor();
+ void SharedDtor();
+ void SetCachedSize(int size) const final;
+ void InternalSwap(GetFabResponse* other);
+ friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+ static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+ return "flwr.proto.GetFabResponse";
+ }
+ protected:
+ explicit GetFabResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+ bool is_message_owned = false);
+ private:
+ static void ArenaDtor(void* object);
+ inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
+ public:
+
+ static const ClassData _class_data_;
+ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+ ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+ // nested types ----------------------------------------------------
+
+ // accessors -------------------------------------------------------
+
+ enum : int {
+ kFabFieldNumber = 1,
+ };
+ // .flwr.proto.Fab fab = 1;
+ bool has_fab() const;
+ private:
+ bool _internal_has_fab() const;
+ public:
+ void clear_fab();
+ const ::flwr::proto::Fab& fab() const;
+ PROTOBUF_MUST_USE_RESULT ::flwr::proto::Fab* release_fab();
+ ::flwr::proto::Fab* mutable_fab();
+ void set_allocated_fab(::flwr::proto::Fab* fab);
+ private:
+ const ::flwr::proto::Fab& _internal_fab() const;
+ ::flwr::proto::Fab* _internal_mutable_fab();
+ public:
+ void unsafe_arena_set_allocated_fab(
+ ::flwr::proto::Fab* fab);
+ ::flwr::proto::Fab* unsafe_arena_release_fab();
+
+ // @@protoc_insertion_point(class_scope:flwr.proto.GetFabResponse)
+ private:
+ class _Internal;
+
+ template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+ typedef void InternalArenaConstructable_;
+ typedef void DestructorSkippable_;
+ ::flwr::proto::Fab* fab_;
+ mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+ friend struct ::TableStruct_flwr_2fproto_2ffab_2eproto;
+};
+// ===================================================================
+
+
+// ===================================================================
+
+#ifdef __GNUC__
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wstrict-aliasing"
+#endif // __GNUC__
+// Fab
+
+// string hash_str = 1;
+inline void Fab::clear_hash_str() {
+ hash_str_.ClearToEmpty();
+}
+inline const std::string& Fab::hash_str() const {
+ // @@protoc_insertion_point(field_get:flwr.proto.Fab.hash_str)
+ return _internal_hash_str();
+}
+template
+inline PROTOBUF_ALWAYS_INLINE
+void Fab::set_hash_str(ArgT0&& arg0, ArgT... args) {
+
+ hash_str_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast(arg0), args..., GetArenaForAllocation());
+ // @@protoc_insertion_point(field_set:flwr.proto.Fab.hash_str)
+}
+inline std::string* Fab::mutable_hash_str() {
+ std::string* _s = _internal_mutable_hash_str();
+ // @@protoc_insertion_point(field_mutable:flwr.proto.Fab.hash_str)
+ return _s;
+}
+inline const std::string& Fab::_internal_hash_str() const {
+ return hash_str_.Get();
+}
+inline void Fab::_internal_set_hash_str(const std::string& value) {
+
+ hash_str_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
+}
+inline std::string* Fab::_internal_mutable_hash_str() {
+
+ return hash_str_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
+}
+inline std::string* Fab::release_hash_str() {
+ // @@protoc_insertion_point(field_release:flwr.proto.Fab.hash_str)
+ return hash_str_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
+}
+inline void Fab::set_allocated_hash_str(std::string* hash_str) {
+ if (hash_str != nullptr) {
+
+ } else {
+
+ }
+ hash_str_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), hash_str,
+ GetArenaForAllocation());
+ // @@protoc_insertion_point(field_set_allocated:flwr.proto.Fab.hash_str)
+}
+
+// bytes content = 2;
+inline void Fab::clear_content() {
+ content_.ClearToEmpty();
+}
+inline const std::string& Fab::content() const {
+ // @@protoc_insertion_point(field_get:flwr.proto.Fab.content)
+ return _internal_content();
+}
+template
+inline PROTOBUF_ALWAYS_INLINE
+void Fab::set_content(ArgT0&& arg0, ArgT... args) {
+
+ content_.SetBytes(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast(arg0), args..., GetArenaForAllocation());
+ // @@protoc_insertion_point(field_set:flwr.proto.Fab.content)
+}
+inline std::string* Fab::mutable_content() {
+ std::string* _s = _internal_mutable_content();
+ // @@protoc_insertion_point(field_mutable:flwr.proto.Fab.content)
+ return _s;
+}
+inline const std::string& Fab::_internal_content() const {
+ return content_.Get();
+}
+inline void Fab::_internal_set_content(const std::string& value) {
+
+ content_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
+}
+inline std::string* Fab::_internal_mutable_content() {
+
+ return content_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
+}
+inline std::string* Fab::release_content() {
+ // @@protoc_insertion_point(field_release:flwr.proto.Fab.content)
+ return content_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
+}
+inline void Fab::set_allocated_content(std::string* content) {
+ if (content != nullptr) {
+
+ } else {
+
+ }
+ content_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), content,
+ GetArenaForAllocation());
+ // @@protoc_insertion_point(field_set_allocated:flwr.proto.Fab.content)
+}
+
+// -------------------------------------------------------------------
+
+// GetFabRequest
+
+// .flwr.proto.Node node = 1;
+inline bool GetFabRequest::_internal_has_node() const {
+ return this != internal_default_instance() && node_ != nullptr;
+}
+inline bool GetFabRequest::has_node() const {
+ return _internal_has_node();
+}
+inline const ::flwr::proto::Node& GetFabRequest::_internal_node() const {
+ const ::flwr::proto::Node* p = node_;
+ return p != nullptr ? *p : reinterpret_cast(
+ ::flwr::proto::_Node_default_instance_);
+}
+inline const ::flwr::proto::Node& GetFabRequest::node() const {
+ // @@protoc_insertion_point(field_get:flwr.proto.GetFabRequest.node)
+ return _internal_node();
+}
+inline void GetFabRequest::unsafe_arena_set_allocated_node(
+ ::flwr::proto::Node* node) {
+ if (GetArenaForAllocation() == nullptr) {
+ delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(node_);
+ }
+ node_ = node;
+ if (node) {
+
+ } else {
+
+ }
+ // @@protoc_insertion_point(field_unsafe_arena_set_allocated:flwr.proto.GetFabRequest.node)
+}
+inline ::flwr::proto::Node* GetFabRequest::release_node() {
+
+ ::flwr::proto::Node* temp = node_;
+ node_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+ auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+ temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+ if (GetArenaForAllocation() == nullptr) { delete old; }
+#else // PROTOBUF_FORCE_COPY_IN_RELEASE
+ if (GetArenaForAllocation() != nullptr) {
+ temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+ }
+#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE
+ return temp;
+}
+inline ::flwr::proto::Node* GetFabRequest::unsafe_arena_release_node() {
+ // @@protoc_insertion_point(field_release:flwr.proto.GetFabRequest.node)
+
+ ::flwr::proto::Node* temp = node_;
+ node_ = nullptr;
+ return temp;
+}
+inline ::flwr::proto::Node* GetFabRequest::_internal_mutable_node() {
+
+ if (node_ == nullptr) {
+ auto* p = CreateMaybeMessage<::flwr::proto::Node>(GetArenaForAllocation());
+ node_ = p;
+ }
+ return node_;
+}
+inline ::flwr::proto::Node* GetFabRequest::mutable_node() {
+ ::flwr::proto::Node* _msg = _internal_mutable_node();
+ // @@protoc_insertion_point(field_mutable:flwr.proto.GetFabRequest.node)
+ return _msg;
+}
+inline void GetFabRequest::set_allocated_node(::flwr::proto::Node* node) {
+ ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+ if (message_arena == nullptr) {
+ delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(node_);
+ }
+ if (node) {
+ ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+ ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
+ ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
+ reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(node));
+ if (message_arena != submessage_arena) {
+ node = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+ message_arena, node, submessage_arena);
+ }
+
+ } else {
+
+ }
+ node_ = node;
+ // @@protoc_insertion_point(field_set_allocated:flwr.proto.GetFabRequest.node)
+}
+
+// string hash_str = 2;
+inline void GetFabRequest::clear_hash_str() {
+ hash_str_.ClearToEmpty();
+}
+inline const std::string& GetFabRequest::hash_str() const {
+ // @@protoc_insertion_point(field_get:flwr.proto.GetFabRequest.hash_str)
+ return _internal_hash_str();
+}
+template
+inline PROTOBUF_ALWAYS_INLINE
+void GetFabRequest::set_hash_str(ArgT0&& arg0, ArgT... args) {
+
+ hash_str_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast(arg0), args..., GetArenaForAllocation());
+ // @@protoc_insertion_point(field_set:flwr.proto.GetFabRequest.hash_str)
+}
+inline std::string* GetFabRequest::mutable_hash_str() {
+ std::string* _s = _internal_mutable_hash_str();
+ // @@protoc_insertion_point(field_mutable:flwr.proto.GetFabRequest.hash_str)
+ return _s;
+}
+inline const std::string& GetFabRequest::_internal_hash_str() const {
+ return hash_str_.Get();
+}
+inline void GetFabRequest::_internal_set_hash_str(const std::string& value) {
+
+ hash_str_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
+}
+inline std::string* GetFabRequest::_internal_mutable_hash_str() {
+
+ return hash_str_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
+}
+inline std::string* GetFabRequest::release_hash_str() {
+ // @@protoc_insertion_point(field_release:flwr.proto.GetFabRequest.hash_str)
+ return hash_str_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
+}
+inline void GetFabRequest::set_allocated_hash_str(std::string* hash_str) {
+ if (hash_str != nullptr) {
+
+ } else {
+
+ }
+ hash_str_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), hash_str,
+ GetArenaForAllocation());
+ // @@protoc_insertion_point(field_set_allocated:flwr.proto.GetFabRequest.hash_str)
+}
+
+// -------------------------------------------------------------------
+
+// GetFabResponse
+
+// .flwr.proto.Fab fab = 1;
+inline bool GetFabResponse::_internal_has_fab() const {
+ return this != internal_default_instance() && fab_ != nullptr;
+}
+inline bool GetFabResponse::has_fab() const {
+ return _internal_has_fab();
+}
+inline void GetFabResponse::clear_fab() {
+ if (GetArenaForAllocation() == nullptr && fab_ != nullptr) {
+ delete fab_;
+ }
+ fab_ = nullptr;
+}
+inline const ::flwr::proto::Fab& GetFabResponse::_internal_fab() const {
+ const ::flwr::proto::Fab* p = fab_;
+ return p != nullptr ? *p : reinterpret_cast(
+ ::flwr::proto::_Fab_default_instance_);
+}
+inline const ::flwr::proto::Fab& GetFabResponse::fab() const {
+ // @@protoc_insertion_point(field_get:flwr.proto.GetFabResponse.fab)
+ return _internal_fab();
+}
+inline void GetFabResponse::unsafe_arena_set_allocated_fab(
+ ::flwr::proto::Fab* fab) {
+ if (GetArenaForAllocation() == nullptr) {
+ delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(fab_);
+ }
+ fab_ = fab;
+ if (fab) {
+
+ } else {
+
+ }
+ // @@protoc_insertion_point(field_unsafe_arena_set_allocated:flwr.proto.GetFabResponse.fab)
+}
+inline ::flwr::proto::Fab* GetFabResponse::release_fab() {
+
+ ::flwr::proto::Fab* temp = fab_;
+ fab_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+ auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+ temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+ if (GetArenaForAllocation() == nullptr) { delete old; }
+#else // PROTOBUF_FORCE_COPY_IN_RELEASE
+ if (GetArenaForAllocation() != nullptr) {
+ temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+ }
+#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE
+ return temp;
+}
+inline ::flwr::proto::Fab* GetFabResponse::unsafe_arena_release_fab() {
+ // @@protoc_insertion_point(field_release:flwr.proto.GetFabResponse.fab)
+
+ ::flwr::proto::Fab* temp = fab_;
+ fab_ = nullptr;
+ return temp;
+}
+inline ::flwr::proto::Fab* GetFabResponse::_internal_mutable_fab() {
+
+ if (fab_ == nullptr) {
+ auto* p = CreateMaybeMessage<::flwr::proto::Fab>(GetArenaForAllocation());
+ fab_ = p;
+ }
+ return fab_;
+}
+inline ::flwr::proto::Fab* GetFabResponse::mutable_fab() {
+ ::flwr::proto::Fab* _msg = _internal_mutable_fab();
+ // @@protoc_insertion_point(field_mutable:flwr.proto.GetFabResponse.fab)
+ return _msg;
+}
+inline void GetFabResponse::set_allocated_fab(::flwr::proto::Fab* fab) {
+ ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+ if (message_arena == nullptr) {
+ delete fab_;
+ }
+ if (fab) {
+ ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+ ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::flwr::proto::Fab>::GetOwningArena(fab);
+ if (message_arena != submessage_arena) {
+ fab = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+ message_arena, fab, submessage_arena);
+ }
+
+ } else {
+
+ }
+ fab_ = fab;
+ // @@protoc_insertion_point(field_set_allocated:flwr.proto.GetFabResponse.fab)
+}
+
+#ifdef __GNUC__
+ #pragma GCC diagnostic pop
+#endif // __GNUC__
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+
+// @@protoc_insertion_point(namespace_scope)
+
+} // namespace proto
+} // namespace flwr
+
+// @@protoc_insertion_point(global_scope)
+
+#include
+#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_flwr_2fproto_2ffab_2eproto
diff --git a/src/cc/flwr/include/flwr/proto/fleet.grpc.pb.cc b/framework/src/cc/flwr/include/flwr/proto/fleet.grpc.pb.cc
similarity index 86%
rename from src/cc/flwr/include/flwr/proto/fleet.grpc.pb.cc
rename to framework/src/cc/flwr/include/flwr/proto/fleet.grpc.pb.cc
index 0e6c69ad14ac..1c748d03d2cb 100644
--- a/src/cc/flwr/include/flwr/proto/fleet.grpc.pb.cc
+++ b/framework/src/cc/flwr/include/flwr/proto/fleet.grpc.pb.cc
@@ -29,6 +29,7 @@ static const char* Fleet_method_names[] = {
"/flwr.proto.Fleet/PullTaskIns",
"/flwr.proto.Fleet/PushTaskRes",
"/flwr.proto.Fleet/GetRun",
+ "/flwr.proto.Fleet/GetFab",
};
std::unique_ptr< Fleet::Stub> Fleet::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) {
@@ -44,6 +45,7 @@ Fleet::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, con
, rpcmethod_PullTaskIns_(Fleet_method_names[3], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
, rpcmethod_PushTaskRes_(Fleet_method_names[4], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
, rpcmethod_GetRun_(Fleet_method_names[5], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+ , rpcmethod_GetFab_(Fleet_method_names[6], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
{}
::grpc::Status Fleet::Stub::CreateNode(::grpc::ClientContext* context, const ::flwr::proto::CreateNodeRequest& request, ::flwr::proto::CreateNodeResponse* response) {
@@ -184,6 +186,29 @@ ::grpc::ClientAsyncResponseReader< ::flwr::proto::GetRunResponse>* Fleet::Stub::
return result;
}
+::grpc::Status Fleet::Stub::GetFab(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest& request, ::flwr::proto::GetFabResponse* response) {
+ return ::grpc::internal::BlockingUnaryCall< ::flwr::proto::GetFabRequest, ::flwr::proto::GetFabResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_GetFab_, context, request, response);
+}
+
+void Fleet::Stub::async::GetFab(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest* request, ::flwr::proto::GetFabResponse* response, std::function f) {
+ ::grpc::internal::CallbackUnaryCall< ::flwr::proto::GetFabRequest, ::flwr::proto::GetFabResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_GetFab_, context, request, response, std::move(f));
+}
+
+void Fleet::Stub::async::GetFab(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest* request, ::flwr::proto::GetFabResponse* response, ::grpc::ClientUnaryReactor* reactor) {
+ ::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_GetFab_, context, request, response, reactor);
+}
+
+::grpc::ClientAsyncResponseReader< ::flwr::proto::GetFabResponse>* Fleet::Stub::PrepareAsyncGetFabRaw(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest& request, ::grpc::CompletionQueue* cq) {
+ return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::flwr::proto::GetFabResponse, ::flwr::proto::GetFabRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_GetFab_, context, request);
+}
+
+::grpc::ClientAsyncResponseReader< ::flwr::proto::GetFabResponse>* Fleet::Stub::AsyncGetFabRaw(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest& request, ::grpc::CompletionQueue* cq) {
+ auto* result =
+ this->PrepareAsyncGetFabRaw(context, request, cq);
+ result->StartCall();
+ return result;
+}
+
Fleet::Service::Service() {
AddMethod(new ::grpc::internal::RpcServiceMethod(
Fleet_method_names[0],
@@ -245,6 +270,16 @@ Fleet::Service::Service() {
::flwr::proto::GetRunResponse* resp) {
return service->GetRun(ctx, req, resp);
}, this)));
+ AddMethod(new ::grpc::internal::RpcServiceMethod(
+ Fleet_method_names[6],
+ ::grpc::internal::RpcMethod::NORMAL_RPC,
+ new ::grpc::internal::RpcMethodHandler< Fleet::Service, ::flwr::proto::GetFabRequest, ::flwr::proto::GetFabResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
+ [](Fleet::Service* service,
+ ::grpc::ServerContext* ctx,
+ const ::flwr::proto::GetFabRequest* req,
+ ::flwr::proto::GetFabResponse* resp) {
+ return service->GetFab(ctx, req, resp);
+ }, this)));
}
Fleet::Service::~Service() {
@@ -292,6 +327,13 @@ ::grpc::Status Fleet::Service::GetRun(::grpc::ServerContext* context, const ::fl
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
+::grpc::Status Fleet::Service::GetFab(::grpc::ServerContext* context, const ::flwr::proto::GetFabRequest* request, ::flwr::proto::GetFabResponse* response) {
+ (void) context;
+ (void) request;
+ (void) response;
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+}
+
} // namespace flwr
} // namespace proto
diff --git a/src/cc/flwr/include/flwr/proto/fleet.grpc.pb.h b/framework/src/cc/flwr/include/flwr/proto/fleet.grpc.pb.h
similarity index 86%
rename from src/cc/flwr/include/flwr/proto/fleet.grpc.pb.h
rename to framework/src/cc/flwr/include/flwr/proto/fleet.grpc.pb.h
index fb1e4bf7b6c4..9d83a641380d 100644
--- a/src/cc/flwr/include/flwr/proto/fleet.grpc.pb.h
+++ b/framework/src/cc/flwr/include/flwr/proto/fleet.grpc.pb.h
@@ -100,6 +100,14 @@ class Fleet final {
std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flwr::proto::GetRunResponse>> PrepareAsyncGetRun(::grpc::ClientContext* context, const ::flwr::proto::GetRunRequest& request, ::grpc::CompletionQueue* cq) {
return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flwr::proto::GetRunResponse>>(PrepareAsyncGetRunRaw(context, request, cq));
}
+ // Get FAB
+ virtual ::grpc::Status GetFab(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest& request, ::flwr::proto::GetFabResponse* response) = 0;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flwr::proto::GetFabResponse>> AsyncGetFab(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flwr::proto::GetFabResponse>>(AsyncGetFabRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flwr::proto::GetFabResponse>> PrepareAsyncGetFab(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flwr::proto::GetFabResponse>>(PrepareAsyncGetFabRaw(context, request, cq));
+ }
class async_interface {
public:
virtual ~async_interface() {}
@@ -121,6 +129,9 @@ class Fleet final {
virtual void PushTaskRes(::grpc::ClientContext* context, const ::flwr::proto::PushTaskResRequest* request, ::flwr::proto::PushTaskResResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
virtual void GetRun(::grpc::ClientContext* context, const ::flwr::proto::GetRunRequest* request, ::flwr::proto::GetRunResponse* response, std::function) = 0;
virtual void GetRun(::grpc::ClientContext* context, const ::flwr::proto::GetRunRequest* request, ::flwr::proto::GetRunResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+ // Get FAB
+ virtual void GetFab(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest* request, ::flwr::proto::GetFabResponse* response, std::function) = 0;
+ virtual void GetFab(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest* request, ::flwr::proto::GetFabResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
};
typedef class async_interface experimental_async_interface;
virtual class async_interface* async() { return nullptr; }
@@ -138,6 +149,8 @@ class Fleet final {
virtual ::grpc::ClientAsyncResponseReaderInterface< ::flwr::proto::PushTaskResResponse>* PrepareAsyncPushTaskResRaw(::grpc::ClientContext* context, const ::flwr::proto::PushTaskResRequest& request, ::grpc::CompletionQueue* cq) = 0;
virtual ::grpc::ClientAsyncResponseReaderInterface< ::flwr::proto::GetRunResponse>* AsyncGetRunRaw(::grpc::ClientContext* context, const ::flwr::proto::GetRunRequest& request, ::grpc::CompletionQueue* cq) = 0;
virtual ::grpc::ClientAsyncResponseReaderInterface< ::flwr::proto::GetRunResponse>* PrepareAsyncGetRunRaw(::grpc::ClientContext* context, const ::flwr::proto::GetRunRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flwr::proto::GetFabResponse>* AsyncGetFabRaw(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest& request, ::grpc::CompletionQueue* cq) = 0;
+ virtual ::grpc::ClientAsyncResponseReaderInterface< ::flwr::proto::GetFabResponse>* PrepareAsyncGetFabRaw(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest& request, ::grpc::CompletionQueue* cq) = 0;
};
class Stub final : public StubInterface {
public:
@@ -184,6 +197,13 @@ class Fleet final {
std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flwr::proto::GetRunResponse>> PrepareAsyncGetRun(::grpc::ClientContext* context, const ::flwr::proto::GetRunRequest& request, ::grpc::CompletionQueue* cq) {
return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flwr::proto::GetRunResponse>>(PrepareAsyncGetRunRaw(context, request, cq));
}
+ ::grpc::Status GetFab(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest& request, ::flwr::proto::GetFabResponse* response) override;
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flwr::proto::GetFabResponse>> AsyncGetFab(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flwr::proto::GetFabResponse>>(AsyncGetFabRaw(context, request, cq));
+ }
+ std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flwr::proto::GetFabResponse>> PrepareAsyncGetFab(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest& request, ::grpc::CompletionQueue* cq) {
+ return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flwr::proto::GetFabResponse>>(PrepareAsyncGetFabRaw(context, request, cq));
+ }
class async final :
public StubInterface::async_interface {
public:
@@ -199,6 +219,8 @@ class Fleet final {
void PushTaskRes(::grpc::ClientContext* context, const ::flwr::proto::PushTaskResRequest* request, ::flwr::proto::PushTaskResResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
void GetRun(::grpc::ClientContext* context, const ::flwr::proto::GetRunRequest* request, ::flwr::proto::GetRunResponse* response, std::function) override;
void GetRun(::grpc::ClientContext* context, const ::flwr::proto::GetRunRequest* request, ::flwr::proto::GetRunResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
+ void GetFab(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest* request, ::flwr::proto::GetFabResponse* response, std::function) override;
+ void GetFab(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest* request, ::flwr::proto::GetFabResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
private:
friend class Stub;
explicit async(Stub* stub): stub_(stub) { }
@@ -222,12 +244,15 @@ class Fleet final {
::grpc::ClientAsyncResponseReader< ::flwr::proto::PushTaskResResponse>* PrepareAsyncPushTaskResRaw(::grpc::ClientContext* context, const ::flwr::proto::PushTaskResRequest& request, ::grpc::CompletionQueue* cq) override;
::grpc::ClientAsyncResponseReader< ::flwr::proto::GetRunResponse>* AsyncGetRunRaw(::grpc::ClientContext* context, const ::flwr::proto::GetRunRequest& request, ::grpc::CompletionQueue* cq) override;
::grpc::ClientAsyncResponseReader< ::flwr::proto::GetRunResponse>* PrepareAsyncGetRunRaw(::grpc::ClientContext* context, const ::flwr::proto::GetRunRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flwr::proto::GetFabResponse>* AsyncGetFabRaw(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest& request, ::grpc::CompletionQueue* cq) override;
+ ::grpc::ClientAsyncResponseReader< ::flwr::proto::GetFabResponse>* PrepareAsyncGetFabRaw(::grpc::ClientContext* context, const ::flwr::proto::GetFabRequest& request, ::grpc::CompletionQueue* cq) override;
const ::grpc::internal::RpcMethod rpcmethod_CreateNode_;
const ::grpc::internal::RpcMethod rpcmethod_DeleteNode_;
const ::grpc::internal::RpcMethod rpcmethod_Ping_;
const ::grpc::internal::RpcMethod rpcmethod_PullTaskIns_;
const ::grpc::internal::RpcMethod rpcmethod_PushTaskRes_;
const ::grpc::internal::RpcMethod rpcmethod_GetRun_;
+ const ::grpc::internal::RpcMethod rpcmethod_GetFab_;
};
static std::unique_ptr NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());
@@ -247,6 +272,8 @@ class Fleet final {
// HTTP API path: /api/v1/fleet/push-task-res
virtual ::grpc::Status PushTaskRes(::grpc::ServerContext* context, const ::flwr::proto::PushTaskResRequest* request, ::flwr::proto::PushTaskResResponse* response);
virtual ::grpc::Status GetRun(::grpc::ServerContext* context, const ::flwr::proto::GetRunRequest* request, ::flwr::proto::GetRunResponse* response);
+ // Get FAB
+ virtual ::grpc::Status GetFab(::grpc::ServerContext* context, const ::flwr::proto::GetFabRequest* request, ::flwr::proto::GetFabResponse* response);
};
template
class WithAsyncMethod_CreateNode : public BaseClass {
@@ -368,7 +395,27 @@ class Fleet final {
::grpc::Service::RequestAsyncUnary(5, context, request, response, new_call_cq, notification_cq, tag);
}
};
- typedef WithAsyncMethod_CreateNode > > > > > AsyncService;
+ template
+ class WithAsyncMethod_GetFab : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithAsyncMethod_GetFab() {
+ ::grpc::Service::MarkMethodAsync(6);
+ }
+ ~WithAsyncMethod_GetFab() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status GetFab(::grpc::ServerContext* /*context*/, const ::flwr::proto::GetFabRequest* /*request*/, ::flwr::proto::GetFabResponse* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void RequestGetFab(::grpc::ServerContext* context, ::flwr::proto::GetFabRequest* request, ::grpc::ServerAsyncResponseWriter< ::flwr::proto::GetFabResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(6, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ typedef WithAsyncMethod_CreateNode > > > > > > AsyncService;
template
class WithCallbackMethod_CreateNode : public BaseClass {
private:
@@ -531,7 +578,34 @@ class Fleet final {
virtual ::grpc::ServerUnaryReactor* GetRun(
::grpc::CallbackServerContext* /*context*/, const ::flwr::proto::GetRunRequest* /*request*/, ::flwr::proto::GetRunResponse* /*response*/) { return nullptr; }
};
- typedef WithCallbackMethod_CreateNode > > > > > CallbackService;
+ template
+ class WithCallbackMethod_GetFab : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithCallbackMethod_GetFab() {
+ ::grpc::Service::MarkMethodCallback(6,
+ new ::grpc::internal::CallbackUnaryHandler< ::flwr::proto::GetFabRequest, ::flwr::proto::GetFabResponse>(
+ [this](
+ ::grpc::CallbackServerContext* context, const ::flwr::proto::GetFabRequest* request, ::flwr::proto::GetFabResponse* response) { return this->GetFab(context, request, response); }));}
+ void SetMessageAllocatorFor_GetFab(
+ ::grpc::MessageAllocator< ::flwr::proto::GetFabRequest, ::flwr::proto::GetFabResponse>* allocator) {
+ ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(6);
+ static_cast<::grpc::internal::CallbackUnaryHandler< ::flwr::proto::GetFabRequest, ::flwr::proto::GetFabResponse>*>(handler)
+ ->SetMessageAllocator(allocator);
+ }
+ ~WithCallbackMethod_GetFab() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status GetFab(::grpc::ServerContext* /*context*/, const ::flwr::proto::GetFabRequest* /*request*/, ::flwr::proto::GetFabResponse* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ virtual ::grpc::ServerUnaryReactor* GetFab(
+ ::grpc::CallbackServerContext* /*context*/, const ::flwr::proto::GetFabRequest* /*request*/, ::flwr::proto::GetFabResponse* /*response*/) { return nullptr; }
+ };
+ typedef WithCallbackMethod_CreateNode > > > > > > CallbackService;
typedef CallbackService ExperimentalCallbackService;
template
class WithGenericMethod_CreateNode : public BaseClass {
@@ -636,6 +710,23 @@ class Fleet final {
}
};
template
+ class WithGenericMethod_GetFab : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithGenericMethod_GetFab() {
+ ::grpc::Service::MarkMethodGeneric(6);
+ }
+ ~WithGenericMethod_GetFab() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status GetFab(::grpc::ServerContext* /*context*/, const ::flwr::proto::GetFabRequest* /*request*/, ::flwr::proto::GetFabResponse* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ };
+ template
class WithRawMethod_CreateNode : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
@@ -756,6 +847,26 @@ class Fleet final {
}
};
template
+ class WithRawMethod_GetFab : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithRawMethod_GetFab() {
+ ::grpc::Service::MarkMethodRaw(6);
+ }
+ ~WithRawMethod_GetFab() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status GetFab(::grpc::ServerContext* /*context*/, const ::flwr::proto::GetFabRequest* /*request*/, ::flwr::proto::GetFabResponse* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ void RequestGetFab(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+ ::grpc::Service::RequestAsyncUnary(6, context, request, response, new_call_cq, notification_cq, tag);
+ }
+ };
+ template
class WithRawCallbackMethod_CreateNode : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
@@ -888,6 +999,28 @@ class Fleet final {
::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/) { return nullptr; }
};
template
+ class WithRawCallbackMethod_GetFab : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithRawCallbackMethod_GetFab() {
+ ::grpc::Service::MarkMethodRawCallback(6,
+ new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
+ [this](
+ ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetFab(context, request, response); }));
+ }
+ ~WithRawCallbackMethod_GetFab() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable synchronous version of this method
+ ::grpc::Status GetFab(::grpc::ServerContext* /*context*/, const ::flwr::proto::GetFabRequest* /*request*/, ::flwr::proto::GetFabResponse* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ virtual ::grpc::ServerUnaryReactor* GetFab(
+ ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/) { return nullptr; }
+ };
+ template
class WithStreamedUnaryMethod_CreateNode : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
@@ -1049,9 +1182,36 @@ class Fleet final {
// replace default version of method with streamed unary
virtual ::grpc::Status StreamedGetRun(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flwr::proto::GetRunRequest,::flwr::proto::GetRunResponse>* server_unary_streamer) = 0;
};
- typedef WithStreamedUnaryMethod_CreateNode > > > > > StreamedUnaryService;
+ template
+ class WithStreamedUnaryMethod_GetFab : public BaseClass {
+ private:
+ void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+ public:
+ WithStreamedUnaryMethod_GetFab() {
+ ::grpc::Service::MarkMethodStreamed(6,
+ new ::grpc::internal::StreamedUnaryHandler<
+ ::flwr::proto::GetFabRequest, ::flwr::proto::GetFabResponse>(
+ [this](::grpc::ServerContext* context,
+ ::grpc::ServerUnaryStreamer<
+ ::flwr::proto::GetFabRequest, ::flwr::proto::GetFabResponse>* streamer) {
+ return this->StreamedGetFab(context,
+ streamer);
+ }));
+ }
+ ~WithStreamedUnaryMethod_GetFab() override {
+ BaseClassMustBeDerivedFromService(this);
+ }
+ // disable regular version of this method
+ ::grpc::Status GetFab(::grpc::ServerContext* /*context*/, const ::flwr::proto::GetFabRequest* /*request*/, ::flwr::proto::GetFabResponse* /*response*/) override {
+ abort();
+ return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+ }
+ // replace default version of method with streamed unary
+ virtual ::grpc::Status StreamedGetFab(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flwr::proto::GetFabRequest,::flwr::proto::GetFabResponse>* server_unary_streamer) = 0;
+ };
+ typedef WithStreamedUnaryMethod_CreateNode > > > > > > StreamedUnaryService;
typedef Service SplitStreamedService;
- typedef WithStreamedUnaryMethod_CreateNode > > > > > StreamedService;
+ typedef WithStreamedUnaryMethod_CreateNode > > > > > > StreamedService;
};
} // namespace proto
diff --git a/src/cc/flwr/include/flwr/proto/fleet.pb.cc b/framework/src/cc/flwr/include/flwr/proto/fleet.pb.cc
similarity index 76%
rename from src/cc/flwr/include/flwr/proto/fleet.pb.cc
rename to framework/src/cc/flwr/include/flwr/proto/fleet.pb.cc
index d221658623c3..6f37b676893c 100644
--- a/src/cc/flwr/include/flwr/proto/fleet.pb.cc
+++ b/framework/src/cc/flwr/include/flwr/proto/fleet.pb.cc
@@ -118,7 +118,8 @@ struct PullTaskInsResponseDefaultTypeInternal {
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PullTaskInsResponseDefaultTypeInternal _PullTaskInsResponse_default_instance_;
constexpr PushTaskResRequest::PushTaskResRequest(
::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized)
- : task_res_list_(){}
+ : task_res_list_()
+ , node_(nullptr){}
struct PushTaskResRequestDefaultTypeInternal {
constexpr PushTaskResRequestDefaultTypeInternal()
: _instance(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized{}) {}
@@ -152,44 +153,6 @@ struct PushTaskResResponseDefaultTypeInternal {
};
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PushTaskResResponseDefaultTypeInternal _PushTaskResResponse_default_instance_;
-constexpr Run::Run(
- ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized)
- : fab_id_(&::PROTOBUF_NAMESPACE_ID::internal::fixed_address_empty_string)
- , fab_version_(&::PROTOBUF_NAMESPACE_ID::internal::fixed_address_empty_string)
- , run_id_(int64_t{0}){}
-struct RunDefaultTypeInternal {
- constexpr RunDefaultTypeInternal()
- : _instance(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized{}) {}
- ~RunDefaultTypeInternal() {}
- union {
- Run _instance;
- };
-};
-PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT RunDefaultTypeInternal _Run_default_instance_;
-constexpr GetRunRequest::GetRunRequest(
- ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized)
- : run_id_(int64_t{0}){}
-struct GetRunRequestDefaultTypeInternal {
- constexpr GetRunRequestDefaultTypeInternal()
- : _instance(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized{}) {}
- ~GetRunRequestDefaultTypeInternal() {}
- union {
- GetRunRequest _instance;
- };
-};
-PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT GetRunRequestDefaultTypeInternal _GetRunRequest_default_instance_;
-constexpr GetRunResponse::GetRunResponse(
- ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized)
- : run_(nullptr){}
-struct GetRunResponseDefaultTypeInternal {
- constexpr GetRunResponseDefaultTypeInternal()
- : _instance(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized{}) {}
- ~GetRunResponseDefaultTypeInternal() {}
- union {
- GetRunResponse _instance;
- };
-};
-PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT GetRunResponseDefaultTypeInternal _GetRunResponse_default_instance_;
constexpr Reconnect::Reconnect(
::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized)
: reconnect_(uint64_t{0u}){}
@@ -204,7 +167,7 @@ struct ReconnectDefaultTypeInternal {
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT ReconnectDefaultTypeInternal _Reconnect_default_instance_;
} // namespace proto
} // namespace flwr
-static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_flwr_2fproto_2ffleet_2eproto[15];
+static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_flwr_2fproto_2ffleet_2eproto[12];
static constexpr ::PROTOBUF_NAMESPACE_ID::EnumDescriptor const** file_level_enum_descriptors_flwr_2fproto_2ffleet_2eproto = nullptr;
static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_flwr_2fproto_2ffleet_2eproto = nullptr;
@@ -273,6 +236,7 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_flwr_2fproto_2ffleet_2eproto::
~0u, // no _oneof_case_
~0u, // no _weak_field_map_
~0u, // no _inlined_string_donated_
+ PROTOBUF_FIELD_OFFSET(::flwr::proto::PushTaskResRequest, node_),
PROTOBUF_FIELD_OFFSET(::flwr::proto::PushTaskResRequest, task_res_list_),
PROTOBUF_FIELD_OFFSET(::flwr::proto::PushTaskResResponse_ResultsEntry_DoNotUse, _has_bits_),
PROTOBUF_FIELD_OFFSET(::flwr::proto::PushTaskResResponse_ResultsEntry_DoNotUse, _internal_metadata_),
@@ -293,29 +257,6 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_flwr_2fproto_2ffleet_2eproto::
PROTOBUF_FIELD_OFFSET(::flwr::proto::PushTaskResResponse, reconnect_),
PROTOBUF_FIELD_OFFSET(::flwr::proto::PushTaskResResponse, results_),
~0u, // no _has_bits_
- PROTOBUF_FIELD_OFFSET(::flwr::proto::Run, _internal_metadata_),
- ~0u, // no _extensions_
- ~0u, // no _oneof_case_
- ~0u, // no _weak_field_map_
- ~0u, // no _inlined_string_donated_
- PROTOBUF_FIELD_OFFSET(::flwr::proto::Run, run_id_),
- PROTOBUF_FIELD_OFFSET(::flwr::proto::Run, fab_id_),
- PROTOBUF_FIELD_OFFSET(::flwr::proto::Run, fab_version_),
- ~0u, // no _has_bits_
- PROTOBUF_FIELD_OFFSET(::flwr::proto::GetRunRequest, _internal_metadata_),
- ~0u, // no _extensions_
- ~0u, // no _oneof_case_
- ~0u, // no _weak_field_map_
- ~0u, // no _inlined_string_donated_
- PROTOBUF_FIELD_OFFSET(::flwr::proto::GetRunRequest, run_id_),
- ~0u, // no _has_bits_
- PROTOBUF_FIELD_OFFSET(::flwr::proto::GetRunResponse, _internal_metadata_),
- ~0u, // no _extensions_
- ~0u, // no _oneof_case_
- ~0u, // no _weak_field_map_
- ~0u, // no _inlined_string_donated_
- PROTOBUF_FIELD_OFFSET(::flwr::proto::GetRunResponse, run_),
- ~0u, // no _has_bits_
PROTOBUF_FIELD_OFFSET(::flwr::proto::Reconnect, _internal_metadata_),
~0u, // no _extensions_
~0u, // no _oneof_case_
@@ -333,12 +274,9 @@ static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOB
{ 42, -1, -1, sizeof(::flwr::proto::PullTaskInsRequest)},
{ 50, -1, -1, sizeof(::flwr::proto::PullTaskInsResponse)},
{ 58, -1, -1, sizeof(::flwr::proto::PushTaskResRequest)},
- { 65, 73, -1, sizeof(::flwr::proto::PushTaskResResponse_ResultsEntry_DoNotUse)},
- { 75, -1, -1, sizeof(::flwr::proto::PushTaskResResponse)},
- { 83, -1, -1, sizeof(::flwr::proto::Run)},
- { 92, -1, -1, sizeof(::flwr::proto::GetRunRequest)},
- { 99, -1, -1, sizeof(::flwr::proto::GetRunResponse)},
- { 106, -1, -1, sizeof(::flwr::proto::Reconnect)},
+ { 66, 74, -1, sizeof(::flwr::proto::PushTaskResResponse_ResultsEntry_DoNotUse)},
+ { 76, -1, -1, sizeof(::flwr::proto::PushTaskResResponse)},
+ { 84, -1, -1, sizeof(::flwr::proto::Reconnect)},
};
static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
@@ -353,58 +291,57 @@ static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] =
reinterpret_cast(&::flwr::proto::_PushTaskResRequest_default_instance_),
reinterpret_cast(&::flwr::proto::_PushTaskResResponse_ResultsEntry_DoNotUse_default_instance_),
reinterpret_cast(&::flwr::proto::_PushTaskResResponse_default_instance_),
- reinterpret_cast(&::flwr::proto::_Run_default_instance_),
- reinterpret_cast(&::flwr::proto::_GetRunRequest_default_instance_),
- reinterpret_cast(&::flwr::proto::_GetRunResponse_default_instance_),
reinterpret_cast(&::flwr::proto::_Reconnect_default_instance_),
};
const char descriptor_table_protodef_flwr_2fproto_2ffleet_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
"\n\026flwr/proto/fleet.proto\022\nflwr.proto\032\025fl"
"wr/proto/node.proto\032\025flwr/proto/task.pro"
- "to\"*\n\021CreateNodeRequest\022\025\n\rping_interval"
- "\030\001 \001(\001\"4\n\022CreateNodeResponse\022\036\n\004node\030\001 \001"
- "(\0132\020.flwr.proto.Node\"3\n\021DeleteNodeReques"
- "t\022\036\n\004node\030\001 \001(\0132\020.flwr.proto.Node\"\024\n\022Del"
- "eteNodeResponse\"D\n\013PingRequest\022\036\n\004node\030\001"
- " \001(\0132\020.flwr.proto.Node\022\025\n\rping_interval\030"
- "\002 \001(\001\"\037\n\014PingResponse\022\017\n\007success\030\001 \001(\010\"F"
- "\n\022PullTaskInsRequest\022\036\n\004node\030\001 \001(\0132\020.flw"
- "r.proto.Node\022\020\n\010task_ids\030\002 \003(\t\"k\n\023PullTa"
- "skInsResponse\022(\n\treconnect\030\001 \001(\0132\025.flwr."
- "proto.Reconnect\022*\n\rtask_ins_list\030\002 \003(\0132\023"
- ".flwr.proto.TaskIns\"@\n\022PushTaskResReques"
- "t\022*\n\rtask_res_list\030\001 \003(\0132\023.flwr.proto.Ta"
- "skRes\"\256\001\n\023PushTaskResResponse\022(\n\treconne"
- "ct\030\001 \001(\0132\025.flwr.proto.Reconnect\022=\n\007resul"
- "ts\030\002 \003(\0132,.flwr.proto.PushTaskResRespons"
- "e.ResultsEntry\032.\n\014ResultsEntry\022\013\n\003key\030\001 "
- "\001(\t\022\r\n\005value\030\002 \001(\r:\0028\001\":\n\003Run\022\016\n\006run_id\030"
- "\001 \001(\022\022\016\n\006fab_id\030\002 \001(\t\022\023\n\013fab_version\030\003 \001"
- "(\t\"\037\n\rGetRunRequest\022\016\n\006run_id\030\001 \001(\022\".\n\016G"
- "etRunResponse\022\034\n\003run\030\001 \001(\0132\017.flwr.proto."
- "Run\"\036\n\tReconnect\022\021\n\treconnect\030\001 \001(\0042\311\003\n\005"
- "Fleet\022M\n\nCreateNode\022\035.flwr.proto.CreateN"
- "odeRequest\032\036.flwr.proto.CreateNodeRespon"
- "se\"\000\022M\n\nDeleteNode\022\035.flwr.proto.DeleteNo"
- "deRequest\032\036.flwr.proto.DeleteNodeRespons"
- "e\"\000\022;\n\004Ping\022\027.flwr.proto.PingRequest\032\030.f"
- "lwr.proto.PingResponse\"\000\022P\n\013PullTaskIns\022"
- "\036.flwr.proto.PullTaskInsRequest\032\037.flwr.p"
- "roto.PullTaskInsResponse\"\000\022P\n\013PushTaskRe"
- "s\022\036.flwr.proto.PushTaskResRequest\032\037.flwr"
- ".proto.PushTaskResResponse\"\000\022A\n\006GetRun\022\031"
- ".flwr.proto.GetRunRequest\032\032.flwr.proto.G"
- "etRunResponse\"\000b\006proto3"
+ "to\032\024flwr/proto/run.proto\032\024flwr/proto/fab"
+ ".proto\"*\n\021CreateNodeRequest\022\025\n\rping_inte"
+ "rval\030\001 \001(\001\"4\n\022CreateNodeResponse\022\036\n\004node"
+ "\030\001 \001(\0132\020.flwr.proto.Node\"3\n\021DeleteNodeRe"
+ "quest\022\036\n\004node\030\001 \001(\0132\020.flwr.proto.Node\"\024\n"
+ "\022DeleteNodeResponse\"D\n\013PingRequest\022\036\n\004no"
+ "de\030\001 \001(\0132\020.flwr.proto.Node\022\025\n\rping_inter"
+ "val\030\002 \001(\001\"\037\n\014PingResponse\022\017\n\007success\030\001 \001"
+ "(\010\"F\n\022PullTaskInsRequest\022\036\n\004node\030\001 \001(\0132\020"
+ ".flwr.proto.Node\022\020\n\010task_ids\030\002 \003(\t\"k\n\023Pu"
+ "llTaskInsResponse\022(\n\treconnect\030\001 \001(\0132\025.f"
+ "lwr.proto.Reconnect\022*\n\rtask_ins_list\030\002 \003"
+ "(\0132\023.flwr.proto.TaskIns\"`\n\022PushTaskResRe"
+ "quest\022\036\n\004node\030\001 \001(\0132\020.flwr.proto.Node\022*\n"
+ "\rtask_res_list\030\002 \003(\0132\023.flwr.proto.TaskRe"
+ "s\"\256\001\n\023PushTaskResResponse\022(\n\treconnect\030\001"
+ " \001(\0132\025.flwr.proto.Reconnect\022=\n\007results\030\002"
+ " \003(\0132,.flwr.proto.PushTaskResResponse.Re"
+ "sultsEntry\032.\n\014ResultsEntry\022\013\n\003key\030\001 \001(\t\022"
+ "\r\n\005value\030\002 \001(\r:\0028\001\"\036\n\tReconnect\022\021\n\trecon"
+ "nect\030\001 \001(\0042\214\004\n\005Fleet\022M\n\nCreateNode\022\035.flw"
+ "r.proto.CreateNodeRequest\032\036.flwr.proto.C"
+ "reateNodeResponse\"\000\022M\n\nDeleteNode\022\035.flwr"
+ ".proto.DeleteNodeRequest\032\036.flwr.proto.De"
+ "leteNodeResponse\"\000\022;\n\004Ping\022\027.flwr.proto."
+ "PingRequest\032\030.flwr.proto.PingResponse\"\000\022"
+ "P\n\013PullTaskIns\022\036.flwr.proto.PullTaskInsR"
+ "equest\032\037.flwr.proto.PullTaskInsResponse\""
+ "\000\022P\n\013PushTaskRes\022\036.flwr.proto.PushTaskRe"
+ "sRequest\032\037.flwr.proto.PushTaskResRespons"
+ "e\"\000\022A\n\006GetRun\022\031.flwr.proto.GetRunRequest"
+ "\032\032.flwr.proto.GetRunResponse\"\000\022A\n\006GetFab"
+ "\022\031.flwr.proto.GetFabRequest\032\032.flwr.proto"
+ ".GetFabResponse\"\000b\006proto3"
;
-static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_flwr_2fproto_2ffleet_2eproto_deps[2] = {
+static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_flwr_2fproto_2ffleet_2eproto_deps[4] = {
+ &::descriptor_table_flwr_2fproto_2ffab_2eproto,
&::descriptor_table_flwr_2fproto_2fnode_2eproto,
+ &::descriptor_table_flwr_2fproto_2frun_2eproto,
&::descriptor_table_flwr_2fproto_2ftask_2eproto,
};
static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_flwr_2fproto_2ffleet_2eproto_once;
const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_flwr_2fproto_2ffleet_2eproto = {
- false, false, 1423, descriptor_table_protodef_flwr_2fproto_2ffleet_2eproto, "flwr/proto/fleet.proto",
- &descriptor_table_flwr_2fproto_2ffleet_2eproto_once, descriptor_table_flwr_2fproto_2ffleet_2eproto_deps, 2, 15,
+ false, false, 1425, descriptor_table_protodef_flwr_2fproto_2ffleet_2eproto, "flwr/proto/fleet.proto",
+ &descriptor_table_flwr_2fproto_2ffleet_2eproto_once, descriptor_table_flwr_2fproto_2ffleet_2eproto_deps, 4, 12,
schemas, file_default_instances, TableStruct_flwr_2fproto_2ffleet_2eproto::offsets,
file_level_metadata_flwr_2fproto_2ffleet_2eproto, file_level_enum_descriptors_flwr_2fproto_2ffleet_2eproto, file_level_service_descriptors_flwr_2fproto_2ffleet_2eproto,
};
@@ -1921,8 +1858,19 @@ ::PROTOBUF_NAMESPACE_ID::Metadata PullTaskInsResponse::GetMetadata() const {
class PushTaskResRequest::_Internal {
public:
+ static const ::flwr::proto::Node& node(const PushTaskResRequest* msg);
};
+const ::flwr::proto::Node&
+PushTaskResRequest::_Internal::node(const PushTaskResRequest* msg) {
+ return *msg->node_;
+}
+void PushTaskResRequest::clear_node() {
+ if (GetArenaForAllocation() == nullptr && node_ != nullptr) {
+ delete node_;
+ }
+ node_ = nullptr;
+}
void PushTaskResRequest::clear_task_res_list() {
task_res_list_.Clear();
}
@@ -1940,10 +1888,16 @@ PushTaskResRequest::PushTaskResRequest(const PushTaskResRequest& from)
: ::PROTOBUF_NAMESPACE_ID::Message(),
task_res_list_(from.task_res_list_) {
_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+ if (from._internal_has_node()) {
+ node_ = new ::flwr::proto::Node(*from.node_);
+ } else {
+ node_ = nullptr;
+ }
// @@protoc_insertion_point(copy_constructor:flwr.proto.PushTaskResRequest)
}
void PushTaskResRequest::SharedCtor() {
+node_ = nullptr;
}
PushTaskResRequest::~PushTaskResRequest() {
@@ -1955,6 +1909,7 @@ PushTaskResRequest::~PushTaskResRequest() {
inline void PushTaskResRequest::SharedDtor() {
GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+ if (this != internal_default_instance()) delete node_;
}
void PushTaskResRequest::ArenaDtor(void* object) {
@@ -1974,6 +1929,10 @@ void PushTaskResRequest::Clear() {
(void) cached_has_bits;
task_res_list_.Clear();
+ if (GetArenaForAllocation() == nullptr && node_ != nullptr) {
+ delete node_;
+ }
+ node_ = nullptr;
_internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}
@@ -1983,16 +1942,24 @@ const char* PushTaskResRequest::_InternalParse(const char* ptr, ::PROTOBUF_NAMES
::PROTOBUF_NAMESPACE_ID::uint32 tag;
ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
switch (tag >> 3) {
- // repeated .flwr.proto.TaskRes task_res_list = 1;
+ // .flwr.proto.Node node = 1;
case 1:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
+ ptr = ctx->ParseMessage(_internal_mutable_node(), ptr);
+ CHK_(ptr);
+ } else
+ goto handle_unusual;
+ continue;
+ // repeated .flwr.proto.TaskRes task_res_list = 2;
+ case 2:
+ if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
ptr -= 1;
do {
ptr += 1;
ptr = ctx->ParseMessage(_internal_add_task_res_list(), ptr);
CHK_(ptr);
if (!ctx->DataAvailable(ptr)) break;
- } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr));
+ } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<18>(ptr));
} else
goto handle_unusual;
continue;
@@ -2025,12 +1992,20 @@ ::PROTOBUF_NAMESPACE_ID::uint8* PushTaskResRequest::_InternalSerialize(
::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
(void) cached_has_bits;
- // repeated .flwr.proto.TaskRes task_res_list = 1;
+ // .flwr.proto.Node node = 1;
+ if (this->_internal_has_node()) {
+ target = stream->EnsureSpace(target);
+ target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+ InternalWriteMessage(
+ 1, _Internal::node(this), target, stream);
+ }
+
+ // repeated .flwr.proto.TaskRes task_res_list = 2;
for (unsigned int i = 0,
n = static_cast(this->_internal_task_res_list_size()); i < n; i++) {
target = stream->EnsureSpace(target);
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
- InternalWriteMessage(1, this->_internal_task_res_list(i), target, stream);
+ InternalWriteMessage(2, this->_internal_task_res_list(i), target, stream);
}
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
@@ -2049,13 +2024,20 @@ size_t PushTaskResRequest::ByteSizeLong() const {
// Prevent compiler warnings about cached_has_bits being unused
(void) cached_has_bits;
- // repeated .flwr.proto.TaskRes task_res_list = 1;
+ // repeated .flwr.proto.TaskRes task_res_list = 2;
total_size += 1UL * this->_internal_task_res_list_size();
for (const auto& msg : this->task_res_list_) {
total_size +=
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
}
+ // .flwr.proto.Node node = 1;
+ if (this->_internal_has_node()) {
+ total_size += 1 +
+ ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+ *node_);
+ }
+
return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
}
@@ -2079,6 +2061,9 @@ void PushTaskResRequest::MergeFrom(const PushTaskResRequest& from) {
(void) cached_has_bits;
task_res_list_.MergeFrom(from.task_res_list_);
+ if (from._internal_has_node()) {
+ _internal_mutable_node()->::flwr::proto::Node::MergeFrom(from._internal_node());
+ }
_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}
@@ -2097,6 +2082,7 @@ void PushTaskResRequest::InternalSwap(PushTaskResRequest* other) {
using std::swap;
_internal_metadata_.InternalSwap(&other->_internal_metadata_);
task_res_list_.InternalSwap(&other->task_res_list_);
+ swap(node_, other->node_);
}
::PROTOBUF_NAMESPACE_ID::Metadata PushTaskResRequest::GetMetadata() const {
@@ -2389,645 +2375,6 @@ ::PROTOBUF_NAMESPACE_ID::Metadata PushTaskResResponse::GetMetadata() const {
// ===================================================================
-class Run::_Internal {
- public:
-};
-
-Run::Run(::PROTOBUF_NAMESPACE_ID::Arena* arena,
- bool is_message_owned)
- : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
- SharedCtor();
- if (!is_message_owned) {
- RegisterArenaDtor(arena);
- }
- // @@protoc_insertion_point(arena_constructor:flwr.proto.Run)
-}
-Run::Run(const Run& from)
- : ::PROTOBUF_NAMESPACE_ID::Message() {
- _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
- fab_id_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
- if (!from._internal_fab_id().empty()) {
- fab_id_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_fab_id(),
- GetArenaForAllocation());
- }
- fab_version_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
- if (!from._internal_fab_version().empty()) {
- fab_version_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_fab_version(),
- GetArenaForAllocation());
- }
- run_id_ = from.run_id_;
- // @@protoc_insertion_point(copy_constructor:flwr.proto.Run)
-}
-
-void Run::SharedCtor() {
-fab_id_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-fab_version_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-run_id_ = int64_t{0};
-}
-
-Run::~Run() {
- // @@protoc_insertion_point(destructor:flwr.proto.Run)
- if (GetArenaForAllocation() != nullptr) return;
- SharedDtor();
- _internal_metadata_.Delete<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
-}
-
-inline void Run::SharedDtor() {
- GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
- fab_id_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
- fab_version_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
-}
-
-void Run::ArenaDtor(void* object) {
- Run* _this = reinterpret_cast< Run* >(object);
- (void)_this;
-}
-void Run::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
-}
-void Run::SetCachedSize(int size) const {
- _cached_size_.Set(size);
-}
-
-void Run::Clear() {
-// @@protoc_insertion_point(message_clear_start:flwr.proto.Run)
- ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
- // Prevent compiler warnings about cached_has_bits being unused
- (void) cached_has_bits;
-
- fab_id_.ClearToEmpty();
- fab_version_.ClearToEmpty();
- run_id_ = int64_t{0};
- _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
-}
-
-const char* Run::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
-#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
- while (!ctx->Done(&ptr)) {
- ::PROTOBUF_NAMESPACE_ID::uint32 tag;
- ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
- switch (tag >> 3) {
- // sint64 run_id = 1;
- case 1:
- if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 8)) {
- run_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarintZigZag64(&ptr);
- CHK_(ptr);
- } else
- goto handle_unusual;
- continue;
- // string fab_id = 2;
- case 2:
- if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
- auto str = _internal_mutable_fab_id();
- ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
- CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "flwr.proto.Run.fab_id"));
- CHK_(ptr);
- } else
- goto handle_unusual;
- continue;
- // string fab_version = 3;
- case 3:
- if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
- auto str = _internal_mutable_fab_version();
- ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
- CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "flwr.proto.Run.fab_version"));
- CHK_(ptr);
- } else
- goto handle_unusual;
- continue;
- default:
- goto handle_unusual;
- } // switch
- handle_unusual:
- if ((tag == 0) || ((tag & 7) == 4)) {
- CHK_(ptr);
- ctx->SetLastTag(tag);
- goto message_done;
- }
- ptr = UnknownFieldParse(
- tag,
- _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
- ptr, ctx);
- CHK_(ptr != nullptr);
- } // while
-message_done:
- return ptr;
-failure:
- ptr = nullptr;
- goto message_done;
-#undef CHK_
-}
-
-::PROTOBUF_NAMESPACE_ID::uint8* Run::_InternalSerialize(
- ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
- // @@protoc_insertion_point(serialize_to_array_start:flwr.proto.Run)
- ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
- (void) cached_has_bits;
-
- // sint64 run_id = 1;
- if (this->_internal_run_id() != 0) {
- target = stream->EnsureSpace(target);
- target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteSInt64ToArray(1, this->_internal_run_id(), target);
- }
-
- // string fab_id = 2;
- if (!this->_internal_fab_id().empty()) {
- ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
- this->_internal_fab_id().data(), static_cast(this->_internal_fab_id().length()),
- ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
- "flwr.proto.Run.fab_id");
- target = stream->WriteStringMaybeAliased(
- 2, this->_internal_fab_id(), target);
- }
-
- // string fab_version = 3;
- if (!this->_internal_fab_version().empty()) {
- ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
- this->_internal_fab_version().data(), static_cast(this->_internal_fab_version().length()),
- ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
- "flwr.proto.Run.fab_version");
- target = stream->WriteStringMaybeAliased(
- 3, this->_internal_fab_version(), target);
- }
-
- if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
- target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
- _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
- }
- // @@protoc_insertion_point(serialize_to_array_end:flwr.proto.Run)
- return target;
-}
-
-size_t Run::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:flwr.proto.Run)
- size_t total_size = 0;
-
- ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
- // Prevent compiler warnings about cached_has_bits being unused
- (void) cached_has_bits;
-
- // string fab_id = 2;
- if (!this->_internal_fab_id().empty()) {
- total_size += 1 +
- ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
- this->_internal_fab_id());
- }
-
- // string fab_version = 3;
- if (!this->_internal_fab_version().empty()) {
- total_size += 1 +
- ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
- this->_internal_fab_version());
- }
-
- // sint64 run_id = 1;
- if (this->_internal_run_id() != 0) {
- total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SInt64SizePlusOne(this->_internal_run_id());
- }
-
- return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
-}
-
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Run::_class_data_ = {
- ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
- Run::MergeImpl
-};
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Run::GetClassData() const { return &_class_data_; }
-
-void Run::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
- const ::PROTOBUF_NAMESPACE_ID::Message& from) {
- static_cast(to)->MergeFrom(
- static_cast(from));
-}
-
-
-void Run::MergeFrom(const Run& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:flwr.proto.Run)
- GOOGLE_DCHECK_NE(&from, this);
- ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
- (void) cached_has_bits;
-
- if (!from._internal_fab_id().empty()) {
- _internal_set_fab_id(from._internal_fab_id());
- }
- if (!from._internal_fab_version().empty()) {
- _internal_set_fab_version(from._internal_fab_version());
- }
- if (from._internal_run_id() != 0) {
- _internal_set_run_id(from._internal_run_id());
- }
- _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-}
-
-void Run::CopyFrom(const Run& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:flwr.proto.Run)
- if (&from == this) return;
- Clear();
- MergeFrom(from);
-}
-
-bool Run::IsInitialized() const {
- return true;
-}
-
-void Run::InternalSwap(Run* other) {
- using std::swap;
- auto* lhs_arena = GetArenaForAllocation();
- auto* rhs_arena = other->GetArenaForAllocation();
- _internal_metadata_.InternalSwap(&other->_internal_metadata_);
- ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
- &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
- &fab_id_, lhs_arena,
- &other->fab_id_, rhs_arena
- );
- ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
- &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
- &fab_version_, lhs_arena,
- &other->fab_version_, rhs_arena
- );
- swap(run_id_, other->run_id_);
-}
-
-::PROTOBUF_NAMESPACE_ID::Metadata Run::GetMetadata() const {
- return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
- &descriptor_table_flwr_2fproto_2ffleet_2eproto_getter, &descriptor_table_flwr_2fproto_2ffleet_2eproto_once,
- file_level_metadata_flwr_2fproto_2ffleet_2eproto[11]);
-}
-
-// ===================================================================
-
-class GetRunRequest::_Internal {
- public:
-};
-
-GetRunRequest::GetRunRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
- bool is_message_owned)
- : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
- SharedCtor();
- if (!is_message_owned) {
- RegisterArenaDtor(arena);
- }
- // @@protoc_insertion_point(arena_constructor:flwr.proto.GetRunRequest)
-}
-GetRunRequest::GetRunRequest(const GetRunRequest& from)
- : ::PROTOBUF_NAMESPACE_ID::Message() {
- _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
- run_id_ = from.run_id_;
- // @@protoc_insertion_point(copy_constructor:flwr.proto.GetRunRequest)
-}
-
-void GetRunRequest::SharedCtor() {
-run_id_ = int64_t{0};
-}
-
-GetRunRequest::~GetRunRequest() {
- // @@protoc_insertion_point(destructor:flwr.proto.GetRunRequest)
- if (GetArenaForAllocation() != nullptr) return;
- SharedDtor();
- _internal_metadata_.Delete<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
-}
-
-inline void GetRunRequest::SharedDtor() {
- GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
-}
-
-void GetRunRequest::ArenaDtor(void* object) {
- GetRunRequest* _this = reinterpret_cast< GetRunRequest* >(object);
- (void)_this;
-}
-void GetRunRequest::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
-}
-void GetRunRequest::SetCachedSize(int size) const {
- _cached_size_.Set(size);
-}
-
-void GetRunRequest::Clear() {
-// @@protoc_insertion_point(message_clear_start:flwr.proto.GetRunRequest)
- ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
- // Prevent compiler warnings about cached_has_bits being unused
- (void) cached_has_bits;
-
- run_id_ = int64_t{0};
- _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
-}
-
-const char* GetRunRequest::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
-#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
- while (!ctx->Done(&ptr)) {
- ::PROTOBUF_NAMESPACE_ID::uint32 tag;
- ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
- switch (tag >> 3) {
- // sint64 run_id = 1;
- case 1:
- if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 8)) {
- run_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarintZigZag64(&ptr);
- CHK_(ptr);
- } else
- goto handle_unusual;
- continue;
- default:
- goto handle_unusual;
- } // switch
- handle_unusual:
- if ((tag == 0) || ((tag & 7) == 4)) {
- CHK_(ptr);
- ctx->SetLastTag(tag);
- goto message_done;
- }
- ptr = UnknownFieldParse(
- tag,
- _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
- ptr, ctx);
- CHK_(ptr != nullptr);
- } // while
-message_done:
- return ptr;
-failure:
- ptr = nullptr;
- goto message_done;
-#undef CHK_
-}
-
-::PROTOBUF_NAMESPACE_ID::uint8* GetRunRequest::_InternalSerialize(
- ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
- // @@protoc_insertion_point(serialize_to_array_start:flwr.proto.GetRunRequest)
- ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
- (void) cached_has_bits;
-
- // sint64 run_id = 1;
- if (this->_internal_run_id() != 0) {
- target = stream->EnsureSpace(target);
- target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteSInt64ToArray(1, this->_internal_run_id(), target);
- }
-
- if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
- target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
- _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
- }
- // @@protoc_insertion_point(serialize_to_array_end:flwr.proto.GetRunRequest)
- return target;
-}
-
-size_t GetRunRequest::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:flwr.proto.GetRunRequest)
- size_t total_size = 0;
-
- ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
- // Prevent compiler warnings about cached_has_bits being unused
- (void) cached_has_bits;
-
- // sint64 run_id = 1;
- if (this->_internal_run_id() != 0) {
- total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SInt64SizePlusOne(this->_internal_run_id());
- }
-
- return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
-}
-
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData GetRunRequest::_class_data_ = {
- ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
- GetRunRequest::MergeImpl
-};
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetRunRequest::GetClassData() const { return &_class_data_; }
-
-void GetRunRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
- const ::PROTOBUF_NAMESPACE_ID::Message& from) {
- static_cast(to)->MergeFrom(
- static_cast(from));
-}
-
-
-void GetRunRequest::MergeFrom(const GetRunRequest& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:flwr.proto.GetRunRequest)
- GOOGLE_DCHECK_NE(&from, this);
- ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
- (void) cached_has_bits;
-
- if (from._internal_run_id() != 0) {
- _internal_set_run_id(from._internal_run_id());
- }
- _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-}
-
-void GetRunRequest::CopyFrom(const GetRunRequest& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:flwr.proto.GetRunRequest)
- if (&from == this) return;
- Clear();
- MergeFrom(from);
-}
-
-bool GetRunRequest::IsInitialized() const {
- return true;
-}
-
-void GetRunRequest::InternalSwap(GetRunRequest* other) {
- using std::swap;
- _internal_metadata_.InternalSwap(&other->_internal_metadata_);
- swap(run_id_, other->run_id_);
-}
-
-::PROTOBUF_NAMESPACE_ID::Metadata GetRunRequest::GetMetadata() const {
- return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
- &descriptor_table_flwr_2fproto_2ffleet_2eproto_getter, &descriptor_table_flwr_2fproto_2ffleet_2eproto_once,
- file_level_metadata_flwr_2fproto_2ffleet_2eproto[12]);
-}
-
-// ===================================================================
-
-class GetRunResponse::_Internal {
- public:
- static const ::flwr::proto::Run& run(const GetRunResponse* msg);
-};
-
-const ::flwr::proto::Run&
-GetRunResponse::_Internal::run(const GetRunResponse* msg) {
- return *msg->run_;
-}
-GetRunResponse::GetRunResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
- bool is_message_owned)
- : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
- SharedCtor();
- if (!is_message_owned) {
- RegisterArenaDtor(arena);
- }
- // @@protoc_insertion_point(arena_constructor:flwr.proto.GetRunResponse)
-}
-GetRunResponse::GetRunResponse(const GetRunResponse& from)
- : ::PROTOBUF_NAMESPACE_ID::Message() {
- _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
- if (from._internal_has_run()) {
- run_ = new ::flwr::proto::Run(*from.run_);
- } else {
- run_ = nullptr;
- }
- // @@protoc_insertion_point(copy_constructor:flwr.proto.GetRunResponse)
-}
-
-void GetRunResponse::SharedCtor() {
-run_ = nullptr;
-}
-
-GetRunResponse::~GetRunResponse() {
- // @@protoc_insertion_point(destructor:flwr.proto.GetRunResponse)
- if (GetArenaForAllocation() != nullptr) return;
- SharedDtor();
- _internal_metadata_.Delete<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
-}
-
-inline void GetRunResponse::SharedDtor() {
- GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
- if (this != internal_default_instance()) delete run_;
-}
-
-void GetRunResponse::ArenaDtor(void* object) {
- GetRunResponse* _this = reinterpret_cast< GetRunResponse* >(object);
- (void)_this;
-}
-void GetRunResponse::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
-}
-void GetRunResponse::SetCachedSize(int size) const {
- _cached_size_.Set(size);
-}
-
-void GetRunResponse::Clear() {
-// @@protoc_insertion_point(message_clear_start:flwr.proto.GetRunResponse)
- ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
- // Prevent compiler warnings about cached_has_bits being unused
- (void) cached_has_bits;
-
- if (GetArenaForAllocation() == nullptr && run_ != nullptr) {
- delete run_;
- }
- run_ = nullptr;
- _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
-}
-
-const char* GetRunResponse::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
-#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
- while (!ctx->Done(&ptr)) {
- ::PROTOBUF_NAMESPACE_ID::uint32 tag;
- ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
- switch (tag >> 3) {
- // .flwr.proto.Run run = 1;
- case 1:
- if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
- ptr = ctx->ParseMessage(_internal_mutable_run(), ptr);
- CHK_(ptr);
- } else
- goto handle_unusual;
- continue;
- default:
- goto handle_unusual;
- } // switch
- handle_unusual:
- if ((tag == 0) || ((tag & 7) == 4)) {
- CHK_(ptr);
- ctx->SetLastTag(tag);
- goto message_done;
- }
- ptr = UnknownFieldParse(
- tag,
- _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
- ptr, ctx);
- CHK_(ptr != nullptr);
- } // while
-message_done:
- return ptr;
-failure:
- ptr = nullptr;
- goto message_done;
-#undef CHK_
-}
-
-::PROTOBUF_NAMESPACE_ID::uint8* GetRunResponse::_InternalSerialize(
- ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
- // @@protoc_insertion_point(serialize_to_array_start:flwr.proto.GetRunResponse)
- ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
- (void) cached_has_bits;
-
- // .flwr.proto.Run run = 1;
- if (this->_internal_has_run()) {
- target = stream->EnsureSpace(target);
- target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
- InternalWriteMessage(
- 1, _Internal::run(this), target, stream);
- }
-
- if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
- target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
- _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
- }
- // @@protoc_insertion_point(serialize_to_array_end:flwr.proto.GetRunResponse)
- return target;
-}
-
-size_t GetRunResponse::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:flwr.proto.GetRunResponse)
- size_t total_size = 0;
-
- ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
- // Prevent compiler warnings about cached_has_bits being unused
- (void) cached_has_bits;
-
- // .flwr.proto.Run run = 1;
- if (this->_internal_has_run()) {
- total_size += 1 +
- ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
- *run_);
- }
-
- return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
-}
-
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData GetRunResponse::_class_data_ = {
- ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
- GetRunResponse::MergeImpl
-};
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetRunResponse::GetClassData() const { return &_class_data_; }
-
-void GetRunResponse::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
- const ::PROTOBUF_NAMESPACE_ID::Message& from) {
- static_cast(to)->MergeFrom(
- static_cast(from));
-}
-
-
-void GetRunResponse::MergeFrom(const GetRunResponse& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:flwr.proto.GetRunResponse)
- GOOGLE_DCHECK_NE(&from, this);
- ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
- (void) cached_has_bits;
-
- if (from._internal_has_run()) {
- _internal_mutable_run()->::flwr::proto::Run::MergeFrom(from._internal_run());
- }
- _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
-}
-
-void GetRunResponse::CopyFrom(const GetRunResponse& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:flwr.proto.GetRunResponse)
- if (&from == this) return;
- Clear();
- MergeFrom(from);
-}
-
-bool GetRunResponse::IsInitialized() const {
- return true;
-}
-
-void GetRunResponse::InternalSwap(GetRunResponse* other) {
- using std::swap;
- _internal_metadata_.InternalSwap(&other->_internal_metadata_);
- swap(run_, other->run_);
-}
-
-::PROTOBUF_NAMESPACE_ID::Metadata GetRunResponse::GetMetadata() const {
- return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
- &descriptor_table_flwr_2fproto_2ffleet_2eproto_getter, &descriptor_table_flwr_2fproto_2ffleet_2eproto_once,
- file_level_metadata_flwr_2fproto_2ffleet_2eproto[13]);
-}
-
-// ===================================================================
-
class Reconnect::_Internal {
public:
};
@@ -3201,7 +2548,7 @@ void Reconnect::InternalSwap(Reconnect* other) {
::PROTOBUF_NAMESPACE_ID::Metadata Reconnect::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2ffleet_2eproto_getter, &descriptor_table_flwr_2fproto_2ffleet_2eproto_once,
- file_level_metadata_flwr_2fproto_2ffleet_2eproto[14]);
+ file_level_metadata_flwr_2fproto_2ffleet_2eproto[11]);
}
// @@protoc_insertion_point(namespace_scope)
@@ -3241,15 +2588,6 @@ template<> PROTOBUF_NOINLINE ::flwr::proto::PushTaskResResponse_ResultsEntry_DoN
template<> PROTOBUF_NOINLINE ::flwr::proto::PushTaskResResponse* Arena::CreateMaybeMessage< ::flwr::proto::PushTaskResResponse >(Arena* arena) {
return Arena::CreateMessageInternal< ::flwr::proto::PushTaskResResponse >(arena);
}
-template<> PROTOBUF_NOINLINE ::flwr::proto::Run* Arena::CreateMaybeMessage< ::flwr::proto::Run >(Arena* arena) {
- return Arena::CreateMessageInternal< ::flwr::proto::Run >(arena);
-}
-template<> PROTOBUF_NOINLINE ::flwr::proto::GetRunRequest* Arena::CreateMaybeMessage< ::flwr::proto::GetRunRequest >(Arena* arena) {
- return Arena::CreateMessageInternal< ::flwr::proto::GetRunRequest >(arena);
-}
-template<> PROTOBUF_NOINLINE ::flwr::proto::GetRunResponse* Arena::CreateMaybeMessage< ::flwr::proto::GetRunResponse >(Arena* arena) {
- return Arena::CreateMessageInternal< ::flwr::proto::GetRunResponse >(arena);
-}
template<> PROTOBUF_NOINLINE ::flwr::proto::Reconnect* Arena::CreateMaybeMessage< ::flwr::proto::Reconnect >(Arena* arena) {
return Arena::CreateMessageInternal< ::flwr::proto::Reconnect >(arena);
}
diff --git a/src/cc/flwr/include/flwr/proto/fleet.pb.h b/framework/src/cc/flwr/include/flwr/proto/fleet.pb.h
similarity index 80%
rename from src/cc/flwr/include/flwr/proto/fleet.pb.h
rename to framework/src/cc/flwr/include/flwr/proto/fleet.pb.h
index 9ad30b5752f5..9a65252b1385 100644
--- a/src/cc/flwr/include/flwr/proto/fleet.pb.h
+++ b/framework/src/cc/flwr/include/flwr/proto/fleet.pb.h
@@ -37,6 +37,8 @@
#include
#include "flwr/proto/node.pb.h"
#include "flwr/proto/task.pb.h"
+#include "flwr/proto/run.pb.h"
+#include "flwr/proto/fab.pb.h"
// @@protoc_insertion_point(includes)
#include
#define PROTOBUF_INTERNAL_EXPORT_flwr_2fproto_2ffleet_2eproto
@@ -52,7 +54,7 @@ struct TableStruct_flwr_2fproto_2ffleet_2eproto {
PROTOBUF_SECTION_VARIABLE(protodesc_cold);
static const ::PROTOBUF_NAMESPACE_ID::internal::AuxiliaryParseTableField aux[]
PROTOBUF_SECTION_VARIABLE(protodesc_cold);
- static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[15]
+ static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[12]
PROTOBUF_SECTION_VARIABLE(protodesc_cold);
static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
@@ -73,12 +75,6 @@ extern DeleteNodeRequestDefaultTypeInternal _DeleteNodeRequest_default_instance_
class DeleteNodeResponse;
struct DeleteNodeResponseDefaultTypeInternal;
extern DeleteNodeResponseDefaultTypeInternal _DeleteNodeResponse_default_instance_;
-class GetRunRequest;
-struct GetRunRequestDefaultTypeInternal;
-extern GetRunRequestDefaultTypeInternal _GetRunRequest_default_instance_;
-class GetRunResponse;
-struct GetRunResponseDefaultTypeInternal;
-extern GetRunResponseDefaultTypeInternal _GetRunResponse_default_instance_;
class PingRequest;
struct PingRequestDefaultTypeInternal;
extern PingRequestDefaultTypeInternal _PingRequest_default_instance_;
@@ -103,9 +99,6 @@ extern PushTaskResResponse_ResultsEntry_DoNotUseDefaultTypeInternal _PushTaskRes
class Reconnect;
struct ReconnectDefaultTypeInternal;
extern ReconnectDefaultTypeInternal _Reconnect_default_instance_;
-class Run;
-struct RunDefaultTypeInternal;
-extern RunDefaultTypeInternal _Run_default_instance_;
} // namespace proto
} // namespace flwr
PROTOBUF_NAMESPACE_OPEN
@@ -113,8 +106,6 @@ template<> ::flwr::proto::CreateNodeRequest* Arena::CreateMaybeMessage<::flwr::p
template<> ::flwr::proto::CreateNodeResponse* Arena::CreateMaybeMessage<::flwr::proto::CreateNodeResponse>(Arena*);
template<> ::flwr::proto::DeleteNodeRequest* Arena::CreateMaybeMessage<::flwr::proto::DeleteNodeRequest>(Arena*);
template<> ::flwr::proto::DeleteNodeResponse* Arena::CreateMaybeMessage<::flwr::proto::DeleteNodeResponse>(Arena*);
-template<> ::flwr::proto::GetRunRequest* Arena::CreateMaybeMessage<::flwr::proto::GetRunRequest>(Arena*);
-template<> ::flwr::proto::GetRunResponse* Arena::CreateMaybeMessage<::flwr::proto::GetRunResponse>(Arena*);
template<> ::flwr::proto::PingRequest* Arena::CreateMaybeMessage<::flwr::proto::PingRequest>(Arena*);
template<> ::flwr::proto::PingResponse* Arena::CreateMaybeMessage<::flwr::proto::PingResponse>(Arena*);
template<> ::flwr::proto::PullTaskInsRequest* Arena::CreateMaybeMessage<::flwr::proto::PullTaskInsRequest>(Arena*);
@@ -123,7 +114,6 @@ template<> ::flwr::proto::PushTaskResRequest* Arena::CreateMaybeMessage<::flwr::
template<> ::flwr::proto::PushTaskResResponse* Arena::CreateMaybeMessage<::flwr::proto::PushTaskResResponse>(Arena*);
template<> ::flwr::proto::PushTaskResResponse_ResultsEntry_DoNotUse* Arena::CreateMaybeMessage<::flwr::proto::PushTaskResResponse_ResultsEntry_DoNotUse>(Arena*);
template<> ::flwr::proto::Reconnect* Arena::CreateMaybeMessage<::flwr::proto::Reconnect>(Arena*);
-template<> ::flwr::proto::Run* Arena::CreateMaybeMessage<::flwr::proto::Run>(Arena*);
PROTOBUF_NAMESPACE_CLOSE
namespace flwr {
namespace proto {
@@ -1467,9 +1457,10 @@ class PushTaskResRequest final :
// accessors -------------------------------------------------------
enum : int {
- kTaskResListFieldNumber = 1,
+ kTaskResListFieldNumber = 2,
+ kNodeFieldNumber = 1,
};
- // repeated .flwr.proto.TaskRes task_res_list = 1;
+ // repeated .flwr.proto.TaskRes task_res_list = 2;
int task_res_list_size() const;
private:
int _internal_task_res_list_size() const;
@@ -1487,6 +1478,24 @@ class PushTaskResRequest final :
const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::flwr::proto::TaskRes >&
task_res_list() const;
+ // .flwr.proto.Node node = 1;
+ bool has_node() const;
+ private:
+ bool _internal_has_node() const;
+ public:
+ void clear_node();
+ const ::flwr::proto::Node& node() const;
+ PROTOBUF_MUST_USE_RESULT ::flwr::proto::Node* release_node();
+ ::flwr::proto::Node* mutable_node();
+ void set_allocated_node(::flwr::proto::Node* node);
+ private:
+ const ::flwr::proto::Node& _internal_node() const;
+ ::flwr::proto::Node* _internal_mutable_node();
+ public:
+ void unsafe_arena_set_allocated_node(
+ ::flwr::proto::Node* node);
+ ::flwr::proto::Node* unsafe_arena_release_node();
+
// @@protoc_insertion_point(class_scope:flwr.proto.PushTaskResRequest)
private:
class _Internal;
@@ -1495,6 +1504,7 @@ class PushTaskResRequest final :
typedef void InternalArenaConstructable_;
typedef void DestructorSkippable_;
::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::flwr::proto::TaskRes > task_res_list_;
+ ::flwr::proto::Node* node_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
friend struct ::TableStruct_flwr_2fproto_2ffleet_2eproto;
};
@@ -1513,530 +1523,36 @@ class PushTaskResResponse_ResultsEntry_DoNotUse : public ::PROTOBUF_NAMESPACE_ID
explicit constexpr PushTaskResResponse_ResultsEntry_DoNotUse(
::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
explicit PushTaskResResponse_ResultsEntry_DoNotUse(::PROTOBUF_NAMESPACE_ID::Arena* arena);
- void MergeFrom(const PushTaskResResponse_ResultsEntry_DoNotUse& other);
- static const PushTaskResResponse_ResultsEntry_DoNotUse* internal_default_instance() { return reinterpret_cast(&_PushTaskResResponse_ResultsEntry_DoNotUse_default_instance_); }
- static bool ValidateKey(std::string* s) {
- return ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(s->data(), static_cast(s->size()), ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE, "flwr.proto.PushTaskResResponse.ResultsEntry.key");
- }
- static bool ValidateValue(void*) { return true; }
- using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
- ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
-};
-
-// -------------------------------------------------------------------
-
-class PushTaskResResponse final :
- public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:flwr.proto.PushTaskResResponse) */ {
- public:
- inline PushTaskResResponse() : PushTaskResResponse(nullptr) {}
- ~PushTaskResResponse() override;
- explicit constexpr PushTaskResResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
-
- PushTaskResResponse(const PushTaskResResponse& from);
- PushTaskResResponse(PushTaskResResponse&& from) noexcept
- : PushTaskResResponse() {
- *this = ::std::move(from);
- }
-
- inline PushTaskResResponse& operator=(const PushTaskResResponse& from) {
- CopyFrom(from);
- return *this;
- }
- inline PushTaskResResponse& operator=(PushTaskResResponse&& from) noexcept {
- if (this == &from) return *this;
- if (GetOwningArena() == from.GetOwningArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
- && GetOwningArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
- ) {
- InternalSwap(&from);
- } else {
- CopyFrom(from);
- }
- return *this;
- }
-
- static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
- return GetDescriptor();
- }
- static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
- return default_instance().GetMetadata().descriptor;
- }
- static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
- return default_instance().GetMetadata().reflection;
- }
- static const PushTaskResResponse& default_instance() {
- return *internal_default_instance();
- }
- static inline const PushTaskResResponse* internal_default_instance() {
- return reinterpret_cast(
- &_PushTaskResResponse_default_instance_);
- }
- static constexpr int kIndexInFileMessages =
- 10;
-
- friend void swap(PushTaskResResponse& a, PushTaskResResponse& b) {
- a.Swap(&b);
- }
- inline void Swap(PushTaskResResponse* other) {
- if (other == this) return;
- if (GetOwningArena() == other->GetOwningArena()) {
- InternalSwap(other);
- } else {
- ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
- }
- }
- void UnsafeArenaSwap(PushTaskResResponse* other) {
- if (other == this) return;
- GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
- InternalSwap(other);
- }
-
- // implements Message ----------------------------------------------
-
- inline PushTaskResResponse* New() const final {
- return new PushTaskResResponse();
- }
-
- PushTaskResResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
- return CreateMaybeMessage(arena);
- }
- using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
- void CopyFrom(const PushTaskResResponse& from);
- using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
- void MergeFrom(const PushTaskResResponse& from);
- private:
- static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
- public:
- PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
- bool IsInitialized() const final;
-
- size_t ByteSizeLong() const final;
- const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
- ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
- ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
- int GetCachedSize() const final { return _cached_size_.Get(); }
-
- private:
- void SharedCtor();
- void SharedDtor();
- void SetCachedSize(int size) const final;
- void InternalSwap(PushTaskResResponse* other);
- friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
- static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
- return "flwr.proto.PushTaskResResponse";
- }
- protected:
- explicit PushTaskResResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
- bool is_message_owned = false);
- private:
- static void ArenaDtor(void* object);
- inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
- public:
-
- static const ClassData _class_data_;
- const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
-
- ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
-
- // nested types ----------------------------------------------------
-
-
- // accessors -------------------------------------------------------
-
- enum : int {
- kResultsFieldNumber = 2,
- kReconnectFieldNumber = 1,
- };
- // map results = 2;
- int results_size() const;
- private:
- int _internal_results_size() const;
- public:
- void clear_results();
- private:
- const ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::PROTOBUF_NAMESPACE_ID::uint32 >&
- _internal_results() const;
- ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::PROTOBUF_NAMESPACE_ID::uint32 >*
- _internal_mutable_results();
- public:
- const ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::PROTOBUF_NAMESPACE_ID::uint32 >&
- results() const;
- ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::PROTOBUF_NAMESPACE_ID::uint32 >*
- mutable_results();
-
- // .flwr.proto.Reconnect reconnect = 1;
- bool has_reconnect() const;
- private:
- bool _internal_has_reconnect() const;
- public:
- void clear_reconnect();
- const ::flwr::proto::Reconnect& reconnect() const;
- PROTOBUF_MUST_USE_RESULT ::flwr::proto::Reconnect* release_reconnect();
- ::flwr::proto::Reconnect* mutable_reconnect();
- void set_allocated_reconnect(::flwr::proto::Reconnect* reconnect);
- private:
- const ::flwr::proto::Reconnect& _internal_reconnect() const;
- ::flwr::proto::Reconnect* _internal_mutable_reconnect();
- public:
- void unsafe_arena_set_allocated_reconnect(
- ::flwr::proto::Reconnect* reconnect);
- ::flwr::proto::Reconnect* unsafe_arena_release_reconnect();
-
- // @@protoc_insertion_point(class_scope:flwr.proto.PushTaskResResponse)
- private:
- class _Internal;
-
- template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
- typedef void InternalArenaConstructable_;
- typedef void DestructorSkippable_;
- ::PROTOBUF_NAMESPACE_ID::internal::MapField<
- PushTaskResResponse_ResultsEntry_DoNotUse,
- std::string, ::PROTOBUF_NAMESPACE_ID::uint32,
- ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_STRING,
- ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_UINT32> results_;
- ::flwr::proto::Reconnect* reconnect_;
- mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
- friend struct ::TableStruct_flwr_2fproto_2ffleet_2eproto;
-};
-// -------------------------------------------------------------------
-
-class Run final :
- public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:flwr.proto.Run) */ {
- public:
- inline Run() : Run(nullptr) {}
- ~Run() override;
- explicit constexpr Run(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
-
- Run(const Run& from);
- Run(Run&& from) noexcept
- : Run() {
- *this = ::std::move(from);
- }
-
- inline Run& operator=(const Run& from) {
- CopyFrom(from);
- return *this;
- }
- inline Run& operator=(Run&& from) noexcept {
- if (this == &from) return *this;
- if (GetOwningArena() == from.GetOwningArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
- && GetOwningArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
- ) {
- InternalSwap(&from);
- } else {
- CopyFrom(from);
- }
- return *this;
- }
-
- static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
- return GetDescriptor();
- }
- static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
- return default_instance().GetMetadata().descriptor;
- }
- static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
- return default_instance().GetMetadata().reflection;
- }
- static const Run& default_instance() {
- return *internal_default_instance();
- }
- static inline const Run* internal_default_instance() {
- return reinterpret_cast(
- &_Run_default_instance_);
- }
- static constexpr int kIndexInFileMessages =
- 11;
-
- friend void swap(Run& a, Run& b) {
- a.Swap(&b);
- }
- inline void Swap(Run* other) {
- if (other == this) return;
- if (GetOwningArena() == other->GetOwningArena()) {
- InternalSwap(other);
- } else {
- ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
- }
- }
- void UnsafeArenaSwap(Run* other) {
- if (other == this) return;
- GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
- InternalSwap(other);
- }
-
- // implements Message ----------------------------------------------
-
- inline Run* New() const final {
- return new Run();
- }
-
- Run* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
- return CreateMaybeMessage(arena);
- }
- using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
- void CopyFrom(const Run& from);
- using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
- void MergeFrom(const Run& from);
- private:
- static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
- public:
- PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
- bool IsInitialized() const final;
-
- size_t ByteSizeLong() const final;
- const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
- ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
- ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
- int GetCachedSize() const final { return _cached_size_.Get(); }
-
- private:
- void SharedCtor();
- void SharedDtor();
- void SetCachedSize(int size) const final;
- void InternalSwap(Run* other);
- friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
- static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
- return "flwr.proto.Run";
- }
- protected:
- explicit Run(::PROTOBUF_NAMESPACE_ID::Arena* arena,
- bool is_message_owned = false);
- private:
- static void ArenaDtor(void* object);
- inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
- public:
-
- static const ClassData _class_data_;
- const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
-
- ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
-
- // nested types ----------------------------------------------------
-
- // accessors -------------------------------------------------------
-
- enum : int {
- kFabIdFieldNumber = 2,
- kFabVersionFieldNumber = 3,
- kRunIdFieldNumber = 1,
- };
- // string fab_id = 2;
- void clear_fab_id();
- const std::string& fab_id() const;
- template
- void set_fab_id(ArgT0&& arg0, ArgT... args);
- std::string* mutable_fab_id();
- PROTOBUF_MUST_USE_RESULT std::string* release_fab_id();
- void set_allocated_fab_id(std::string* fab_id);
- private:
- const std::string& _internal_fab_id() const;
- inline PROTOBUF_ALWAYS_INLINE void _internal_set_fab_id(const std::string& value);
- std::string* _internal_mutable_fab_id();
- public:
-
- // string fab_version = 3;
- void clear_fab_version();
- const std::string& fab_version() const;
- template
- void set_fab_version(ArgT0&& arg0, ArgT... args);
- std::string* mutable_fab_version();
- PROTOBUF_MUST_USE_RESULT std::string* release_fab_version();
- void set_allocated_fab_version(std::string* fab_version);
- private:
- const std::string& _internal_fab_version() const;
- inline PROTOBUF_ALWAYS_INLINE void _internal_set_fab_version(const std::string& value);
- std::string* _internal_mutable_fab_version();
- public:
-
- // sint64 run_id = 1;
- void clear_run_id();
- ::PROTOBUF_NAMESPACE_ID::int64 run_id() const;
- void set_run_id(::PROTOBUF_NAMESPACE_ID::int64 value);
- private:
- ::PROTOBUF_NAMESPACE_ID::int64 _internal_run_id() const;
- void _internal_set_run_id(::PROTOBUF_NAMESPACE_ID::int64 value);
- public:
-
- // @@protoc_insertion_point(class_scope:flwr.proto.Run)
- private:
- class _Internal;
-
- template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
- typedef void InternalArenaConstructable_;
- typedef void DestructorSkippable_;
- ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr fab_id_;
- ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr fab_version_;
- ::PROTOBUF_NAMESPACE_ID::int64 run_id_;
- mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
- friend struct ::TableStruct_flwr_2fproto_2ffleet_2eproto;
-};
-// -------------------------------------------------------------------
-
-class GetRunRequest final :
- public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:flwr.proto.GetRunRequest) */ {
- public:
- inline GetRunRequest() : GetRunRequest(nullptr) {}
- ~GetRunRequest() override;
- explicit constexpr GetRunRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
-
- GetRunRequest(const GetRunRequest& from);
- GetRunRequest(GetRunRequest&& from) noexcept
- : GetRunRequest() {
- *this = ::std::move(from);
- }
-
- inline GetRunRequest& operator=(const GetRunRequest& from) {
- CopyFrom(from);
- return *this;
- }
- inline GetRunRequest& operator=(GetRunRequest&& from) noexcept {
- if (this == &from) return *this;
- if (GetOwningArena() == from.GetOwningArena()
- #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
- && GetOwningArena() != nullptr
- #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
- ) {
- InternalSwap(&from);
- } else {
- CopyFrom(from);
- }
- return *this;
- }
-
- static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
- return GetDescriptor();
- }
- static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
- return default_instance().GetMetadata().descriptor;
- }
- static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
- return default_instance().GetMetadata().reflection;
- }
- static const GetRunRequest& default_instance() {
- return *internal_default_instance();
- }
- static inline const GetRunRequest* internal_default_instance() {
- return reinterpret_cast(
- &_GetRunRequest_default_instance_);
- }
- static constexpr int kIndexInFileMessages =
- 12;
-
- friend void swap(GetRunRequest& a, GetRunRequest& b) {
- a.Swap(&b);
- }
- inline void Swap(GetRunRequest* other) {
- if (other == this) return;
- if (GetOwningArena() == other->GetOwningArena()) {
- InternalSwap(other);
- } else {
- ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
- }
- }
- void UnsafeArenaSwap(GetRunRequest* other) {
- if (other == this) return;
- GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
- InternalSwap(other);
- }
-
- // implements Message ----------------------------------------------
-
- inline GetRunRequest* New() const final {
- return new GetRunRequest();
- }
-
- GetRunRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
- return CreateMaybeMessage(arena);
- }
- using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
- void CopyFrom(const GetRunRequest& from);
- using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
- void MergeFrom(const GetRunRequest& from);
- private:
- static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
- public:
- PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
- bool IsInitialized() const final;
-
- size_t ByteSizeLong() const final;
- const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
- ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
- ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
- int GetCachedSize() const final { return _cached_size_.Get(); }
-
- private:
- void SharedCtor();
- void SharedDtor();
- void SetCachedSize(int size) const final;
- void InternalSwap(GetRunRequest* other);
- friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
- static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
- return "flwr.proto.GetRunRequest";
- }
- protected:
- explicit GetRunRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
- bool is_message_owned = false);
- private:
- static void ArenaDtor(void* object);
- inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
- public:
-
- static const ClassData _class_data_;
- const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
-
- ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
-
- // nested types ----------------------------------------------------
-
- // accessors -------------------------------------------------------
-
- enum : int {
- kRunIdFieldNumber = 1,
- };
- // sint64 run_id = 1;
- void clear_run_id();
- ::PROTOBUF_NAMESPACE_ID::int64 run_id() const;
- void set_run_id(::PROTOBUF_NAMESPACE_ID::int64 value);
- private:
- ::PROTOBUF_NAMESPACE_ID::int64 _internal_run_id() const;
- void _internal_set_run_id(::PROTOBUF_NAMESPACE_ID::int64 value);
- public:
-
- // @@protoc_insertion_point(class_scope:flwr.proto.GetRunRequest)
- private:
- class _Internal;
-
- template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
- typedef void InternalArenaConstructable_;
- typedef void DestructorSkippable_;
- ::PROTOBUF_NAMESPACE_ID::int64 run_id_;
- mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
- friend struct ::TableStruct_flwr_2fproto_2ffleet_2eproto;
+ void MergeFrom(const PushTaskResResponse_ResultsEntry_DoNotUse& other);
+ static const PushTaskResResponse_ResultsEntry_DoNotUse* internal_default_instance() { return reinterpret_cast(&_PushTaskResResponse_ResultsEntry_DoNotUse_default_instance_); }
+ static bool ValidateKey(std::string* s) {
+ return ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(s->data(), static_cast(s->size()), ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE, "flwr.proto.PushTaskResResponse.ResultsEntry.key");
+ }
+ static bool ValidateValue(void*) { return true; }
+ using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+ ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
};
+
// -------------------------------------------------------------------
-class GetRunResponse final :
- public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:flwr.proto.GetRunResponse) */ {
+class PushTaskResResponse final :
+ public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:flwr.proto.PushTaskResResponse) */ {
public:
- inline GetRunResponse() : GetRunResponse(nullptr) {}
- ~GetRunResponse() override;
- explicit constexpr GetRunResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+ inline PushTaskResResponse() : PushTaskResResponse(nullptr) {}
+ ~PushTaskResResponse() override;
+ explicit constexpr PushTaskResResponse(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
- GetRunResponse(const GetRunResponse& from);
- GetRunResponse(GetRunResponse&& from) noexcept
- : GetRunResponse() {
+ PushTaskResResponse(const PushTaskResResponse& from);
+ PushTaskResResponse(PushTaskResResponse&& from) noexcept
+ : PushTaskResResponse() {
*this = ::std::move(from);
}
- inline GetRunResponse& operator=(const GetRunResponse& from) {
+ inline PushTaskResResponse& operator=(const PushTaskResResponse& from) {
CopyFrom(from);
return *this;
}
- inline GetRunResponse& operator=(GetRunResponse&& from) noexcept {
+ inline PushTaskResResponse& operator=(PushTaskResResponse&& from) noexcept {
if (this == &from) return *this;
if (GetOwningArena() == from.GetOwningArena()
#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -2059,20 +1575,20 @@ class GetRunResponse final :
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return default_instance().GetMetadata().reflection;
}
- static const GetRunResponse& default_instance() {
+ static const PushTaskResResponse& default_instance() {
return *internal_default_instance();
}
- static inline const GetRunResponse* internal_default_instance() {
- return reinterpret_cast(
- &_GetRunResponse_default_instance_);
+ static inline const PushTaskResResponse* internal_default_instance() {
+ return reinterpret_cast(
+ &_PushTaskResResponse_default_instance_);
}
static constexpr int kIndexInFileMessages =
- 13;
+ 10;
- friend void swap(GetRunResponse& a, GetRunResponse& b) {
+ friend void swap(PushTaskResResponse& a, PushTaskResResponse& b) {
a.Swap(&b);
}
- inline void Swap(GetRunResponse* other) {
+ inline void Swap(PushTaskResResponse* other) {
if (other == this) return;
if (GetOwningArena() == other->GetOwningArena()) {
InternalSwap(other);
@@ -2080,7 +1596,7 @@ class GetRunResponse final :
::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
}
}
- void UnsafeArenaSwap(GetRunResponse* other) {
+ void UnsafeArenaSwap(PushTaskResResponse* other) {
if (other == this) return;
GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
InternalSwap(other);
@@ -2088,17 +1604,17 @@ class GetRunResponse final :
// implements Message ----------------------------------------------
- inline GetRunResponse* New() const final {
- return new GetRunResponse();
+ inline PushTaskResResponse* New() const final {
+ return new PushTaskResResponse();
}
- GetRunResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
- return CreateMaybeMessage(arena);
+ PushTaskResResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
+ return CreateMaybeMessage(arena);
}
using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
- void CopyFrom(const GetRunResponse& from);
+ void CopyFrom(const PushTaskResResponse& from);
using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
- void MergeFrom(const GetRunResponse& from);
+ void MergeFrom(const PushTaskResResponse& from);
private:
static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
public:
@@ -2115,13 +1631,13 @@ class GetRunResponse final :
void SharedCtor();
void SharedDtor();
void SetCachedSize(int size) const final;
- void InternalSwap(GetRunResponse* other);
+ void InternalSwap(PushTaskResResponse* other);
friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
- return "flwr.proto.GetRunResponse";
+ return "flwr.proto.PushTaskResResponse";
}
protected:
- explicit GetRunResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+ explicit PushTaskResResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
bool is_message_owned = false);
private:
static void ArenaDtor(void* object);
@@ -2135,37 +1651,61 @@ class GetRunResponse final :
// nested types ----------------------------------------------------
+
// accessors -------------------------------------------------------
enum : int {
- kRunFieldNumber = 1,
+ kResultsFieldNumber = 2,
+ kReconnectFieldNumber = 1,
};
- // .flwr.proto.Run run = 1;
- bool has_run() const;
+ // map results = 2;
+ int results_size() const;
+ private:
+ int _internal_results_size() const;
+ public:
+ void clear_results();
+ private:
+ const ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::PROTOBUF_NAMESPACE_ID::uint32 >&
+ _internal_results() const;
+ ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::PROTOBUF_NAMESPACE_ID::uint32 >*
+ _internal_mutable_results();
+ public:
+ const ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::PROTOBUF_NAMESPACE_ID::uint32 >&
+ results() const;
+ ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::PROTOBUF_NAMESPACE_ID::uint32 >*
+ mutable_results();
+
+ // .flwr.proto.Reconnect reconnect = 1;
+ bool has_reconnect() const;
private:
- bool _internal_has_run() const;
+ bool _internal_has_reconnect() const;
public:
- void clear_run();
- const ::flwr::proto::Run& run() const;
- PROTOBUF_MUST_USE_RESULT ::flwr::proto::Run* release_run();
- ::flwr::proto::Run* mutable_run();
- void set_allocated_run(::flwr::proto::Run* run);
+ void clear_reconnect();
+ const ::flwr::proto::Reconnect& reconnect() const;
+ PROTOBUF_MUST_USE_RESULT ::flwr::proto::Reconnect* release_reconnect();
+ ::flwr::proto::Reconnect* mutable_reconnect();
+ void set_allocated_reconnect(::flwr::proto::Reconnect* reconnect);
private:
- const ::flwr::proto::Run& _internal_run() const;
- ::flwr::proto::Run* _internal_mutable_run();
+ const ::flwr::proto::Reconnect& _internal_reconnect() const;
+ ::flwr::proto::Reconnect* _internal_mutable_reconnect();
public:
- void unsafe_arena_set_allocated_run(
- ::flwr::proto::Run* run);
- ::flwr::proto::Run* unsafe_arena_release_run();
+ void unsafe_arena_set_allocated_reconnect(
+ ::flwr::proto::Reconnect* reconnect);
+ ::flwr::proto::Reconnect* unsafe_arena_release_reconnect();
- // @@protoc_insertion_point(class_scope:flwr.proto.GetRunResponse)
+ // @@protoc_insertion_point(class_scope:flwr.proto.PushTaskResResponse)
private:
class _Internal;
template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
typedef void InternalArenaConstructable_;
typedef void DestructorSkippable_;
- ::flwr::proto::Run* run_;
+ ::PROTOBUF_NAMESPACE_ID::internal::MapField<
+ PushTaskResResponse_ResultsEntry_DoNotUse,
+ std::string, ::PROTOBUF_NAMESPACE_ID::uint32,
+ ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_STRING,
+ ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_UINT32> results_;
+ ::flwr::proto::Reconnect* reconnect_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
friend struct ::TableStruct_flwr_2fproto_2ffleet_2eproto;
};
@@ -2219,7 +1759,7 @@ class Reconnect final :
&_Reconnect_default_instance_);
}
static constexpr int kIndexInFileMessages =
- 14;
+ 11;
friend void swap(Reconnect& a, Reconnect& b) {
a.Swap(&b);
@@ -2961,7 +2501,93 @@ PullTaskInsResponse::task_ins_list() const {
// PushTaskResRequest
-// repeated .flwr.proto.TaskRes task_res_list = 1;
+// .flwr.proto.Node node = 1;
+inline bool PushTaskResRequest::_internal_has_node() const {
+ return this != internal_default_instance() && node_ != nullptr;
+}
+inline bool PushTaskResRequest::has_node() const {
+ return _internal_has_node();
+}
+inline const ::flwr::proto::Node& PushTaskResRequest::_internal_node() const {
+ const ::flwr::proto::Node* p = node_;
+ return p != nullptr ? *p : reinterpret_cast(
+ ::flwr::proto::_Node_default_instance_);
+}
+inline const ::flwr::proto::Node& PushTaskResRequest::node() const {
+ // @@protoc_insertion_point(field_get:flwr.proto.PushTaskResRequest.node)
+ return _internal_node();
+}
+inline void PushTaskResRequest::unsafe_arena_set_allocated_node(
+ ::flwr::proto::Node* node) {
+ if (GetArenaForAllocation() == nullptr) {
+ delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(node_);
+ }
+ node_ = node;
+ if (node) {
+
+ } else {
+
+ }
+ // @@protoc_insertion_point(field_unsafe_arena_set_allocated:flwr.proto.PushTaskResRequest.node)
+}
+inline ::flwr::proto::Node* PushTaskResRequest::release_node() {
+
+ ::flwr::proto::Node* temp = node_;
+ node_ = nullptr;
+#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
+ auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
+ temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+ if (GetArenaForAllocation() == nullptr) { delete old; }
+#else // PROTOBUF_FORCE_COPY_IN_RELEASE
+ if (GetArenaForAllocation() != nullptr) {
+ temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+ }
+#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE
+ return temp;
+}
+inline ::flwr::proto::Node* PushTaskResRequest::unsafe_arena_release_node() {
+ // @@protoc_insertion_point(field_release:flwr.proto.PushTaskResRequest.node)
+
+ ::flwr::proto::Node* temp = node_;
+ node_ = nullptr;
+ return temp;
+}
+inline ::flwr::proto::Node* PushTaskResRequest::_internal_mutable_node() {
+
+ if (node_ == nullptr) {
+ auto* p = CreateMaybeMessage<::flwr::proto::Node>(GetArenaForAllocation());
+ node_ = p;
+ }
+ return node_;
+}
+inline ::flwr::proto::Node* PushTaskResRequest::mutable_node() {
+ ::flwr::proto::Node* _msg = _internal_mutable_node();
+ // @@protoc_insertion_point(field_mutable:flwr.proto.PushTaskResRequest.node)
+ return _msg;
+}
+inline void PushTaskResRequest::set_allocated_node(::flwr::proto::Node* node) {
+ ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+ if (message_arena == nullptr) {
+ delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(node_);
+ }
+ if (node) {
+ ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+ ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<
+ ::PROTOBUF_NAMESPACE_ID::MessageLite>::GetOwningArena(
+ reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(node));
+ if (message_arena != submessage_arena) {
+ node = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+ message_arena, node, submessage_arena);
+ }
+
+ } else {
+
+ }
+ node_ = node;
+ // @@protoc_insertion_point(field_set_allocated:flwr.proto.PushTaskResRequest.node)
+}
+
+// repeated .flwr.proto.TaskRes task_res_list = 2;
inline int PushTaskResRequest::_internal_task_res_list_size() const {
return task_res_list_.size();
}
@@ -3125,240 +2751,6 @@ PushTaskResResponse::mutable_results() {
// -------------------------------------------------------------------
-// Run
-
-// sint64 run_id = 1;
-inline void Run::clear_run_id() {
- run_id_ = int64_t{0};
-}
-inline ::PROTOBUF_NAMESPACE_ID::int64 Run::_internal_run_id() const {
- return run_id_;
-}
-inline ::PROTOBUF_NAMESPACE_ID::int64 Run::run_id() const {
- // @@protoc_insertion_point(field_get:flwr.proto.Run.run_id)
- return _internal_run_id();
-}
-inline void Run::_internal_set_run_id(::PROTOBUF_NAMESPACE_ID::int64 value) {
-
- run_id_ = value;
-}
-inline void Run::set_run_id(::PROTOBUF_NAMESPACE_ID::int64 value) {
- _internal_set_run_id(value);
- // @@protoc_insertion_point(field_set:flwr.proto.Run.run_id)
-}
-
-// string fab_id = 2;
-inline void Run::clear_fab_id() {
- fab_id_.ClearToEmpty();
-}
-inline const std::string& Run::fab_id() const {
- // @@protoc_insertion_point(field_get:flwr.proto.Run.fab_id)
- return _internal_fab_id();
-}
-template
-inline PROTOBUF_ALWAYS_INLINE
-void Run::set_fab_id(ArgT0&& arg0, ArgT... args) {
-
- fab_id_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast(arg0), args..., GetArenaForAllocation());
- // @@protoc_insertion_point(field_set:flwr.proto.Run.fab_id)
-}
-inline std::string* Run::mutable_fab_id() {
- std::string* _s = _internal_mutable_fab_id();
- // @@protoc_insertion_point(field_mutable:flwr.proto.Run.fab_id)
- return _s;
-}
-inline const std::string& Run::_internal_fab_id() const {
- return fab_id_.Get();
-}
-inline void Run::_internal_set_fab_id(const std::string& value) {
-
- fab_id_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
-}
-inline std::string* Run::_internal_mutable_fab_id() {
-
- return fab_id_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
-}
-inline std::string* Run::release_fab_id() {
- // @@protoc_insertion_point(field_release:flwr.proto.Run.fab_id)
- return fab_id_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
-}
-inline void Run::set_allocated_fab_id(std::string* fab_id) {
- if (fab_id != nullptr) {
-
- } else {
-
- }
- fab_id_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), fab_id,
- GetArenaForAllocation());
- // @@protoc_insertion_point(field_set_allocated:flwr.proto.Run.fab_id)
-}
-
-// string fab_version = 3;
-inline void Run::clear_fab_version() {
- fab_version_.ClearToEmpty();
-}
-inline const std::string& Run::fab_version() const {
- // @@protoc_insertion_point(field_get:flwr.proto.Run.fab_version)
- return _internal_fab_version();
-}
-template
-inline PROTOBUF_ALWAYS_INLINE
-void Run::set_fab_version(ArgT0&& arg0, ArgT... args) {
-
- fab_version_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast(arg0), args..., GetArenaForAllocation());
- // @@protoc_insertion_point(field_set:flwr.proto.Run.fab_version)
-}
-inline std::string* Run::mutable_fab_version() {
- std::string* _s = _internal_mutable_fab_version();
- // @@protoc_insertion_point(field_mutable:flwr.proto.Run.fab_version)
- return _s;
-}
-inline const std::string& Run::_internal_fab_version() const {
- return fab_version_.Get();
-}
-inline void Run::_internal_set_fab_version(const std::string& value) {
-
- fab_version_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
-}
-inline std::string* Run::_internal_mutable_fab_version() {
-
- return fab_version_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
-}
-inline std::string* Run::release_fab_version() {
- // @@protoc_insertion_point(field_release:flwr.proto.Run.fab_version)
- return fab_version_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
-}
-inline void Run::set_allocated_fab_version(std::string* fab_version) {
- if (fab_version != nullptr) {
-
- } else {
-
- }
- fab_version_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), fab_version,
- GetArenaForAllocation());
- // @@protoc_insertion_point(field_set_allocated:flwr.proto.Run.fab_version)
-}
-
-// -------------------------------------------------------------------
-
-// GetRunRequest
-
-// sint64 run_id = 1;
-inline void GetRunRequest::clear_run_id() {
- run_id_ = int64_t{0};
-}
-inline ::PROTOBUF_NAMESPACE_ID::int64 GetRunRequest::_internal_run_id() const {
- return run_id_;
-}
-inline ::PROTOBUF_NAMESPACE_ID::int64 GetRunRequest::run_id() const {
- // @@protoc_insertion_point(field_get:flwr.proto.GetRunRequest.run_id)
- return _internal_run_id();
-}
-inline void GetRunRequest::_internal_set_run_id(::PROTOBUF_NAMESPACE_ID::int64 value) {
-
- run_id_ = value;
-}
-inline void GetRunRequest::set_run_id(::PROTOBUF_NAMESPACE_ID::int64 value) {
- _internal_set_run_id(value);
- // @@protoc_insertion_point(field_set:flwr.proto.GetRunRequest.run_id)
-}
-
-// -------------------------------------------------------------------
-
-// GetRunResponse
-
-// .flwr.proto.Run run = 1;
-inline bool GetRunResponse::_internal_has_run() const {
- return this != internal_default_instance() && run_ != nullptr;
-}
-inline bool GetRunResponse::has_run() const {
- return _internal_has_run();
-}
-inline void GetRunResponse::clear_run() {
- if (GetArenaForAllocation() == nullptr && run_ != nullptr) {
- delete run_;
- }
- run_ = nullptr;
-}
-inline const ::flwr::proto::Run& GetRunResponse::_internal_run() const {
- const ::flwr::proto::Run* p = run_;
- return p != nullptr ? *p : reinterpret_cast(
- ::flwr::proto::_Run_default_instance_);
-}
-inline const ::flwr::proto::Run& GetRunResponse::run() const {
- // @@protoc_insertion_point(field_get:flwr.proto.GetRunResponse.run)
- return _internal_run();
-}
-inline void GetRunResponse::unsafe_arena_set_allocated_run(
- ::flwr::proto::Run* run) {
- if (GetArenaForAllocation() == nullptr) {
- delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(run_);
- }
- run_ = run;
- if (run) {
-
- } else {
-
- }
- // @@protoc_insertion_point(field_unsafe_arena_set_allocated:flwr.proto.GetRunResponse.run)
-}
-inline ::flwr::proto::Run* GetRunResponse::release_run() {
-
- ::flwr::proto::Run* temp = run_;
- run_ = nullptr;
-#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
- auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
- temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
- if (GetArenaForAllocation() == nullptr) { delete old; }
-#else // PROTOBUF_FORCE_COPY_IN_RELEASE
- if (GetArenaForAllocation() != nullptr) {
- temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
- }
-#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE
- return temp;
-}
-inline ::flwr::proto::Run* GetRunResponse::unsafe_arena_release_run() {
- // @@protoc_insertion_point(field_release:flwr.proto.GetRunResponse.run)
-
- ::flwr::proto::Run* temp = run_;
- run_ = nullptr;
- return temp;
-}
-inline ::flwr::proto::Run* GetRunResponse::_internal_mutable_run() {
-
- if (run_ == nullptr) {
- auto* p = CreateMaybeMessage<::flwr::proto::Run>(GetArenaForAllocation());
- run_ = p;
- }
- return run_;
-}
-inline ::flwr::proto::Run* GetRunResponse::mutable_run() {
- ::flwr::proto::Run* _msg = _internal_mutable_run();
- // @@protoc_insertion_point(field_mutable:flwr.proto.GetRunResponse.run)
- return _msg;
-}
-inline void GetRunResponse::set_allocated_run(::flwr::proto::Run* run) {
- ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
- if (message_arena == nullptr) {
- delete run_;
- }
- if (run) {
- ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
- ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::flwr::proto::Run>::GetOwningArena(run);
- if (message_arena != submessage_arena) {
- run = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
- message_arena, run, submessage_arena);
- }
-
- } else {
-
- }
- run_ = run;
- // @@protoc_insertion_point(field_set_allocated:flwr.proto.GetRunResponse.run)
-}
-
-// -------------------------------------------------------------------
-
// Reconnect
// uint64 reconnect = 1;
@@ -3406,12 +2798,6 @@ inline void Reconnect::set_reconnect(::PROTOBUF_NAMESPACE_ID::uint64 value) {
// -------------------------------------------------------------------
-// -------------------------------------------------------------------
-
-// -------------------------------------------------------------------
-
-// -------------------------------------------------------------------
-
// @@protoc_insertion_point(namespace_scope)
diff --git a/src/cc/flwr/include/flwr/proto/node.grpc.pb.cc b/framework/src/cc/flwr/include/flwr/proto/node.grpc.pb.cc
similarity index 100%
rename from src/cc/flwr/include/flwr/proto/node.grpc.pb.cc
rename to framework/src/cc/flwr/include/flwr/proto/node.grpc.pb.cc
diff --git a/src/cc/flwr/include/flwr/proto/node.grpc.pb.h b/framework/src/cc/flwr/include/flwr/proto/node.grpc.pb.h
similarity index 100%
rename from src/cc/flwr/include/flwr/proto/node.grpc.pb.h
rename to framework/src/cc/flwr/include/flwr/proto/node.grpc.pb.h
diff --git a/src/cc/flwr/include/flwr/proto/node.pb.cc b/framework/src/cc/flwr/include/flwr/proto/node.pb.cc
similarity index 97%
rename from src/cc/flwr/include/flwr/proto/node.pb.cc
rename to framework/src/cc/flwr/include/flwr/proto/node.pb.cc
index 9b59af028685..a5ec814f774b 100644
--- a/src/cc/flwr/include/flwr/proto/node.pb.cc
+++ b/framework/src/cc/flwr/include/flwr/proto/node.pb.cc
@@ -20,7 +20,7 @@ namespace flwr {
namespace proto {
constexpr Node::Node(
::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized)
- : node_id_(int64_t{0})
+ : node_id_(uint64_t{0u})
, anonymous_(false){}
struct NodeDefaultTypeInternal {
constexpr NodeDefaultTypeInternal()
@@ -57,7 +57,7 @@ static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] =
const char descriptor_table_protodef_flwr_2fproto_2fnode_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
"\n\025flwr/proto/node.proto\022\nflwr.proto\"*\n\004N"
- "ode\022\017\n\007node_id\030\001 \001(\022\022\021\n\tanonymous\030\002 \001(\010b"
+ "ode\022\017\n\007node_id\030\001 \001(\004\022\021\n\tanonymous\030\002 \001(\010b"
"\006proto3"
;
static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_flwr_2fproto_2fnode_2eproto_once;
@@ -146,10 +146,10 @@ const char* Node::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::inter
::PROTOBUF_NAMESPACE_ID::uint32 tag;
ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
switch (tag >> 3) {
- // sint64 node_id = 1;
+ // uint64 node_id = 1;
case 1:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 8)) {
- node_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarintZigZag64(&ptr);
+ node_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
CHK_(ptr);
} else
goto handle_unusual;
@@ -191,10 +191,10 @@ ::PROTOBUF_NAMESPACE_ID::uint8* Node::_InternalSerialize(
::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
(void) cached_has_bits;
- // sint64 node_id = 1;
+ // uint64 node_id = 1;
if (this->_internal_node_id() != 0) {
target = stream->EnsureSpace(target);
- target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteSInt64ToArray(1, this->_internal_node_id(), target);
+ target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64ToArray(1, this->_internal_node_id(), target);
}
// bool anonymous = 2;
@@ -219,9 +219,9 @@ size_t Node::ByteSizeLong() const {
// Prevent compiler warnings about cached_has_bits being unused
(void) cached_has_bits;
- // sint64 node_id = 1;
+ // uint64 node_id = 1;
if (this->_internal_node_id() != 0) {
- total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SInt64SizePlusOne(this->_internal_node_id());
+ total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::UInt64SizePlusOne(this->_internal_node_id());
}
// bool anonymous = 2;
diff --git a/src/cc/flwr/include/flwr/proto/node.pb.h b/framework/src/cc/flwr/include/flwr/proto/node.pb.h
similarity index 93%
rename from src/cc/flwr/include/flwr/proto/node.pb.h
rename to framework/src/cc/flwr/include/flwr/proto/node.pb.h
index 1177959ce599..1a40e8248c72 100644
--- a/src/cc/flwr/include/flwr/proto/node.pb.h
+++ b/framework/src/cc/flwr/include/flwr/proto/node.pb.h
@@ -190,13 +190,13 @@ class Node final :
kNodeIdFieldNumber = 1,
kAnonymousFieldNumber = 2,
};
- // sint64 node_id = 1;
+ // uint64 node_id = 1;
void clear_node_id();
- ::PROTOBUF_NAMESPACE_ID::int64 node_id() const;
- void set_node_id(::PROTOBUF_NAMESPACE_ID::int64 value);
+ ::PROTOBUF_NAMESPACE_ID::uint64 node_id() const;
+ void set_node_id(::PROTOBUF_NAMESPACE_ID::uint64 value);
private:
- ::PROTOBUF_NAMESPACE_ID::int64 _internal_node_id() const;
- void _internal_set_node_id(::PROTOBUF_NAMESPACE_ID::int64 value);
+ ::PROTOBUF_NAMESPACE_ID::uint64 _internal_node_id() const;
+ void _internal_set_node_id(::PROTOBUF_NAMESPACE_ID::uint64 value);
public:
// bool anonymous = 2;
@@ -215,7 +215,7 @@ class Node final :
template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
typedef void InternalArenaConstructable_;
typedef void DestructorSkippable_;
- ::PROTOBUF_NAMESPACE_ID::int64 node_id_;
+ ::PROTOBUF_NAMESPACE_ID::uint64 node_id_;
bool anonymous_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
friend struct ::TableStruct_flwr_2fproto_2fnode_2eproto;
@@ -231,22 +231,22 @@ class Node final :
#endif // __GNUC__
// Node
-// sint64 node_id = 1;
+// uint64 node_id = 1;
inline void Node::clear_node_id() {
- node_id_ = int64_t{0};
+ node_id_ = uint64_t{0u};
}
-inline ::PROTOBUF_NAMESPACE_ID::int64 Node::_internal_node_id() const {
+inline ::PROTOBUF_NAMESPACE_ID::uint64 Node::_internal_node_id() const {
return node_id_;
}
-inline ::PROTOBUF_NAMESPACE_ID::int64 Node::node_id() const {
+inline ::PROTOBUF_NAMESPACE_ID::uint64 Node::node_id() const {
// @@protoc_insertion_point(field_get:flwr.proto.Node.node_id)
return _internal_node_id();
}
-inline void Node::_internal_set_node_id(::PROTOBUF_NAMESPACE_ID::int64 value) {
+inline void Node::_internal_set_node_id(::PROTOBUF_NAMESPACE_ID::uint64 value) {
node_id_ = value;
}
-inline void Node::set_node_id(::PROTOBUF_NAMESPACE_ID::int64 value) {
+inline void Node::set_node_id(::PROTOBUF_NAMESPACE_ID::uint64 value) {
_internal_set_node_id(value);
// @@protoc_insertion_point(field_set:flwr.proto.Node.node_id)
}
diff --git a/src/cc/flwr/include/flwr/proto/recordset.grpc.pb.cc b/framework/src/cc/flwr/include/flwr/proto/recordset.grpc.pb.cc
similarity index 100%
rename from src/cc/flwr/include/flwr/proto/recordset.grpc.pb.cc
rename to framework/src/cc/flwr/include/flwr/proto/recordset.grpc.pb.cc
diff --git a/src/cc/flwr/include/flwr/proto/recordset.grpc.pb.h b/framework/src/cc/flwr/include/flwr/proto/recordset.grpc.pb.h
similarity index 100%
rename from src/cc/flwr/include/flwr/proto/recordset.grpc.pb.h
rename to framework/src/cc/flwr/include/flwr/proto/recordset.grpc.pb.h
diff --git a/src/cc/flwr/include/flwr/proto/recordset.pb.cc b/framework/src/cc/flwr/include/flwr/proto/recordset.pb.cc
similarity index 85%
rename from src/cc/flwr/include/flwr/proto/recordset.pb.cc
rename to framework/src/cc/flwr/include/flwr/proto/recordset.pb.cc
index a7cf72084d7a..c7d29a8f033d 100644
--- a/src/cc/flwr/include/flwr/proto/recordset.pb.cc
+++ b/framework/src/cc/flwr/include/flwr/proto/recordset.pb.cc
@@ -30,19 +30,32 @@ struct DoubleListDefaultTypeInternal {
};
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT DoubleListDefaultTypeInternal _DoubleList_default_instance_;
-constexpr Sint64List::Sint64List(
+constexpr SintList::SintList(
::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized)
: vals_()
, _vals_cached_byte_size_(0){}
-struct Sint64ListDefaultTypeInternal {
- constexpr Sint64ListDefaultTypeInternal()
+struct SintListDefaultTypeInternal {
+ constexpr SintListDefaultTypeInternal()
: _instance(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized{}) {}
- ~Sint64ListDefaultTypeInternal() {}
+ ~SintListDefaultTypeInternal() {}
union {
- Sint64List _instance;
+ SintList _instance;
};
};
-PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT Sint64ListDefaultTypeInternal _Sint64List_default_instance_;
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT SintListDefaultTypeInternal _SintList_default_instance_;
+constexpr UintList::UintList(
+ ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized)
+ : vals_()
+ , _vals_cached_byte_size_(0){}
+struct UintListDefaultTypeInternal {
+ constexpr UintListDefaultTypeInternal()
+ : _instance(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized{}) {}
+ ~UintListDefaultTypeInternal() {}
+ union {
+ UintList _instance;
+ };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT UintListDefaultTypeInternal _UintList_default_instance_;
constexpr BoolList::BoolList(
::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized)
: vals_(){}
@@ -227,7 +240,7 @@ struct RecordSetDefaultTypeInternal {
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT RecordSetDefaultTypeInternal _RecordSet_default_instance_;
} // namespace proto
} // namespace flwr
-static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_flwr_2fproto_2frecordset_2eproto[17];
+static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_flwr_2fproto_2frecordset_2eproto[18];
static constexpr ::PROTOBUF_NAMESPACE_ID::EnumDescriptor const** file_level_enum_descriptors_flwr_2fproto_2frecordset_2eproto = nullptr;
static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_flwr_2fproto_2frecordset_2eproto = nullptr;
@@ -240,12 +253,19 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_flwr_2fproto_2frecordset_2epro
~0u, // no _inlined_string_donated_
PROTOBUF_FIELD_OFFSET(::flwr::proto::DoubleList, vals_),
~0u, // no _has_bits_
- PROTOBUF_FIELD_OFFSET(::flwr::proto::Sint64List, _internal_metadata_),
+ PROTOBUF_FIELD_OFFSET(::flwr::proto::SintList, _internal_metadata_),
~0u, // no _extensions_
~0u, // no _oneof_case_
~0u, // no _weak_field_map_
~0u, // no _inlined_string_donated_
- PROTOBUF_FIELD_OFFSET(::flwr::proto::Sint64List, vals_),
+ PROTOBUF_FIELD_OFFSET(::flwr::proto::SintList, vals_),
+ ~0u, // no _has_bits_
+ PROTOBUF_FIELD_OFFSET(::flwr::proto::UintList, _internal_metadata_),
+ ~0u, // no _extensions_
+ ~0u, // no _oneof_case_
+ ~0u, // no _weak_field_map_
+ ~0u, // no _inlined_string_donated_
+ PROTOBUF_FIELD_OFFSET(::flwr::proto::UintList, vals_),
~0u, // no _has_bits_
PROTOBUF_FIELD_OFFSET(::flwr::proto::BoolList, _internal_metadata_),
~0u, // no _extensions_
@@ -287,6 +307,8 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_flwr_2fproto_2frecordset_2epro
::PROTOBUF_NAMESPACE_ID::internal::kInvalidFieldOffsetTag,
::PROTOBUF_NAMESPACE_ID::internal::kInvalidFieldOffsetTag,
::PROTOBUF_NAMESPACE_ID::internal::kInvalidFieldOffsetTag,
+ ::PROTOBUF_NAMESPACE_ID::internal::kInvalidFieldOffsetTag,
+ ::PROTOBUF_NAMESPACE_ID::internal::kInvalidFieldOffsetTag,
PROTOBUF_FIELD_OFFSET(::flwr::proto::MetricsRecordValue, value_),
~0u, // no _has_bits_
PROTOBUF_FIELD_OFFSET(::flwr::proto::ConfigsRecordValue, _internal_metadata_),
@@ -304,6 +326,8 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_flwr_2fproto_2frecordset_2epro
::PROTOBUF_NAMESPACE_ID::internal::kInvalidFieldOffsetTag,
::PROTOBUF_NAMESPACE_ID::internal::kInvalidFieldOffsetTag,
::PROTOBUF_NAMESPACE_ID::internal::kInvalidFieldOffsetTag,
+ ::PROTOBUF_NAMESPACE_ID::internal::kInvalidFieldOffsetTag,
+ ::PROTOBUF_NAMESPACE_ID::internal::kInvalidFieldOffsetTag,
PROTOBUF_FIELD_OFFSET(::flwr::proto::ConfigsRecordValue, value_),
~0u, // no _has_bits_
PROTOBUF_FIELD_OFFSET(::flwr::proto::ParametersRecord, _internal_metadata_),
@@ -389,27 +413,29 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_flwr_2fproto_2frecordset_2epro
};
static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
{ 0, -1, -1, sizeof(::flwr::proto::DoubleList)},
- { 7, -1, -1, sizeof(::flwr::proto::Sint64List)},
- { 14, -1, -1, sizeof(::flwr::proto::BoolList)},
- { 21, -1, -1, sizeof(::flwr::proto::StringList)},
- { 28, -1, -1, sizeof(::flwr::proto::BytesList)},
- { 35, -1, -1, sizeof(::flwr::proto::Array)},
- { 45, -1, -1, sizeof(::flwr::proto::MetricsRecordValue)},
- { 56, -1, -1, sizeof(::flwr::proto::ConfigsRecordValue)},
- { 73, -1, -1, sizeof(::flwr::proto::ParametersRecord)},
- { 81, 89, -1, sizeof(::flwr::proto::MetricsRecord_DataEntry_DoNotUse)},
- { 91, -1, -1, sizeof(::flwr::proto::MetricsRecord)},
- { 98, 106, -1, sizeof(::flwr::proto::ConfigsRecord_DataEntry_DoNotUse)},
- { 108, -1, -1, sizeof(::flwr::proto::ConfigsRecord)},
- { 115, 123, -1, sizeof(::flwr::proto::RecordSet_ParametersEntry_DoNotUse)},
- { 125, 133, -1, sizeof(::flwr::proto::RecordSet_MetricsEntry_DoNotUse)},
- { 135, 143, -1, sizeof(::flwr::proto::RecordSet_ConfigsEntry_DoNotUse)},
- { 145, -1, -1, sizeof(::flwr::proto::RecordSet)},
+ { 7, -1, -1, sizeof(::flwr::proto::SintList)},
+ { 14, -1, -1, sizeof(::flwr::proto::UintList)},
+ { 21, -1, -1, sizeof(::flwr::proto::BoolList)},
+ { 28, -1, -1, sizeof(::flwr::proto::StringList)},
+ { 35, -1, -1, sizeof(::flwr::proto::BytesList)},
+ { 42, -1, -1, sizeof(::flwr::proto::Array)},
+ { 52, -1, -1, sizeof(::flwr::proto::MetricsRecordValue)},
+ { 65, -1, -1, sizeof(::flwr::proto::ConfigsRecordValue)},
+ { 84, -1, -1, sizeof(::flwr::proto::ParametersRecord)},
+ { 92, 100, -1, sizeof(::flwr::proto::MetricsRecord_DataEntry_DoNotUse)},
+ { 102, -1, -1, sizeof(::flwr::proto::MetricsRecord)},
+ { 109, 117, -1, sizeof(::flwr::proto::ConfigsRecord_DataEntry_DoNotUse)},
+ { 119, -1, -1, sizeof(::flwr::proto::ConfigsRecord)},
+ { 126, 134, -1, sizeof(::flwr::proto::RecordSet_ParametersEntry_DoNotUse)},
+ { 136, 144, -1, sizeof(::flwr::proto::RecordSet_MetricsEntry_DoNotUse)},
+ { 146, 154, -1, sizeof(::flwr::proto::RecordSet_ConfigsEntry_DoNotUse)},
+ { 156, -1, -1, sizeof(::flwr::proto::RecordSet)},
};
static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
reinterpret_cast(&::flwr::proto::_DoubleList_default_instance_),
- reinterpret_cast(&::flwr::proto::_Sint64List_default_instance_),
+ reinterpret_cast(&::flwr::proto::_SintList_default_instance_),
+ reinterpret_cast(&::flwr::proto::_UintList_default_instance_),
reinterpret_cast(&::flwr::proto::_BoolList_default_instance_),
reinterpret_cast(&::flwr::proto::_StringList_default_instance_),
reinterpret_cast(&::flwr::proto::_BytesList_default_instance_),
@@ -429,49 +455,53 @@ static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] =
const char descriptor_table_protodef_flwr_2fproto_2frecordset_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
"\n\032flwr/proto/recordset.proto\022\nflwr.proto"
- "\"\032\n\nDoubleList\022\014\n\004vals\030\001 \003(\001\"\032\n\nSint64Li"
- "st\022\014\n\004vals\030\001 \003(\022\"\030\n\010BoolList\022\014\n\004vals\030\001 \003"
- "(\010\"\032\n\nStringList\022\014\n\004vals\030\001 \003(\t\"\031\n\tBytesL"
- "ist\022\014\n\004vals\030\001 \003(\014\"B\n\005Array\022\r\n\005dtype\030\001 \001("
- "\t\022\r\n\005shape\030\002 \003(\005\022\r\n\005stype\030\003 \001(\t\022\014\n\004data\030"
- "\004 \001(\014\"\237\001\n\022MetricsRecordValue\022\020\n\006double\030\001"
- " \001(\001H\000\022\020\n\006sint64\030\002 \001(\022H\000\022-\n\013double_list\030"
- "\025 \001(\0132\026.flwr.proto.DoubleListH\000\022-\n\013sint6"
- "4_list\030\026 \001(\0132\026.flwr.proto.Sint64ListH\000B\007"
- "\n\005value\"\331\002\n\022ConfigsRecordValue\022\020\n\006double"
- "\030\001 \001(\001H\000\022\020\n\006sint64\030\002 \001(\022H\000\022\016\n\004bool\030\003 \001(\010"
- "H\000\022\020\n\006string\030\004 \001(\tH\000\022\017\n\005bytes\030\005 \001(\014H\000\022-\n"
- "\013double_list\030\025 \001(\0132\026.flwr.proto.DoubleLi"
- "stH\000\022-\n\013sint64_list\030\026 \001(\0132\026.flwr.proto.S"
- "int64ListH\000\022)\n\tbool_list\030\027 \001(\0132\024.flwr.pr"
- "oto.BoolListH\000\022-\n\013string_list\030\030 \001(\0132\026.fl"
- "wr.proto.StringListH\000\022+\n\nbytes_list\030\031 \001("
- "\0132\025.flwr.proto.BytesListH\000B\007\n\005value\"M\n\020P"
- "arametersRecord\022\021\n\tdata_keys\030\001 \003(\t\022&\n\013da"
- "ta_values\030\002 \003(\0132\021.flwr.proto.Array\"\217\001\n\rM"
- "etricsRecord\0221\n\004data\030\001 \003(\0132#.flwr.proto."
- "MetricsRecord.DataEntry\032K\n\tDataEntry\022\013\n\003"
- "key\030\001 \001(\t\022-\n\005value\030\002 \001(\0132\036.flwr.proto.Me"
- "tricsRecordValue:\0028\001\"\217\001\n\rConfigsRecord\0221"
- "\n\004data\030\001 \003(\0132#.flwr.proto.ConfigsRecord."
- "DataEntry\032K\n\tDataEntry\022\013\n\003key\030\001 \001(\t\022-\n\005v"
- "alue\030\002 \001(\0132\036.flwr.proto.ConfigsRecordVal"
- "ue:\0028\001\"\227\003\n\tRecordSet\0229\n\nparameters\030\001 \003(\013"
- "2%.flwr.proto.RecordSet.ParametersEntry\022"
- "3\n\007metrics\030\002 \003(\0132\".flwr.proto.RecordSet."
- "MetricsEntry\0223\n\007configs\030\003 \003(\0132\".flwr.pro"
- "to.RecordSet.ConfigsEntry\032O\n\017ParametersE"
- "ntry\022\013\n\003key\030\001 \001(\t\022+\n\005value\030\002 \001(\0132\034.flwr."
- "proto.ParametersRecord:\0028\001\032I\n\014MetricsEnt"
- "ry\022\013\n\003key\030\001 \001(\t\022(\n\005value\030\002 \001(\0132\031.flwr.pr"
- "oto.MetricsRecord:\0028\001\032I\n\014ConfigsEntry\022\013\n"
- "\003key\030\001 \001(\t\022(\n\005value\030\002 \001(\0132\031.flwr.proto.C"
- "onfigsRecord:\0028\001b\006proto3"
+ "\"\032\n\nDoubleList\022\014\n\004vals\030\001 \003(\001\"\030\n\010SintList"
+ "\022\014\n\004vals\030\001 \003(\022\"\030\n\010UintList\022\014\n\004vals\030\001 \003(\004"
+ "\"\030\n\010BoolList\022\014\n\004vals\030\001 \003(\010\"\032\n\nStringList"
+ "\022\014\n\004vals\030\001 \003(\t\"\031\n\tBytesList\022\014\n\004vals\030\001 \003("
+ "\014\"B\n\005Array\022\r\n\005dtype\030\001 \001(\t\022\r\n\005shape\030\002 \003(\005"
+ "\022\r\n\005stype\030\003 \001(\t\022\014\n\004data\030\004 \001(\014\"\330\001\n\022Metric"
+ "sRecordValue\022\020\n\006double\030\001 \001(\001H\000\022\020\n\006sint64"
+ "\030\002 \001(\022H\000\022\020\n\006uint64\030\003 \001(\004H\000\022-\n\013double_lis"
+ "t\030\025 \001(\0132\026.flwr.proto.DoubleListH\000\022)\n\tsin"
+ "t_list\030\026 \001(\0132\024.flwr.proto.SintListH\000\022)\n\t"
+ "uint_list\030\027 \001(\0132\024.flwr.proto.UintListH\000B"
+ "\007\n\005value\"\222\003\n\022ConfigsRecordValue\022\020\n\006doubl"
+ "e\030\001 \001(\001H\000\022\020\n\006sint64\030\002 \001(\022H\000\022\020\n\006uint64\030\003 "
+ "\001(\004H\000\022\016\n\004bool\030\004 \001(\010H\000\022\020\n\006string\030\005 \001(\tH\000\022"
+ "\017\n\005bytes\030\006 \001(\014H\000\022-\n\013double_list\030\025 \001(\0132\026."
+ "flwr.proto.DoubleListH\000\022)\n\tsint_list\030\026 \001"
+ "(\0132\024.flwr.proto.SintListH\000\022)\n\tuint_list\030"
+ "\027 \001(\0132\024.flwr.proto.UintListH\000\022)\n\tbool_li"
+ "st\030\030 \001(\0132\024.flwr.proto.BoolListH\000\022-\n\013stri"
+ "ng_list\030\031 \001(\0132\026.flwr.proto.StringListH\000\022"
+ "+\n\nbytes_list\030\032 \001(\0132\025.flwr.proto.BytesLi"
+ "stH\000B\007\n\005value\"M\n\020ParametersRecord\022\021\n\tdat"
+ "a_keys\030\001 \003(\t\022&\n\013data_values\030\002 \003(\0132\021.flwr"
+ ".proto.Array\"\217\001\n\rMetricsRecord\0221\n\004data\030\001"
+ " \003(\0132#.flwr.proto.MetricsRecord.DataEntr"
+ "y\032K\n\tDataEntry\022\013\n\003key\030\001 \001(\t\022-\n\005value\030\002 \001"
+ "(\0132\036.flwr.proto.MetricsRecordValue:\0028\001\"\217"
+ "\001\n\rConfigsRecord\0221\n\004data\030\001 \003(\0132#.flwr.pr"
+ "oto.ConfigsRecord.DataEntry\032K\n\tDataEntry"
+ "\022\013\n\003key\030\001 \001(\t\022-\n\005value\030\002 \001(\0132\036.flwr.prot"
+ "o.ConfigsRecordValue:\0028\001\"\227\003\n\tRecordSet\0229"
+ "\n\nparameters\030\001 \003(\0132%.flwr.proto.RecordSe"
+ "t.ParametersEntry\0223\n\007metrics\030\002 \003(\0132\".flw"
+ "r.proto.RecordSet.MetricsEntry\0223\n\007config"
+ "s\030\003 \003(\0132\".flwr.proto.RecordSet.ConfigsEn"
+ "try\032O\n\017ParametersEntry\022\013\n\003key\030\001 \001(\t\022+\n\005v"
+ "alue\030\002 \001(\0132\034.flwr.proto.ParametersRecord"
+ ":\0028\001\032I\n\014MetricsEntry\022\013\n\003key\030\001 \001(\t\022(\n\005val"
+ "ue\030\002 \001(\0132\031.flwr.proto.MetricsRecord:\0028\001\032"
+ "I\n\014ConfigsEntry\022\013\n\003key\030\001 \001(\t\022(\n\005value\030\002 "
+ "\001(\0132\031.flwr.proto.ConfigsRecord:\0028\001b\006prot"
+ "o3"
;
static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_flwr_2fproto_2frecordset_2eproto_once;
const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_flwr_2fproto_2frecordset_2eproto = {
- false, false, 1544, descriptor_table_protodef_flwr_2fproto_2frecordset_2eproto, "flwr/proto/recordset.proto",
- &descriptor_table_flwr_2fproto_2frecordset_2eproto_once, nullptr, 0, 17,
+ false, false, 1682, descriptor_table_protodef_flwr_2fproto_2frecordset_2eproto, "flwr/proto/recordset.proto",
+ &descriptor_table_flwr_2fproto_2frecordset_2eproto_once, nullptr, 0, 18,
schemas, file_default_instances, TableStruct_flwr_2fproto_2frecordset_2eproto::offsets,
file_level_metadata_flwr_2fproto_2frecordset_2eproto, file_level_enum_descriptors_flwr_2fproto_2frecordset_2eproto, file_level_service_descriptors_flwr_2fproto_2frecordset_2eproto,
};
@@ -671,11 +701,11 @@ ::PROTOBUF_NAMESPACE_ID::Metadata DoubleList::GetMetadata() const {
// ===================================================================
-class Sint64List::_Internal {
+class SintList::_Internal {
public:
};
-Sint64List::Sint64List(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+SintList::SintList(::PROTOBUF_NAMESPACE_ID::Arena* arena,
bool is_message_owned)
: ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned),
vals_(arena) {
@@ -683,41 +713,41 @@ Sint64List::Sint64List(::PROTOBUF_NAMESPACE_ID::Arena* arena,
if (!is_message_owned) {
RegisterArenaDtor(arena);
}
- // @@protoc_insertion_point(arena_constructor:flwr.proto.Sint64List)
+ // @@protoc_insertion_point(arena_constructor:flwr.proto.SintList)
}
-Sint64List::Sint64List(const Sint64List& from)
+SintList::SintList(const SintList& from)
: ::PROTOBUF_NAMESPACE_ID::Message(),
vals_(from.vals_) {
_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
- // @@protoc_insertion_point(copy_constructor:flwr.proto.Sint64List)
+ // @@protoc_insertion_point(copy_constructor:flwr.proto.SintList)
}
-void Sint64List::SharedCtor() {
+void SintList::SharedCtor() {
}
-Sint64List::~Sint64List() {
- // @@protoc_insertion_point(destructor:flwr.proto.Sint64List)
+SintList::~SintList() {
+ // @@protoc_insertion_point(destructor:flwr.proto.SintList)
if (GetArenaForAllocation() != nullptr) return;
SharedDtor();
_internal_metadata_.Delete<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}
-inline void Sint64List::SharedDtor() {
+inline void SintList::SharedDtor() {
GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
}
-void Sint64List::ArenaDtor(void* object) {
- Sint64List* _this = reinterpret_cast< Sint64List* >(object);
+void SintList::ArenaDtor(void* object) {
+ SintList* _this = reinterpret_cast< SintList* >(object);
(void)_this;
}
-void Sint64List::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
+void SintList::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
}
-void Sint64List::SetCachedSize(int size) const {
+void SintList::SetCachedSize(int size) const {
_cached_size_.Set(size);
}
-void Sint64List::Clear() {
-// @@protoc_insertion_point(message_clear_start:flwr.proto.Sint64List)
+void SintList::Clear() {
+// @@protoc_insertion_point(message_clear_start:flwr.proto.SintList)
::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
// Prevent compiler warnings about cached_has_bits being unused
(void) cached_has_bits;
@@ -726,7 +756,7 @@ void Sint64List::Clear() {
_internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}
-const char* Sint64List::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
+const char* SintList::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
while (!ctx->Done(&ptr)) {
::PROTOBUF_NAMESPACE_ID::uint32 tag;
@@ -766,9 +796,9 @@ const char* Sint64List::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID:
#undef CHK_
}
-::PROTOBUF_NAMESPACE_ID::uint8* Sint64List::_InternalSerialize(
+::PROTOBUF_NAMESPACE_ID::uint8* SintList::_InternalSerialize(
::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
- // @@protoc_insertion_point(serialize_to_array_start:flwr.proto.Sint64List)
+ // @@protoc_insertion_point(serialize_to_array_start:flwr.proto.SintList)
::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
(void) cached_has_bits;
@@ -785,12 +815,12 @@ ::PROTOBUF_NAMESPACE_ID::uint8* Sint64List::_InternalSerialize(
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
_internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
}
- // @@protoc_insertion_point(serialize_to_array_end:flwr.proto.Sint64List)
+ // @@protoc_insertion_point(serialize_to_array_end:flwr.proto.SintList)
return target;
}
-size_t Sint64List::ByteSizeLong() const {
-// @@protoc_insertion_point(message_byte_size_start:flwr.proto.Sint64List)
+size_t SintList::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:flwr.proto.SintList)
size_t total_size = 0;
::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
@@ -815,21 +845,21 @@ size_t Sint64List::ByteSizeLong() const {
return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
}
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Sint64List::_class_data_ = {
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData SintList::_class_data_ = {
::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
- Sint64List::MergeImpl
+ SintList::MergeImpl
};
-const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Sint64List::GetClassData() const { return &_class_data_; }
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*SintList::GetClassData() const { return &_class_data_; }
-void Sint64List::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+void SintList::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
const ::PROTOBUF_NAMESPACE_ID::Message& from) {
- static_cast(to)->MergeFrom(
- static_cast(from));
+ static_cast(to)->MergeFrom(
+ static_cast(from));
}
-void Sint64List::MergeFrom(const Sint64List& from) {
-// @@protoc_insertion_point(class_specific_merge_from_start:flwr.proto.Sint64List)
+void SintList::MergeFrom(const SintList& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:flwr.proto.SintList)
GOOGLE_DCHECK_NE(&from, this);
::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
(void) cached_has_bits;
@@ -838,24 +868,24 @@ void Sint64List::MergeFrom(const Sint64List& from) {
_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}
-void Sint64List::CopyFrom(const Sint64List& from) {
-// @@protoc_insertion_point(class_specific_copy_from_start:flwr.proto.Sint64List)
+void SintList::CopyFrom(const SintList& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:flwr.proto.SintList)
if (&from == this) return;
Clear();
MergeFrom(from);
}
-bool Sint64List::IsInitialized() const {
+bool SintList::IsInitialized() const {
return true;
}
-void Sint64List::InternalSwap(Sint64List* other) {
+void SintList::InternalSwap(SintList* other) {
using std::swap;
_internal_metadata_.InternalSwap(&other->_internal_metadata_);
vals_.InternalSwap(&other->vals_);
}
-::PROTOBUF_NAMESPACE_ID::Metadata Sint64List::GetMetadata() const {
+::PROTOBUF_NAMESPACE_ID::Metadata SintList::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
file_level_metadata_flwr_2fproto_2frecordset_2eproto[1]);
@@ -863,6 +893,198 @@ ::PROTOBUF_NAMESPACE_ID::Metadata Sint64List::GetMetadata() const {
// ===================================================================
+class UintList::_Internal {
+ public:
+};
+
+UintList::UintList(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+ bool is_message_owned)
+ : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned),
+ vals_(arena) {
+ SharedCtor();
+ if (!is_message_owned) {
+ RegisterArenaDtor(arena);
+ }
+ // @@protoc_insertion_point(arena_constructor:flwr.proto.UintList)
+}
+UintList::UintList(const UintList& from)
+ : ::PROTOBUF_NAMESPACE_ID::Message(),
+ vals_(from.vals_) {
+ _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+ // @@protoc_insertion_point(copy_constructor:flwr.proto.UintList)
+}
+
+void UintList::SharedCtor() {
+}
+
+UintList::~UintList() {
+ // @@protoc_insertion_point(destructor:flwr.proto.UintList)
+ if (GetArenaForAllocation() != nullptr) return;
+ SharedDtor();
+ _internal_metadata_.Delete<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+inline void UintList::SharedDtor() {
+ GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+}
+
+void UintList::ArenaDtor(void* object) {
+ UintList* _this = reinterpret_cast< UintList* >(object);
+ (void)_this;
+}
+void UintList::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
+}
+void UintList::SetCachedSize(int size) const {
+ _cached_size_.Set(size);
+}
+
+void UintList::Clear() {
+// @@protoc_insertion_point(message_clear_start:flwr.proto.UintList)
+ ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+ // Prevent compiler warnings about cached_has_bits being unused
+ (void) cached_has_bits;
+
+ vals_.Clear();
+ _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* UintList::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+ while (!ctx->Done(&ptr)) {
+ ::PROTOBUF_NAMESPACE_ID::uint32 tag;
+ ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
+ switch (tag >> 3) {
+ // repeated uint64 vals = 1;
+ case 1:
+ if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
+ ptr = ::PROTOBUF_NAMESPACE_ID::internal::PackedUInt64Parser(_internal_mutable_vals(), ptr, ctx);
+ CHK_(ptr);
+ } else if (static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 8) {
+ _internal_add_vals(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr));
+ CHK_(ptr);
+ } else
+ goto handle_unusual;
+ continue;
+ default:
+ goto handle_unusual;
+ } // switch
+ handle_unusual:
+ if ((tag == 0) || ((tag & 7) == 4)) {
+ CHK_(ptr);
+ ctx->SetLastTag(tag);
+ goto message_done;
+ }
+ ptr = UnknownFieldParse(
+ tag,
+ _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+ ptr, ctx);
+ CHK_(ptr != nullptr);
+ } // while
+message_done:
+ return ptr;
+failure:
+ ptr = nullptr;
+ goto message_done;
+#undef CHK_
+}
+
+::PROTOBUF_NAMESPACE_ID::uint8* UintList::_InternalSerialize(
+ ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+ // @@protoc_insertion_point(serialize_to_array_start:flwr.proto.UintList)
+ ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+ (void) cached_has_bits;
+
+ // repeated uint64 vals = 1;
+ {
+ int byte_size = _vals_cached_byte_size_.load(std::memory_order_relaxed);
+ if (byte_size > 0) {
+ target = stream->WriteUInt64Packed(
+ 1, _internal_vals(), byte_size, target);
+ }
+ }
+
+ if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+ target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
+ _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+ }
+ // @@protoc_insertion_point(serialize_to_array_end:flwr.proto.UintList)
+ return target;
+}
+
+size_t UintList::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:flwr.proto.UintList)
+ size_t total_size = 0;
+
+ ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+ // Prevent compiler warnings about cached_has_bits being unused
+ (void) cached_has_bits;
+
+ // repeated uint64 vals = 1;
+ {
+ size_t data_size = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+ UInt64Size(this->vals_);
+ if (data_size > 0) {
+ total_size += 1 +
+ ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::Int32Size(
+ static_cast<::PROTOBUF_NAMESPACE_ID::int32>(data_size));
+ }
+ int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(data_size);
+ _vals_cached_byte_size_.store(cached_size,
+ std::memory_order_relaxed);
+ total_size += data_size;
+ }
+
+ return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData UintList::_class_data_ = {
+ ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
+ UintList::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*UintList::GetClassData() const { return &_class_data_; }
+
+void UintList::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
+ const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+ static_cast(to)->MergeFrom(
+ static_cast(from));
+}
+
+
+void UintList::MergeFrom(const UintList& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:flwr.proto.UintList)
+ GOOGLE_DCHECK_NE(&from, this);
+ ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+ (void) cached_has_bits;
+
+ vals_.MergeFrom(from.vals_);
+ _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void UintList::CopyFrom(const UintList& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:flwr.proto.UintList)
+ if (&from == this) return;
+ Clear();
+ MergeFrom(from);
+}
+
+bool UintList::IsInitialized() const {
+ return true;
+}
+
+void UintList::InternalSwap(UintList* other) {
+ using std::swap;
+ _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+ vals_.InternalSwap(&other->vals_);
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata UintList::GetMetadata() const {
+ return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
+ &descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
+ file_level_metadata_flwr_2fproto_2frecordset_2eproto[2]);
+}
+
+// ===================================================================
+
class BoolList::_Internal {
public:
};
@@ -1043,7 +1265,7 @@ void BoolList::InternalSwap(BoolList* other) {
::PROTOBUF_NAMESPACE_ID::Metadata BoolList::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
- file_level_metadata_flwr_2fproto_2frecordset_2eproto[2]);
+ file_level_metadata_flwr_2fproto_2frecordset_2eproto[3]);
}
// ===================================================================
@@ -1233,7 +1455,7 @@ void StringList::InternalSwap(StringList* other) {
::PROTOBUF_NAMESPACE_ID::Metadata StringList::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
- file_level_metadata_flwr_2fproto_2frecordset_2eproto[3]);
+ file_level_metadata_flwr_2fproto_2frecordset_2eproto[4]);
}
// ===================================================================
@@ -1418,7 +1640,7 @@ void BytesList::InternalSwap(BytesList* other) {
::PROTOBUF_NAMESPACE_ID::Metadata BytesList::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
- file_level_metadata_flwr_2fproto_2frecordset_2eproto[4]);
+ file_level_metadata_flwr_2fproto_2frecordset_2eproto[5]);
}
// ===================================================================
@@ -1736,7 +1958,7 @@ void Array::InternalSwap(Array* other) {
::PROTOBUF_NAMESPACE_ID::Metadata Array::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
- file_level_metadata_flwr_2fproto_2frecordset_2eproto[5]);
+ file_level_metadata_flwr_2fproto_2frecordset_2eproto[6]);
}
// ===================================================================
@@ -1744,16 +1966,21 @@ ::PROTOBUF_NAMESPACE_ID::Metadata Array::GetMetadata() const {
class MetricsRecordValue::_Internal {
public:
static const ::flwr::proto::DoubleList& double_list(const MetricsRecordValue* msg);
- static const ::flwr::proto::Sint64List& sint64_list(const MetricsRecordValue* msg);
+ static const ::flwr::proto::SintList& sint_list(const MetricsRecordValue* msg);
+ static const ::flwr::proto::UintList& uint_list(const MetricsRecordValue* msg);
};
const ::flwr::proto::DoubleList&
MetricsRecordValue::_Internal::double_list(const MetricsRecordValue* msg) {
return *msg->value_.double_list_;
}
-const ::flwr::proto::Sint64List&
-MetricsRecordValue::_Internal::sint64_list(const MetricsRecordValue* msg) {
- return *msg->value_.sint64_list_;
+const ::flwr::proto::SintList&
+MetricsRecordValue::_Internal::sint_list(const MetricsRecordValue* msg) {
+ return *msg->value_.sint_list_;
+}
+const ::flwr::proto::UintList&
+MetricsRecordValue::_Internal::uint_list(const MetricsRecordValue* msg) {
+ return *msg->value_.uint_list_;
}
void MetricsRecordValue::set_allocated_double_list(::flwr::proto::DoubleList* double_list) {
::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
@@ -1770,20 +1997,35 @@ void MetricsRecordValue::set_allocated_double_list(::flwr::proto::DoubleList* do
}
// @@protoc_insertion_point(field_set_allocated:flwr.proto.MetricsRecordValue.double_list)
}
-void MetricsRecordValue::set_allocated_sint64_list(::flwr::proto::Sint64List* sint64_list) {
+void MetricsRecordValue::set_allocated_sint_list(::flwr::proto::SintList* sint_list) {
::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
clear_value();
- if (sint64_list) {
+ if (sint_list) {
::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
- ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::flwr::proto::Sint64List>::GetOwningArena(sint64_list);
+ ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::flwr::proto::SintList>::GetOwningArena(sint_list);
if (message_arena != submessage_arena) {
- sint64_list = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
- message_arena, sint64_list, submessage_arena);
+ sint_list = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+ message_arena, sint_list, submessage_arena);
}
- set_has_sint64_list();
- value_.sint64_list_ = sint64_list;
+ set_has_sint_list();
+ value_.sint_list_ = sint_list;
}
- // @@protoc_insertion_point(field_set_allocated:flwr.proto.MetricsRecordValue.sint64_list)
+ // @@protoc_insertion_point(field_set_allocated:flwr.proto.MetricsRecordValue.sint_list)
+}
+void MetricsRecordValue::set_allocated_uint_list(::flwr::proto::UintList* uint_list) {
+ ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+ clear_value();
+ if (uint_list) {
+ ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+ ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::flwr::proto::UintList>::GetOwningArena(uint_list);
+ if (message_arena != submessage_arena) {
+ uint_list = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+ message_arena, uint_list, submessage_arena);
+ }
+ set_has_uint_list();
+ value_.uint_list_ = uint_list;
+ }
+ // @@protoc_insertion_point(field_set_allocated:flwr.proto.MetricsRecordValue.uint_list)
}
MetricsRecordValue::MetricsRecordValue(::PROTOBUF_NAMESPACE_ID::Arena* arena,
bool is_message_owned)
@@ -1807,12 +2049,20 @@ MetricsRecordValue::MetricsRecordValue(const MetricsRecordValue& from)
_internal_set_sint64(from._internal_sint64());
break;
}
+ case kUint64: {
+ _internal_set_uint64(from._internal_uint64());
+ break;
+ }
case kDoubleList: {
_internal_mutable_double_list()->::flwr::proto::DoubleList::MergeFrom(from._internal_double_list());
break;
}
- case kSint64List: {
- _internal_mutable_sint64_list()->::flwr::proto::Sint64List::MergeFrom(from._internal_sint64_list());
+ case kSintList: {
+ _internal_mutable_sint_list()->::flwr::proto::SintList::MergeFrom(from._internal_sint_list());
+ break;
+ }
+ case kUintList: {
+ _internal_mutable_uint_list()->::flwr::proto::UintList::MergeFrom(from._internal_uint_list());
break;
}
case VALUE_NOT_SET: {
@@ -1861,15 +2111,25 @@ void MetricsRecordValue::clear_value() {
// No need to clear
break;
}
+ case kUint64: {
+ // No need to clear
+ break;
+ }
case kDoubleList: {
if (GetArenaForAllocation() == nullptr) {
delete value_.double_list_;
}
break;
}
- case kSint64List: {
+ case kSintList: {
+ if (GetArenaForAllocation() == nullptr) {
+ delete value_.sint_list_;
+ }
+ break;
+ }
+ case kUintList: {
if (GetArenaForAllocation() == nullptr) {
- delete value_.sint64_list_;
+ delete value_.uint_list_;
}
break;
}
@@ -1913,6 +2173,14 @@ const char* MetricsRecordValue::_InternalParse(const char* ptr, ::PROTOBUF_NAMES
} else
goto handle_unusual;
continue;
+ // uint64 uint64 = 3;
+ case 3:
+ if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 24)) {
+ _internal_set_uint64(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr));
+ CHK_(ptr);
+ } else
+ goto handle_unusual;
+ continue;
// .flwr.proto.DoubleList double_list = 21;
case 21:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 170)) {
@@ -1921,10 +2189,18 @@ const char* MetricsRecordValue::_InternalParse(const char* ptr, ::PROTOBUF_NAMES
} else
goto handle_unusual;
continue;
- // .flwr.proto.Sint64List sint64_list = 22;
+ // .flwr.proto.SintList sint_list = 22;
case 22:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 178)) {
- ptr = ctx->ParseMessage(_internal_mutable_sint64_list(), ptr);
+ ptr = ctx->ParseMessage(_internal_mutable_sint_list(), ptr);
+ CHK_(ptr);
+ } else
+ goto handle_unusual;
+ continue;
+ // .flwr.proto.UintList uint_list = 23;
+ case 23:
+ if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 186)) {
+ ptr = ctx->ParseMessage(_internal_mutable_uint_list(), ptr);
CHK_(ptr);
} else
goto handle_unusual;
@@ -1970,6 +2246,12 @@ ::PROTOBUF_NAMESPACE_ID::uint8* MetricsRecordValue::_InternalSerialize(
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteSInt64ToArray(2, this->_internal_sint64(), target);
}
+ // uint64 uint64 = 3;
+ if (_internal_has_uint64()) {
+ target = stream->EnsureSpace(target);
+ target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64ToArray(3, this->_internal_uint64(), target);
+ }
+
// .flwr.proto.DoubleList double_list = 21;
if (_internal_has_double_list()) {
target = stream->EnsureSpace(target);
@@ -1978,12 +2260,20 @@ ::PROTOBUF_NAMESPACE_ID::uint8* MetricsRecordValue::_InternalSerialize(
21, _Internal::double_list(this), target, stream);
}
- // .flwr.proto.Sint64List sint64_list = 22;
- if (_internal_has_sint64_list()) {
+ // .flwr.proto.SintList sint_list = 22;
+ if (_internal_has_sint_list()) {
+ target = stream->EnsureSpace(target);
+ target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+ InternalWriteMessage(
+ 22, _Internal::sint_list(this), target, stream);
+ }
+
+ // .flwr.proto.UintList uint_list = 23;
+ if (_internal_has_uint_list()) {
target = stream->EnsureSpace(target);
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
InternalWriteMessage(
- 22, _Internal::sint64_list(this), target, stream);
+ 23, _Internal::uint_list(this), target, stream);
}
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
@@ -2013,6 +2303,11 @@ size_t MetricsRecordValue::ByteSizeLong() const {
total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SInt64SizePlusOne(this->_internal_sint64());
break;
}
+ // uint64 uint64 = 3;
+ case kUint64: {
+ total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::UInt64SizePlusOne(this->_internal_uint64());
+ break;
+ }
// .flwr.proto.DoubleList double_list = 21;
case kDoubleList: {
total_size += 2 +
@@ -2020,11 +2315,18 @@ size_t MetricsRecordValue::ByteSizeLong() const {
*value_.double_list_);
break;
}
- // .flwr.proto.Sint64List sint64_list = 22;
- case kSint64List: {
+ // .flwr.proto.SintList sint_list = 22;
+ case kSintList: {
total_size += 2 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
- *value_.sint64_list_);
+ *value_.sint_list_);
+ break;
+ }
+ // .flwr.proto.UintList uint_list = 23;
+ case kUintList: {
+ total_size += 2 +
+ ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+ *value_.uint_list_);
break;
}
case VALUE_NOT_SET: {
@@ -2062,12 +2364,20 @@ void MetricsRecordValue::MergeFrom(const MetricsRecordValue& from) {
_internal_set_sint64(from._internal_sint64());
break;
}
+ case kUint64: {
+ _internal_set_uint64(from._internal_uint64());
+ break;
+ }
case kDoubleList: {
_internal_mutable_double_list()->::flwr::proto::DoubleList::MergeFrom(from._internal_double_list());
break;
}
- case kSint64List: {
- _internal_mutable_sint64_list()->::flwr::proto::Sint64List::MergeFrom(from._internal_sint64_list());
+ case kSintList: {
+ _internal_mutable_sint_list()->::flwr::proto::SintList::MergeFrom(from._internal_sint_list());
+ break;
+ }
+ case kUintList: {
+ _internal_mutable_uint_list()->::flwr::proto::UintList::MergeFrom(from._internal_uint_list());
break;
}
case VALUE_NOT_SET: {
@@ -2098,7 +2408,7 @@ void MetricsRecordValue::InternalSwap(MetricsRecordValue* other) {
::PROTOBUF_NAMESPACE_ID::Metadata MetricsRecordValue::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
- file_level_metadata_flwr_2fproto_2frecordset_2eproto[6]);
+ file_level_metadata_flwr_2fproto_2frecordset_2eproto[7]);
}
// ===================================================================
@@ -2106,7 +2416,8 @@ ::PROTOBUF_NAMESPACE_ID::Metadata MetricsRecordValue::GetMetadata() const {
class ConfigsRecordValue::_Internal {
public:
static const ::flwr::proto::DoubleList& double_list(const ConfigsRecordValue* msg);
- static const ::flwr::proto::Sint64List& sint64_list(const ConfigsRecordValue* msg);
+ static const ::flwr::proto::SintList& sint_list(const ConfigsRecordValue* msg);
+ static const ::flwr::proto::UintList& uint_list(const ConfigsRecordValue* msg);
static const ::flwr::proto::BoolList& bool_list(const ConfigsRecordValue* msg);
static const ::flwr::proto::StringList& string_list(const ConfigsRecordValue* msg);
static const ::flwr::proto::BytesList& bytes_list(const ConfigsRecordValue* msg);
@@ -2116,9 +2427,13 @@ const ::flwr::proto::DoubleList&
ConfigsRecordValue::_Internal::double_list(const ConfigsRecordValue* msg) {
return *msg->value_.double_list_;
}
-const ::flwr::proto::Sint64List&
-ConfigsRecordValue::_Internal::sint64_list(const ConfigsRecordValue* msg) {
- return *msg->value_.sint64_list_;
+const ::flwr::proto::SintList&
+ConfigsRecordValue::_Internal::sint_list(const ConfigsRecordValue* msg) {
+ return *msg->value_.sint_list_;
+}
+const ::flwr::proto::UintList&
+ConfigsRecordValue::_Internal::uint_list(const ConfigsRecordValue* msg) {
+ return *msg->value_.uint_list_;
}
const ::flwr::proto::BoolList&
ConfigsRecordValue::_Internal::bool_list(const ConfigsRecordValue* msg) {
@@ -2147,20 +2462,35 @@ void ConfigsRecordValue::set_allocated_double_list(::flwr::proto::DoubleList* do
}
// @@protoc_insertion_point(field_set_allocated:flwr.proto.ConfigsRecordValue.double_list)
}
-void ConfigsRecordValue::set_allocated_sint64_list(::flwr::proto::Sint64List* sint64_list) {
+void ConfigsRecordValue::set_allocated_sint_list(::flwr::proto::SintList* sint_list) {
::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
clear_value();
- if (sint64_list) {
+ if (sint_list) {
::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
- ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::flwr::proto::Sint64List>::GetOwningArena(sint64_list);
+ ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::flwr::proto::SintList>::GetOwningArena(sint_list);
if (message_arena != submessage_arena) {
- sint64_list = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
- message_arena, sint64_list, submessage_arena);
+ sint_list = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+ message_arena, sint_list, submessage_arena);
}
- set_has_sint64_list();
- value_.sint64_list_ = sint64_list;
+ set_has_sint_list();
+ value_.sint_list_ = sint_list;
}
- // @@protoc_insertion_point(field_set_allocated:flwr.proto.ConfigsRecordValue.sint64_list)
+ // @@protoc_insertion_point(field_set_allocated:flwr.proto.ConfigsRecordValue.sint_list)
+}
+void ConfigsRecordValue::set_allocated_uint_list(::flwr::proto::UintList* uint_list) {
+ ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
+ clear_value();
+ if (uint_list) {
+ ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
+ ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::flwr::proto::UintList>::GetOwningArena(uint_list);
+ if (message_arena != submessage_arena) {
+ uint_list = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+ message_arena, uint_list, submessage_arena);
+ }
+ set_has_uint_list();
+ value_.uint_list_ = uint_list;
+ }
+ // @@protoc_insertion_point(field_set_allocated:flwr.proto.ConfigsRecordValue.uint_list)
}
void ConfigsRecordValue::set_allocated_bool_list(::flwr::proto::BoolList* bool_list) {
::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
@@ -2229,6 +2559,10 @@ ConfigsRecordValue::ConfigsRecordValue(const ConfigsRecordValue& from)
_internal_set_sint64(from._internal_sint64());
break;
}
+ case kUint64: {
+ _internal_set_uint64(from._internal_uint64());
+ break;
+ }
case kBool: {
_internal_set_bool_(from._internal_bool_());
break;
@@ -2245,8 +2579,12 @@ ConfigsRecordValue::ConfigsRecordValue(const ConfigsRecordValue& from)
_internal_mutable_double_list()->::flwr::proto::DoubleList::MergeFrom(from._internal_double_list());
break;
}
- case kSint64List: {
- _internal_mutable_sint64_list()->::flwr::proto::Sint64List::MergeFrom(from._internal_sint64_list());
+ case kSintList: {
+ _internal_mutable_sint_list()->::flwr::proto::SintList::MergeFrom(from._internal_sint_list());
+ break;
+ }
+ case kUintList: {
+ _internal_mutable_uint_list()->::flwr::proto::UintList::MergeFrom(from._internal_uint_list());
break;
}
case kBoolList: {
@@ -2307,6 +2645,10 @@ void ConfigsRecordValue::clear_value() {
// No need to clear
break;
}
+ case kUint64: {
+ // No need to clear
+ break;
+ }
case kBool: {
// No need to clear
break;
@@ -2325,9 +2667,15 @@ void ConfigsRecordValue::clear_value() {
}
break;
}
- case kSint64List: {
+ case kSintList: {
if (GetArenaForAllocation() == nullptr) {
- delete value_.sint64_list_;
+ delete value_.sint_list_;
+ }
+ break;
+ }
+ case kUintList: {
+ if (GetArenaForAllocation() == nullptr) {
+ delete value_.uint_list_;
}
break;
}
@@ -2389,17 +2737,25 @@ const char* ConfigsRecordValue::_InternalParse(const char* ptr, ::PROTOBUF_NAMES
} else
goto handle_unusual;
continue;
- // bool bool = 3;
+ // uint64 uint64 = 3;
case 3:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 24)) {
- _internal_set_bool_(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr));
+ _internal_set_uint64(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr));
CHK_(ptr);
} else
goto handle_unusual;
continue;
- // string string = 4;
+ // bool bool = 4;
case 4:
- if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) {
+ if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 32)) {
+ _internal_set_bool_(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr));
+ CHK_(ptr);
+ } else
+ goto handle_unusual;
+ continue;
+ // string string = 5;
+ case 5:
+ if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 42)) {
auto str = _internal_mutable_string();
ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "flwr.proto.ConfigsRecordValue.string"));
@@ -2407,9 +2763,9 @@ const char* ConfigsRecordValue::_InternalParse(const char* ptr, ::PROTOBUF_NAMES
} else
goto handle_unusual;
continue;
- // bytes bytes = 5;
- case 5:
- if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 42)) {
+ // bytes bytes = 6;
+ case 6:
+ if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 50)) {
auto str = _internal_mutable_bytes();
ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
CHK_(ptr);
@@ -2424,33 +2780,41 @@ const char* ConfigsRecordValue::_InternalParse(const char* ptr, ::PROTOBUF_NAMES
} else
goto handle_unusual;
continue;
- // .flwr.proto.Sint64List sint64_list = 22;
+ // .flwr.proto.SintList sint_list = 22;
case 22:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 178)) {
- ptr = ctx->ParseMessage(_internal_mutable_sint64_list(), ptr);
+ ptr = ctx->ParseMessage(_internal_mutable_sint_list(), ptr);
CHK_(ptr);
} else
goto handle_unusual;
continue;
- // .flwr.proto.BoolList bool_list = 23;
+ // .flwr.proto.UintList uint_list = 23;
case 23:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 186)) {
- ptr = ctx->ParseMessage(_internal_mutable_bool_list(), ptr);
+ ptr = ctx->ParseMessage(_internal_mutable_uint_list(), ptr);
CHK_(ptr);
} else
goto handle_unusual;
continue;
- // .flwr.proto.StringList string_list = 24;
+ // .flwr.proto.BoolList bool_list = 24;
case 24:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 194)) {
- ptr = ctx->ParseMessage(_internal_mutable_string_list(), ptr);
+ ptr = ctx->ParseMessage(_internal_mutable_bool_list(), ptr);
CHK_(ptr);
} else
goto handle_unusual;
continue;
- // .flwr.proto.BytesList bytes_list = 25;
+ // .flwr.proto.StringList string_list = 25;
case 25:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 202)) {
+ ptr = ctx->ParseMessage(_internal_mutable_string_list(), ptr);
+ CHK_(ptr);
+ } else
+ goto handle_unusual;
+ continue;
+ // .flwr.proto.BytesList bytes_list = 26;
+ case 26:
+ if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 210)) {
ptr = ctx->ParseMessage(_internal_mutable_bytes_list(), ptr);
CHK_(ptr);
} else
@@ -2497,26 +2861,32 @@ ::PROTOBUF_NAMESPACE_ID::uint8* ConfigsRecordValue::_InternalSerialize(
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteSInt64ToArray(2, this->_internal_sint64(), target);
}
- // bool bool = 3;
+ // uint64 uint64 = 3;
+ if (_internal_has_uint64()) {
+ target = stream->EnsureSpace(target);
+ target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64ToArray(3, this->_internal_uint64(), target);
+ }
+
+ // bool bool = 4;
if (_internal_has_bool_()) {
target = stream->EnsureSpace(target);
- target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteBoolToArray(3, this->_internal_bool_(), target);
+ target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteBoolToArray(4, this->_internal_bool_(), target);
}
- // string string = 4;
+ // string string = 5;
if (_internal_has_string()) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
this->_internal_string().data(), static_cast(this->_internal_string().length()),
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
"flwr.proto.ConfigsRecordValue.string");
target = stream->WriteStringMaybeAliased(
- 4, this->_internal_string(), target);
+ 5, this->_internal_string(), target);
}
- // bytes bytes = 5;
+ // bytes bytes = 6;
if (_internal_has_bytes()) {
target = stream->WriteBytesMaybeAliased(
- 5, this->_internal_bytes(), target);
+ 6, this->_internal_bytes(), target);
}
// .flwr.proto.DoubleList double_list = 21;
@@ -2527,36 +2897,44 @@ ::PROTOBUF_NAMESPACE_ID::uint8* ConfigsRecordValue::_InternalSerialize(
21, _Internal::double_list(this), target, stream);
}
- // .flwr.proto.Sint64List sint64_list = 22;
- if (_internal_has_sint64_list()) {
+ // .flwr.proto.SintList sint_list = 22;
+ if (_internal_has_sint_list()) {
+ target = stream->EnsureSpace(target);
+ target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+ InternalWriteMessage(
+ 22, _Internal::sint_list(this), target, stream);
+ }
+
+ // .flwr.proto.UintList uint_list = 23;
+ if (_internal_has_uint_list()) {
target = stream->EnsureSpace(target);
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
InternalWriteMessage(
- 22, _Internal::sint64_list(this), target, stream);
+ 23, _Internal::uint_list(this), target, stream);
}
- // .flwr.proto.BoolList bool_list = 23;
+ // .flwr.proto.BoolList bool_list = 24;
if (_internal_has_bool_list()) {
target = stream->EnsureSpace(target);
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
InternalWriteMessage(
- 23, _Internal::bool_list(this), target, stream);
+ 24, _Internal::bool_list(this), target, stream);
}
- // .flwr.proto.StringList string_list = 24;
+ // .flwr.proto.StringList string_list = 25;
if (_internal_has_string_list()) {
target = stream->EnsureSpace(target);
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
InternalWriteMessage(
- 24, _Internal::string_list(this), target, stream);
+ 25, _Internal::string_list(this), target, stream);
}
- // .flwr.proto.BytesList bytes_list = 25;
+ // .flwr.proto.BytesList bytes_list = 26;
if (_internal_has_bytes_list()) {
target = stream->EnsureSpace(target);
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
InternalWriteMessage(
- 25, _Internal::bytes_list(this), target, stream);
+ 26, _Internal::bytes_list(this), target, stream);
}
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
@@ -2586,19 +2964,24 @@ size_t ConfigsRecordValue::ByteSizeLong() const {
total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SInt64SizePlusOne(this->_internal_sint64());
break;
}
- // bool bool = 3;
+ // uint64 uint64 = 3;
+ case kUint64: {
+ total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::UInt64SizePlusOne(this->_internal_uint64());
+ break;
+ }
+ // bool bool = 4;
case kBool: {
total_size += 1 + 1;
break;
}
- // string string = 4;
+ // string string = 5;
case kString: {
total_size += 1 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
this->_internal_string());
break;
}
- // bytes bytes = 5;
+ // bytes bytes = 6;
case kBytes: {
total_size += 1 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
@@ -2612,28 +2995,35 @@ size_t ConfigsRecordValue::ByteSizeLong() const {
*value_.double_list_);
break;
}
- // .flwr.proto.Sint64List sint64_list = 22;
- case kSint64List: {
+ // .flwr.proto.SintList sint_list = 22;
+ case kSintList: {
total_size += 2 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
- *value_.sint64_list_);
+ *value_.sint_list_);
break;
}
- // .flwr.proto.BoolList bool_list = 23;
+ // .flwr.proto.UintList uint_list = 23;
+ case kUintList: {
+ total_size += 2 +
+ ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+ *value_.uint_list_);
+ break;
+ }
+ // .flwr.proto.BoolList bool_list = 24;
case kBoolList: {
total_size += 2 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
*value_.bool_list_);
break;
}
- // .flwr.proto.StringList string_list = 24;
+ // .flwr.proto.StringList string_list = 25;
case kStringList: {
total_size += 2 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
*value_.string_list_);
break;
}
- // .flwr.proto.BytesList bytes_list = 25;
+ // .flwr.proto.BytesList bytes_list = 26;
case kBytesList: {
total_size += 2 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
@@ -2675,6 +3065,10 @@ void ConfigsRecordValue::MergeFrom(const ConfigsRecordValue& from) {
_internal_set_sint64(from._internal_sint64());
break;
}
+ case kUint64: {
+ _internal_set_uint64(from._internal_uint64());
+ break;
+ }
case kBool: {
_internal_set_bool_(from._internal_bool_());
break;
@@ -2691,8 +3085,12 @@ void ConfigsRecordValue::MergeFrom(const ConfigsRecordValue& from) {
_internal_mutable_double_list()->::flwr::proto::DoubleList::MergeFrom(from._internal_double_list());
break;
}
- case kSint64List: {
- _internal_mutable_sint64_list()->::flwr::proto::Sint64List::MergeFrom(from._internal_sint64_list());
+ case kSintList: {
+ _internal_mutable_sint_list()->::flwr::proto::SintList::MergeFrom(from._internal_sint_list());
+ break;
+ }
+ case kUintList: {
+ _internal_mutable_uint_list()->::flwr::proto::UintList::MergeFrom(from._internal_uint_list());
break;
}
case kBoolList: {
@@ -2735,7 +3133,7 @@ void ConfigsRecordValue::InternalSwap(ConfigsRecordValue* other) {
::PROTOBUF_NAMESPACE_ID::Metadata ConfigsRecordValue::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
- file_level_metadata_flwr_2fproto_2frecordset_2eproto[7]);
+ file_level_metadata_flwr_2fproto_2frecordset_2eproto[8]);
}
// ===================================================================
@@ -2958,7 +3356,7 @@ void ParametersRecord::InternalSwap(ParametersRecord* other) {
::PROTOBUF_NAMESPACE_ID::Metadata ParametersRecord::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
- file_level_metadata_flwr_2fproto_2frecordset_2eproto[8]);
+ file_level_metadata_flwr_2fproto_2frecordset_2eproto[9]);
}
// ===================================================================
@@ -2972,7 +3370,7 @@ void MetricsRecord_DataEntry_DoNotUse::MergeFrom(const MetricsRecord_DataEntry_D
::PROTOBUF_NAMESPACE_ID::Metadata MetricsRecord_DataEntry_DoNotUse::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
- file_level_metadata_flwr_2fproto_2frecordset_2eproto[9]);
+ file_level_metadata_flwr_2fproto_2frecordset_2eproto[10]);
}
// ===================================================================
@@ -3197,7 +3595,7 @@ void MetricsRecord::InternalSwap(MetricsRecord* other) {
::PROTOBUF_NAMESPACE_ID::Metadata MetricsRecord::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
- file_level_metadata_flwr_2fproto_2frecordset_2eproto[10]);
+ file_level_metadata_flwr_2fproto_2frecordset_2eproto[11]);
}
// ===================================================================
@@ -3211,7 +3609,7 @@ void ConfigsRecord_DataEntry_DoNotUse::MergeFrom(const ConfigsRecord_DataEntry_D
::PROTOBUF_NAMESPACE_ID::Metadata ConfigsRecord_DataEntry_DoNotUse::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
- file_level_metadata_flwr_2fproto_2frecordset_2eproto[11]);
+ file_level_metadata_flwr_2fproto_2frecordset_2eproto[12]);
}
// ===================================================================
@@ -3436,7 +3834,7 @@ void ConfigsRecord::InternalSwap(ConfigsRecord* other) {
::PROTOBUF_NAMESPACE_ID::Metadata ConfigsRecord::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
- file_level_metadata_flwr_2fproto_2frecordset_2eproto[12]);
+ file_level_metadata_flwr_2fproto_2frecordset_2eproto[13]);
}
// ===================================================================
@@ -3450,7 +3848,7 @@ void RecordSet_ParametersEntry_DoNotUse::MergeFrom(const RecordSet_ParametersEnt
::PROTOBUF_NAMESPACE_ID::Metadata RecordSet_ParametersEntry_DoNotUse::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
- file_level_metadata_flwr_2fproto_2frecordset_2eproto[13]);
+ file_level_metadata_flwr_2fproto_2frecordset_2eproto[14]);
}
// ===================================================================
@@ -3464,7 +3862,7 @@ void RecordSet_MetricsEntry_DoNotUse::MergeFrom(const RecordSet_MetricsEntry_DoN
::PROTOBUF_NAMESPACE_ID::Metadata RecordSet_MetricsEntry_DoNotUse::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
- file_level_metadata_flwr_2fproto_2frecordset_2eproto[14]);
+ file_level_metadata_flwr_2fproto_2frecordset_2eproto[15]);
}
// ===================================================================
@@ -3478,7 +3876,7 @@ void RecordSet_ConfigsEntry_DoNotUse::MergeFrom(const RecordSet_ConfigsEntry_DoN
::PROTOBUF_NAMESPACE_ID::Metadata RecordSet_ConfigsEntry_DoNotUse::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
- file_level_metadata_flwr_2fproto_2frecordset_2eproto[15]);
+ file_level_metadata_flwr_2fproto_2frecordset_2eproto[16]);
}
// ===================================================================
@@ -3843,7 +4241,7 @@ void RecordSet::InternalSwap(RecordSet* other) {
::PROTOBUF_NAMESPACE_ID::Metadata RecordSet::GetMetadata() const {
return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
&descriptor_table_flwr_2fproto_2frecordset_2eproto_getter, &descriptor_table_flwr_2fproto_2frecordset_2eproto_once,
- file_level_metadata_flwr_2fproto_2frecordset_2eproto[16]);
+ file_level_metadata_flwr_2fproto_2frecordset_2eproto[17]);
}
// @@protoc_insertion_point(namespace_scope)
@@ -3853,8 +4251,11 @@ PROTOBUF_NAMESPACE_OPEN
template<> PROTOBUF_NOINLINE ::flwr::proto::DoubleList* Arena::CreateMaybeMessage< ::flwr::proto::DoubleList >(Arena* arena) {
return Arena::CreateMessageInternal< ::flwr::proto::DoubleList >(arena);
}
-template<> PROTOBUF_NOINLINE ::flwr::proto::Sint64List* Arena::CreateMaybeMessage< ::flwr::proto::Sint64List >(Arena* arena) {
- return Arena::CreateMessageInternal< ::flwr::proto::Sint64List >(arena);
+template<> PROTOBUF_NOINLINE ::flwr::proto::SintList* Arena::CreateMaybeMessage< ::flwr::proto::SintList >(Arena* arena) {
+ return Arena::CreateMessageInternal< ::flwr::proto::SintList >(arena);
+}
+template<> PROTOBUF_NOINLINE ::flwr::proto::UintList* Arena::CreateMaybeMessage< ::flwr::proto::UintList >(Arena* arena) {
+ return Arena::CreateMessageInternal< ::flwr::proto::UintList >(arena);
}
template<> PROTOBUF_NOINLINE ::flwr::proto::BoolList* Arena::CreateMaybeMessage< ::flwr::proto::BoolList >(Arena* arena) {
return Arena::CreateMessageInternal< ::flwr::proto::BoolList >(arena);
diff --git a/src/cc/flwr/include/flwr/proto/recordset.pb.h b/framework/src/cc/flwr/include/flwr/proto/recordset.pb.h
similarity index 84%
rename from src/cc/flwr/include/flwr/proto/recordset.pb.h
rename to framework/src/cc/flwr/include/flwr/proto/recordset.pb.h
index 74c336cf61ad..47a567ac2ec9 100644
--- a/src/cc/flwr/include/flwr/proto/recordset.pb.h
+++ b/framework/src/cc/flwr/include/flwr/proto/recordset.pb.h
@@ -49,7 +49,7 @@ struct TableStruct_flwr_2fproto_2frecordset_2eproto {
PROTOBUF_SECTION_VARIABLE(protodesc_cold);
static const ::PROTOBUF_NAMESPACE_ID::internal::AuxiliaryParseTableField aux[]
PROTOBUF_SECTION_VARIABLE(protodesc_cold);
- static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[17]
+ static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[18]
PROTOBUF_SECTION_VARIABLE(protodesc_cold);
static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
@@ -103,12 +103,15 @@ extern RecordSet_MetricsEntry_DoNotUseDefaultTypeInternal _RecordSet_MetricsEntr
class RecordSet_ParametersEntry_DoNotUse;
struct RecordSet_ParametersEntry_DoNotUseDefaultTypeInternal;
extern RecordSet_ParametersEntry_DoNotUseDefaultTypeInternal _RecordSet_ParametersEntry_DoNotUse_default_instance_;
-class Sint64List;
-struct Sint64ListDefaultTypeInternal;
-extern Sint64ListDefaultTypeInternal _Sint64List_default_instance_;
+class SintList;
+struct SintListDefaultTypeInternal;
+extern SintListDefaultTypeInternal _SintList_default_instance_;
class StringList;
struct StringListDefaultTypeInternal;
extern StringListDefaultTypeInternal _StringList_default_instance_;
+class UintList;
+struct UintListDefaultTypeInternal;
+extern UintListDefaultTypeInternal _UintList_default_instance_;
} // namespace proto
} // namespace flwr
PROTOBUF_NAMESPACE_OPEN
@@ -127,8 +130,9 @@ template<> ::flwr::proto::RecordSet* Arena::CreateMaybeMessage<::flwr::proto::Re
template<> ::flwr::proto::RecordSet_ConfigsEntry_DoNotUse* Arena::CreateMaybeMessage<::flwr::proto::RecordSet_ConfigsEntry_DoNotUse>(Arena*);
template<> ::flwr::proto::RecordSet_MetricsEntry_DoNotUse* Arena::CreateMaybeMessage<::flwr::proto::RecordSet_MetricsEntry_DoNotUse>(Arena*);
template<> ::flwr::proto::RecordSet_ParametersEntry_DoNotUse* Arena::CreateMaybeMessage<::flwr::proto::RecordSet_ParametersEntry_DoNotUse>(Arena*);
-template<> ::flwr::proto::Sint64List* Arena::CreateMaybeMessage<::flwr::proto::Sint64List>(Arena*);
+template<> ::flwr::proto::SintList* Arena::CreateMaybeMessage<::flwr::proto::SintList>(Arena*);
template<> ::flwr::proto::StringList* Arena::CreateMaybeMessage<::flwr::proto::StringList>(Arena*);
+template<> ::flwr::proto::UintList* Arena::CreateMaybeMessage<::flwr::proto::UintList>(Arena*);
PROTOBUF_NAMESPACE_CLOSE
namespace flwr {
namespace proto {
@@ -291,24 +295,24 @@ class DoubleList final :
};
// -------------------------------------------------------------------
-class Sint64List final :
- public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:flwr.proto.Sint64List) */ {
+class SintList final :
+ public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:flwr.proto.SintList) */ {
public:
- inline Sint64List() : Sint64List(nullptr) {}
- ~Sint64List() override;
- explicit constexpr Sint64List(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+ inline SintList() : SintList(nullptr) {}
+ ~SintList() override;
+ explicit constexpr SintList(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
- Sint64List(const Sint64List& from);
- Sint64List(Sint64List&& from) noexcept
- : Sint64List() {
+ SintList(const SintList& from);
+ SintList(SintList&& from) noexcept
+ : SintList() {
*this = ::std::move(from);
}
- inline Sint64List& operator=(const Sint64List& from) {
+ inline SintList& operator=(const SintList& from) {
CopyFrom(from);
return *this;
}
- inline Sint64List& operator=(Sint64List&& from) noexcept {
+ inline SintList& operator=(SintList&& from) noexcept {
if (this == &from) return *this;
if (GetOwningArena() == from.GetOwningArena()
#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
@@ -331,20 +335,20 @@ class Sint64List final :
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return default_instance().GetMetadata().reflection;
}
- static const Sint64List& default_instance() {
+ static const SintList& default_instance() {
return *internal_default_instance();
}
- static inline const Sint64List* internal_default_instance() {
- return reinterpret_cast(
- &_Sint64List_default_instance_);
+ static inline const SintList* internal_default_instance() {
+ return reinterpret_cast(
+ &_SintList_default_instance_);
}
static constexpr int kIndexInFileMessages =
1;
- friend void swap(Sint64List& a, Sint64List& b) {
+ friend void swap(SintList& a, SintList& b) {
a.Swap(&b);
}
- inline void Swap(Sint64List* other) {
+ inline void Swap(SintList* other) {
if (other == this) return;
if (GetOwningArena() == other->GetOwningArena()) {
InternalSwap(other);
@@ -352,7 +356,7 @@ class Sint64List final :
::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
}
}
- void UnsafeArenaSwap(Sint64List* other) {
+ void UnsafeArenaSwap(SintList* other) {
if (other == this) return;
GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
InternalSwap(other);
@@ -360,17 +364,17 @@ class Sint64List final :
// implements Message ----------------------------------------------
- inline Sint64List* New() const final {
- return new Sint64List();
+ inline SintList* New() const final {
+ return new SintList();
}
- Sint64List* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
- return CreateMaybeMessage(arena);
+ SintList* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
+ return CreateMaybeMessage(arena);
}
using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
- void CopyFrom(const Sint64List& from);
+ void CopyFrom(const SintList& from);
using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
- void MergeFrom(const Sint64List& from);
+ void MergeFrom(const SintList& from);
private:
static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
public:
@@ -387,13 +391,13 @@ class Sint64List final :
void SharedCtor();
void SharedDtor();
void SetCachedSize(int size) const final;
- void InternalSwap(Sint64List* other);
+ void InternalSwap(SintList* other);
friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
- return "flwr.proto.Sint64List";
+ return "flwr.proto.SintList";
}
protected:
- explicit Sint64List(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+ explicit SintList(::PROTOBUF_NAMESPACE_ID::Arena* arena,
bool is_message_owned = false);
private:
static void ArenaDtor(void* object);
@@ -434,7 +438,7 @@ class Sint64List final :
::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
mutable_vals();
- // @@protoc_insertion_point(class_scope:flwr.proto.Sint64List)
+ // @@protoc_insertion_point(class_scope:flwr.proto.SintList)
private:
class _Internal;
@@ -448,6 +452,163 @@ class Sint64List final :
};
// -------------------------------------------------------------------
+class UintList final :
+ public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:flwr.proto.UintList) */ {
+ public:
+ inline UintList() : UintList(nullptr) {}
+ ~UintList() override;
+ explicit constexpr UintList(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+ UintList(const UintList& from);
+ UintList(UintList&& from) noexcept
+ : UintList() {
+ *this = ::std::move(from);
+ }
+
+ inline UintList& operator=(const UintList& from) {
+ CopyFrom(from);
+ return *this;
+ }
+ inline UintList& operator=(UintList&& from) noexcept {
+ if (this == &from) return *this;
+ if (GetOwningArena() == from.GetOwningArena()
+ #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+ && GetOwningArena() != nullptr
+ #endif // !PROTOBUF_FORCE_COPY_IN_MOVE
+ ) {
+ InternalSwap(&from);
+ } else {
+ CopyFrom(from);
+ }
+ return *this;
+ }
+
+ static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+ return GetDescriptor();
+ }
+ static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+ return default_instance().GetMetadata().descriptor;
+ }
+ static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+ return default_instance().GetMetadata().reflection;
+ }
+ static const UintList& default_instance() {
+ return *internal_default_instance();
+ }
+ static inline const UintList* internal_default_instance() {
+ return reinterpret_cast(
+ &_UintList_default_instance_);
+ }
+ static constexpr int kIndexInFileMessages =
+ 2;
+
+ friend void swap(UintList& a, UintList& b) {
+ a.Swap(&b);
+ }
+ inline void Swap(UintList* other) {
+ if (other == this) return;
+ if (GetOwningArena() == other->GetOwningArena()) {
+ InternalSwap(other);
+ } else {
+ ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+ }
+ }
+ void UnsafeArenaSwap(UintList* other) {
+ if (other == this) return;
+ GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+ InternalSwap(other);
+ }
+
+ // implements Message ----------------------------------------------
+
+ inline UintList* New() const final {
+ return new UintList();
+ }
+
+ UintList* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
+ return CreateMaybeMessage(arena);
+ }
+ using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+ void CopyFrom(const UintList& from);
+ using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+ void MergeFrom(const UintList& from);
+ private:
+ static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
+ public:
+ PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+ bool IsInitialized() const final;
+
+ size_t ByteSizeLong() const final;
+ const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+ ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
+ ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+ int GetCachedSize() const final { return _cached_size_.Get(); }
+
+ private:
+ void SharedCtor();
+ void SharedDtor();
+ void SetCachedSize(int size) const final;
+ void InternalSwap(UintList* other);
+ friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+ static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+ return "flwr.proto.UintList";
+ }
+ protected:
+ explicit UintList(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+ bool is_message_owned = false);
+ private:
+ static void ArenaDtor(void* object);
+ inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
+ public:
+
+ static const ClassData _class_data_;
+ const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+ ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+ // nested types ----------------------------------------------------
+
+ // accessors -------------------------------------------------------
+
+ enum : int {
+ kValsFieldNumber = 1,
+ };
+ // repeated uint64 vals = 1;
+ int vals_size() const;
+ private:
+ int _internal_vals_size() const;
+ public:
+ void clear_vals();
+ private:
+ ::PROTOBUF_NAMESPACE_ID::uint64 _internal_vals(int index) const;
+ const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint64 >&
+ _internal_vals() const;
+ void _internal_add_vals(::PROTOBUF_NAMESPACE_ID::uint64 value);
+ ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint64 >*
+ _internal_mutable_vals();
+ public:
+ ::PROTOBUF_NAMESPACE_ID::uint64 vals(int index) const;
+ void set_vals(int index, ::PROTOBUF_NAMESPACE_ID::uint64 value);
+ void add_vals(::PROTOBUF_NAMESPACE_ID::uint64 value);
+ const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint64 >&
+ vals() const;
+ ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint64 >*
+ mutable_vals();
+
+ // @@protoc_insertion_point(class_scope:flwr.proto.UintList)
+ private:
+ class _Internal;
+
+ template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+ typedef void InternalArenaConstructable_;
+ typedef void DestructorSkippable_;
+ ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint64 > vals_;
+ mutable std::atomic _vals_cached_byte_size_;
+ mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+ friend struct ::TableStruct_flwr_2fproto_2frecordset_2eproto;
+};
+// -------------------------------------------------------------------
+
class BoolList final :
public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:flwr.proto.BoolList) */ {
public:
@@ -496,7 +657,7 @@ class BoolList final :
&_BoolList_default_instance_);
}
static constexpr int kIndexInFileMessages =
- 2;
+ 3;
friend void swap(BoolList& a, BoolList& b) {
a.Swap(&b);
@@ -652,7 +813,7 @@ class StringList final :
&_StringList_default_instance_);
}
static constexpr int kIndexInFileMessages =
- 3;
+ 4;
friend void swap(StringList& a, StringList& b) {
a.Swap(&b);
@@ -810,7 +971,7 @@ class BytesList final :
&_BytesList_default_instance_);
}
static constexpr int kIndexInFileMessages =
- 4;
+ 5;
friend void swap(BytesList& a, BytesList& b) {
a.Swap(&b);
@@ -968,7 +1129,7 @@ class Array final :
&_Array_default_instance_);
}
static constexpr int kIndexInFileMessages =
- 5;
+ 6;
friend void swap(Array& a, Array& b) {
a.Swap(&b);
@@ -1171,8 +1332,10 @@ class MetricsRecordValue final :
enum ValueCase {
kDouble = 1,
kSint64 = 2,
+ kUint64 = 3,
kDoubleList = 21,
- kSint64List = 22,
+ kSintList = 22,
+ kUintList = 23,
VALUE_NOT_SET = 0,
};
@@ -1181,7 +1344,7 @@ class MetricsRecordValue final :
&_MetricsRecordValue_default_instance_);
}
static constexpr int kIndexInFileMessages =
- 6;
+ 7;
friend void swap(MetricsRecordValue& a, MetricsRecordValue& b) {
a.Swap(&b);
@@ -1254,8 +1417,10 @@ class MetricsRecordValue final :
enum : int {
kDoubleFieldNumber = 1,
kSint64FieldNumber = 2,
+ kUint64FieldNumber = 3,
kDoubleListFieldNumber = 21,
- kSint64ListFieldNumber = 22,
+ kSintListFieldNumber = 22,
+ kUintListFieldNumber = 23,
};
// double double = 1;
bool has_double_() const;
@@ -1283,6 +1448,19 @@ class MetricsRecordValue final :
void _internal_set_sint64(::PROTOBUF_NAMESPACE_ID::int64 value);
public:
+ // uint64 uint64 = 3;
+ bool has_uint64() const;
+ private:
+ bool _internal_has_uint64() const;
+ public:
+ void clear_uint64();
+ ::PROTOBUF_NAMESPACE_ID::uint64 uint64() const;
+ void set_uint64(::PROTOBUF_NAMESPACE_ID::uint64 value);
+ private:
+ ::PROTOBUF_NAMESPACE_ID::uint64 _internal_uint64() const;
+ void _internal_set_uint64(::PROTOBUF_NAMESPACE_ID::uint64 value);
+ public:
+
// .flwr.proto.DoubleList double_list = 21;
bool has_double_list() const;
private:
@@ -1301,23 +1479,41 @@ class MetricsRecordValue final :
::flwr::proto::DoubleList* double_list);
::flwr::proto::DoubleList* unsafe_arena_release_double_list();
- // .flwr.proto.Sint64List sint64_list = 22;
- bool has_sint64_list() const;
+ // .flwr.proto.SintList sint_list = 22;
+ bool has_sint_list() const;
+ private:
+ bool _internal_has_sint_list() const;
+ public:
+ void clear_sint_list();
+ const ::flwr::proto::SintList& sint_list() const;
+ PROTOBUF_MUST_USE_RESULT ::flwr::proto::SintList* release_sint_list();
+ ::flwr::proto::SintList* mutable_sint_list();
+ void set_allocated_sint_list(::flwr::proto::SintList* sint_list);
+ private:
+ const ::flwr::proto::SintList& _internal_sint_list() const;
+ ::flwr::proto::SintList* _internal_mutable_sint_list();
+ public:
+ void unsafe_arena_set_allocated_sint_list(
+ ::flwr::proto::SintList* sint_list);
+ ::flwr::proto::SintList* unsafe_arena_release_sint_list();
+
+ // .flwr.proto.UintList uint_list = 23;
+ bool has_uint_list() const;
private:
- bool _internal_has_sint64_list() const;
+ bool _internal_has_uint_list() const;
public:
- void clear_sint64_list();
- const ::flwr::proto::Sint64List& sint64_list() const;
- PROTOBUF_MUST_USE_RESULT ::flwr::proto::Sint64List* release_sint64_list();
- ::flwr::proto::Sint64List* mutable_sint64_list();
- void set_allocated_sint64_list(::flwr::proto::Sint64List* sint64_list);
+ void clear_uint_list();
+ const ::flwr::proto::UintList& uint_list() const;
+ PROTOBUF_MUST_USE_RESULT ::flwr::proto::UintList* release_uint_list();
+ ::flwr::proto::UintList* mutable_uint_list();
+ void set_allocated_uint_list(::flwr::proto::UintList* uint_list);
private:
- const ::flwr::proto::Sint64List& _internal_sint64_list() const;
- ::flwr::proto::Sint64List* _internal_mutable_sint64_list();
+ const ::flwr::proto::UintList& _internal_uint_list() const;
+ ::flwr::proto::UintList* _internal_mutable_uint_list();
public:
- void unsafe_arena_set_allocated_sint64_list(
- ::flwr::proto::Sint64List* sint64_list);
- ::flwr::proto::Sint64List* unsafe_arena_release_sint64_list();
+ void unsafe_arena_set_allocated_uint_list(
+ ::flwr::proto::UintList* uint_list);
+ ::flwr::proto::UintList* unsafe_arena_release_uint_list();
void clear_value();
ValueCase value_case() const;
@@ -1326,8 +1522,10 @@ class MetricsRecordValue final :
class _Internal;
void set_has_double_();
void set_has_sint64();
+ void set_has_uint64();
void set_has_double_list();
- void set_has_sint64_list();
+ void set_has_sint_list();
+ void set_has_uint_list();
inline bool has_value() const;
inline void clear_has_value();
@@ -1340,8 +1538,10 @@ class MetricsRecordValue final :
::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
double double__;
::PROTOBUF_NAMESPACE_ID::int64 sint64_;
+ ::PROTOBUF_NAMESPACE_ID::uint64 uint64_;
::flwr::proto::DoubleList* double_list_;
- ::flwr::proto::Sint64List* sint64_list_;
+ ::flwr::proto::SintList* sint_list_;
+ ::flwr::proto::UintList* uint_list_;
} value_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
::PROTOBUF_NAMESPACE_ID::uint32 _oneof_case_[1];
@@ -1396,14 +1596,16 @@ class ConfigsRecordValue final :
enum ValueCase {
kDouble = 1,
kSint64 = 2,
- kBool = 3,
- kString = 4,
- kBytes = 5,
+ kUint64 = 3,
+ kBool = 4,
+ kString = 5,
+ kBytes = 6,
kDoubleList = 21,
- kSint64List = 22,
- kBoolList = 23,
- kStringList = 24,
- kBytesList = 25,
+ kSintList = 22,
+ kUintList = 23,
+ kBoolList = 24,
+ kStringList = 25,
+ kBytesList = 26,
VALUE_NOT_SET = 0,
};
@@ -1412,7 +1614,7 @@ class ConfigsRecordValue final :
&_ConfigsRecordValue_default_instance_);
}
static constexpr int kIndexInFileMessages =
- 7;
+ 8;
friend void swap(ConfigsRecordValue& a, ConfigsRecordValue& b) {
a.Swap(&b);
@@ -1485,14 +1687,16 @@ class ConfigsRecordValue final :
enum : int {
kDoubleFieldNumber = 1,
kSint64FieldNumber = 2,
- kBoolFieldNumber = 3,
- kStringFieldNumber = 4,
- kBytesFieldNumber = 5,
+ kUint64FieldNumber = 3,
+ kBoolFieldNumber = 4,
+ kStringFieldNumber = 5,
+ kBytesFieldNumber = 6,
kDoubleListFieldNumber = 21,
- kSint64ListFieldNumber = 22,
- kBoolListFieldNumber = 23,
- kStringListFieldNumber = 24,
- kBytesListFieldNumber = 25,
+ kSintListFieldNumber = 22,
+ kUintListFieldNumber = 23,
+ kBoolListFieldNumber = 24,
+ kStringListFieldNumber = 25,
+ kBytesListFieldNumber = 26,
};
// double double = 1;
bool has_double_() const;
@@ -1520,7 +1724,20 @@ class ConfigsRecordValue final :
void _internal_set_sint64(::PROTOBUF_NAMESPACE_ID::int64 value);
public:
- // bool bool = 3;
+ // uint64 uint64 = 3;
+ bool has_uint64() const;
+ private:
+ bool _internal_has_uint64() const;
+ public:
+ void clear_uint64();
+ ::PROTOBUF_NAMESPACE_ID::uint64 uint64() const;
+ void set_uint64(::PROTOBUF_NAMESPACE_ID::uint64 value);
+ private:
+ ::PROTOBUF_NAMESPACE_ID::uint64 _internal_uint64() const;
+ void _internal_set_uint64(::PROTOBUF_NAMESPACE_ID::uint64 value);
+ public:
+
+ // bool bool = 4;
bool has_bool_() const;
private:
bool _internal_has_bool_() const;
@@ -1533,7 +1750,7 @@ class ConfigsRecordValue final :
void _internal_set_bool_(bool value);
public:
- // string string = 4;
+ // string string = 5;
bool has_string() const;
private:
bool _internal_has_string() const;
@@ -1551,7 +1768,7 @@ class ConfigsRecordValue final :
std::string* _internal_mutable_string();
public:
- // bytes bytes = 5;
+ // bytes bytes = 6;
bool has_bytes() const;
private:
bool _internal_has_bytes() const;
@@ -1587,25 +1804,43 @@ class ConfigsRecordValue final :
::flwr::proto::DoubleList* double_list);
::flwr::proto::DoubleList* unsafe_arena_release_double_list();
- // .flwr.proto.Sint64List sint64_list = 22;
- bool has_sint64_list() const;
+ // .flwr.proto.SintList sint_list = 22;
+ bool has_sint_list() const;
+ private:
+ bool _internal_has_sint_list() const;
+ public:
+ void clear_sint_list();
+ const ::flwr::proto::SintList& sint_list() const;
+ PROTOBUF_MUST_USE_RESULT ::flwr::proto::SintList* release_sint_list();
+ ::flwr::proto::SintList* mutable_sint_list();
+ void set_allocated_sint_list(::flwr::proto::SintList* sint_list);
+ private:
+ const ::flwr::proto::SintList& _internal_sint_list() const;
+ ::flwr::proto::SintList* _internal_mutable_sint_list();
+ public:
+ void unsafe_arena_set_allocated_sint_list(
+ ::flwr::proto::SintList* sint_list);
+ ::flwr::proto::SintList* unsafe_arena_release_sint_list();
+
+ // .flwr.proto.UintList uint_list = 23;
+ bool has_uint_list() const;
private:
- bool _internal_has_sint64_list() const;
+ bool _internal_has_uint_list() const;
public:
- void clear_sint64_list();
- const ::flwr::proto::Sint64List& sint64_list() const;
- PROTOBUF_MUST_USE_RESULT ::flwr::proto::Sint64List* release_sint64_list();
- ::flwr::proto::Sint64List* mutable_sint64_list();
- void set_allocated_sint64_list(::flwr::proto::Sint64List* sint64_list);
+ void clear_uint_list();
+ const ::flwr::proto::UintList& uint_list() const;
+ PROTOBUF_MUST_USE_RESULT ::flwr::proto::UintList* release_uint_list();
+ ::flwr::proto::UintList* mutable_uint_list();
+ void set_allocated_uint_list(::flwr::proto::UintList* uint_list);
private:
- const ::flwr::proto::Sint64List& _internal_sint64_list() const;
- ::flwr::proto::Sint64List* _internal_mutable_sint64_list();
+ const ::flwr::proto::UintList& _internal_uint_list() const;
+ ::flwr::proto::UintList* _internal_mutable_uint_list();
public:
- void unsafe_arena_set_allocated_sint64_list(
- ::flwr::proto::Sint64List* sint64_list);
- ::flwr::proto::Sint64List* unsafe_arena_release_sint64_list();
+ void unsafe_arena_set_allocated_uint_list(
+ ::flwr::proto::UintList* uint_list);
+ ::flwr::proto::UintList* unsafe_arena_release_uint_list();
- // .flwr.proto.BoolList bool_list = 23;
+ // .flwr.proto.BoolList bool_list = 24;
bool has_bool_list() const;
private:
bool _internal_has_bool_list() const;
@@ -1623,7 +1858,7 @@ class ConfigsRecordValue final :
::flwr::proto::BoolList* bool_list);
::flwr::proto::BoolList* unsafe_arena_release_bool_list();
- // .flwr.proto.StringList string_list = 24;
+ // .flwr.proto.StringList string_list = 25;
bool has_string_list() const;
private:
bool _internal_has_string_list() const;
@@ -1641,7 +1876,7 @@ class ConfigsRecordValue final :
::flwr::proto::StringList* string_list);
::flwr::proto::StringList* unsafe_arena_release_string_list();
- // .flwr.proto.BytesList bytes_list = 25;
+ // .flwr.proto.BytesList bytes_list = 26;
bool has_bytes_list() const;
private:
bool _internal_has_bytes_list() const;
@@ -1666,11 +1901,13 @@ class ConfigsRecordValue final :
class _Internal;
void set_has_double_();
void set_has_sint64();
+ void set_has_uint64();
void set_has_bool_();
void set_has_string();
void set_has_bytes();
void set_has_double_list();
- void set_has_sint64_list();
+ void set_has_sint_list();
+ void set_has_uint_list();
void set_has_bool_list();
void set_has_string_list();
void set_has_bytes_list();
@@ -1686,11 +1923,13 @@ class ConfigsRecordValue final :
::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized _constinit_;
double double__;
::PROTOBUF_NAMESPACE_ID::int64 sint64_;
+ ::PROTOBUF_NAMESPACE_ID::uint64 uint64_;
bool bool__;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr string_;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr bytes_;
::flwr::proto::DoubleList* double_list_;
- ::flwr::proto::Sint64List* sint64_list_;
+ ::flwr::proto::SintList* sint_list_;
+ ::flwr::proto::UintList* uint_list_;
::flwr::proto::BoolList* bool_list_;
::flwr::proto::StringList* string_list_;
::flwr::proto::BytesList* bytes_list_;
@@ -1750,7 +1989,7 @@ class ParametersRecord final :
&_ParametersRecord_default_instance_);
}
static constexpr int kIndexInFileMessages =
- 8;
+ 9;
friend void swap(ParametersRecord& a, ParametersRecord& b) {
a.Swap(&b);
@@ -1953,7 +2192,7 @@ class MetricsRecord final :
&_MetricsRecord_default_instance_);
}
static constexpr int kIndexInFileMessages =
- 10;
+ 11;
friend void swap(MetricsRecord& a, MetricsRecord& b) {
a.Swap(&b);
@@ -2134,7 +2373,7 @@ class ConfigsRecord final :
&_ConfigsRecord_default_instance_);
}
static constexpr int kIndexInFileMessages =
- 12;
+ 13;
friend void swap(ConfigsRecord& a, ConfigsRecord& b) {
a.Swap(&b);
@@ -2365,7 +2604,7 @@ class RecordSet final :
&_RecordSet_default_instance_);
}
static constexpr int kIndexInFileMessages =
- 16;
+ 17;
friend void swap(RecordSet& a, RecordSet& b) {
a.Swap(&b);
@@ -2577,52 +2816,103 @@ DoubleList::mutable_vals() {
// -------------------------------------------------------------------
-// Sint64List
+// SintList
// repeated sint64 vals = 1;
-inline int Sint64List::_internal_vals_size() const {
+inline int SintList::_internal_vals_size() const {
return vals_.size();
}
-inline int Sint64List::vals_size() const {
+inline int SintList::vals_size() const {
return _internal_vals_size();
}
-inline void Sint64List::clear_vals() {
+inline void SintList::clear_vals() {
vals_.Clear();
}
-inline ::PROTOBUF_NAMESPACE_ID::int64 Sint64List::_internal_vals(int index) const {
+inline ::PROTOBUF_NAMESPACE_ID::int64 SintList::_internal_vals(int index) const {
return vals_.Get(index);
}
-inline ::PROTOBUF_NAMESPACE_ID::int64 Sint64List::vals(int index) const {
- // @@protoc_insertion_point(field_get:flwr.proto.Sint64List.vals)
+inline ::PROTOBUF_NAMESPACE_ID::int64 SintList::vals(int index) const {
+ // @@protoc_insertion_point(field_get:flwr.proto.SintList.vals)
return _internal_vals(index);
}
-inline void Sint64List::set_vals(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
+inline void SintList::set_vals(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) {
vals_.Set(index, value);
- // @@protoc_insertion_point(field_set:flwr.proto.Sint64List.vals)
+ // @@protoc_insertion_point(field_set:flwr.proto.SintList.vals)
}
-inline void Sint64List::_internal_add_vals(::PROTOBUF_NAMESPACE_ID::int64 value) {
+inline void SintList::_internal_add_vals(::PROTOBUF_NAMESPACE_ID::int64 value) {
vals_.Add(value);
}
-inline void Sint64List::add_vals(::PROTOBUF_NAMESPACE_ID::int64 value) {
+inline void SintList::add_vals(::PROTOBUF_NAMESPACE_ID::int64 value) {
_internal_add_vals(value);
- // @@protoc_insertion_point(field_add:flwr.proto.Sint64List.vals)
+ // @@protoc_insertion_point(field_add:flwr.proto.SintList.vals)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
-Sint64List::_internal_vals() const {
+SintList::_internal_vals() const {
return vals_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >&
-Sint64List::vals() const {
- // @@protoc_insertion_point(field_list:flwr.proto.Sint64List.vals)
+SintList::vals() const {
+ // @@protoc_insertion_point(field_list:flwr.proto.SintList.vals)
return _internal_vals();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
-Sint64List::_internal_mutable_vals() {
+SintList::_internal_mutable_vals() {
return &vals_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >*
-Sint64List::mutable_vals() {
- // @@protoc_insertion_point(field_mutable_list:flwr.proto.Sint64List.vals)
+SintList::mutable_vals() {
+ // @@protoc_insertion_point(field_mutable_list:flwr.proto.SintList.vals)
+ return _internal_mutable_vals();
+}
+
+// -------------------------------------------------------------------
+
+// UintList
+
+// repeated uint64 vals = 1;
+inline int UintList::_internal_vals_size() const {
+ return vals_.size();
+}
+inline int UintList::vals_size() const {
+ return _internal_vals_size();
+}
+inline void UintList::clear_vals() {
+ vals_.Clear();
+}
+inline ::PROTOBUF_NAMESPACE_ID::uint64 UintList::_internal_vals(int index) const {
+ return vals_.Get(index);
+}
+inline ::PROTOBUF_NAMESPACE_ID::uint64 UintList::vals(int index) const {
+ // @@protoc_insertion_point(field_get:flwr.proto.UintList.vals)
+ return _internal_vals(index);
+}
+inline void UintList::set_vals(int index, ::PROTOBUF_NAMESPACE_ID::uint64 value) {
+ vals_.Set(index, value);
+ // @@protoc_insertion_point(field_set:flwr.proto.UintList.vals)
+}
+inline void UintList::_internal_add_vals(::PROTOBUF_NAMESPACE_ID::uint64 value) {
+ vals_.Add(value);
+}
+inline void UintList::add_vals(::PROTOBUF_NAMESPACE_ID::uint64 value) {
+ _internal_add_vals(value);
+ // @@protoc_insertion_point(field_add:flwr.proto.UintList.vals)
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint64 >&
+UintList::_internal_vals() const {
+ return vals_;
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint64 >&
+UintList::vals() const {
+ // @@protoc_insertion_point(field_list:flwr.proto.UintList.vals)
+ return _internal_vals();
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint64 >*
+UintList::_internal_mutable_vals() {
+ return &vals_;
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint64 >*
+UintList::mutable_vals() {
+ // @@protoc_insertion_point(field_mutable_list:flwr.proto.UintList.vals)
return _internal_mutable_vals();
}
@@ -3104,6 +3394,44 @@ inline void MetricsRecordValue::set_sint64(::PROTOBUF_NAMESPACE_ID::int64 value)
// @@protoc_insertion_point(field_set:flwr.proto.MetricsRecordValue.sint64)
}
+// uint64 uint64 = 3;
+inline bool MetricsRecordValue::_internal_has_uint64() const {
+ return value_case() == kUint64;
+}
+inline bool MetricsRecordValue::has_uint64() const {
+ return _internal_has_uint64();
+}
+inline void MetricsRecordValue::set_has_uint64() {
+ _oneof_case_[0] = kUint64;
+}
+inline void MetricsRecordValue::clear_uint64() {
+ if (_internal_has_uint64()) {
+ value_.uint64_ = uint64_t{0u};
+ clear_has_value();
+ }
+}
+inline ::PROTOBUF_NAMESPACE_ID::uint64 MetricsRecordValue::_internal_uint64() const {
+ if (_internal_has_uint64()) {
+ return value_.uint64_;
+ }
+ return uint64_t{0u};
+}
+inline void MetricsRecordValue::_internal_set_uint64(::PROTOBUF_NAMESPACE_ID::uint64 value) {
+ if (!_internal_has_uint64()) {
+ clear_value();
+ set_has_uint64();
+ }
+ value_.uint64_ = value;
+}
+inline ::PROTOBUF_NAMESPACE_ID::uint64 MetricsRecordValue::uint64() const {
+ // @@protoc_insertion_point(field_get:flwr.proto.MetricsRecordValue.uint64)
+ return _internal_uint64();
+}
+inline void MetricsRecordValue::set_uint64(::PROTOBUF_NAMESPACE_ID::uint64 value) {
+ _internal_set_uint64(value);
+ // @@protoc_insertion_point(field_set:flwr.proto.MetricsRecordValue.uint64)
+}
+
// .flwr.proto.DoubleList double_list = 21;
inline bool MetricsRecordValue::_internal_has_double_list() const {
return value_case() == kDoubleList;
@@ -3178,77 +3506,151 @@ inline ::flwr::proto::DoubleList* MetricsRecordValue::mutable_double_list() {
return _msg;
}
-// .flwr.proto.Sint64List sint64_list = 22;
-inline bool MetricsRecordValue::_internal_has_sint64_list() const {
- return value_case() == kSint64List;
+// .flwr.proto.SintList sint_list = 22;
+inline bool MetricsRecordValue::_internal_has_sint_list() const {
+ return value_case() == kSintList;
}
-inline bool MetricsRecordValue::has_sint64_list() const {
- return _internal_has_sint64_list();
+inline bool MetricsRecordValue::has_sint_list() const {
+ return _internal_has_sint_list();
}
-inline void MetricsRecordValue::set_has_sint64_list() {
- _oneof_case_[0] = kSint64List;
+inline void MetricsRecordValue::set_has_sint_list() {
+ _oneof_case_[0] = kSintList;
}
-inline void MetricsRecordValue::clear_sint64_list() {
- if (_internal_has_sint64_list()) {
+inline void MetricsRecordValue::clear_sint_list() {
+ if (_internal_has_sint_list()) {
if (GetArenaForAllocation() == nullptr) {
- delete value_.sint64_list_;
+ delete value_.sint_list_;
}
clear_has_value();
}
}
-inline ::flwr::proto::Sint64List* MetricsRecordValue::release_sint64_list() {
- // @@protoc_insertion_point(field_release:flwr.proto.MetricsRecordValue.sint64_list)
- if (_internal_has_sint64_list()) {
+inline ::flwr::proto::SintList* MetricsRecordValue::release_sint_list() {
+ // @@protoc_insertion_point(field_release:flwr.proto.MetricsRecordValue.sint_list)
+ if (_internal_has_sint_list()) {
clear_has_value();
- ::flwr::proto::Sint64List* temp = value_.sint64_list_;
+ ::flwr::proto::SintList* temp = value_.sint_list_;
if (GetArenaForAllocation() != nullptr) {
temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
}
- value_.sint64_list_ = nullptr;
+ value_.sint_list_ = nullptr;
return temp;
} else {
return nullptr;
}
}
-inline const ::flwr::proto::Sint64List& MetricsRecordValue::_internal_sint64_list() const {
- return _internal_has_sint64_list()
- ? *value_.sint64_list_
- : reinterpret_cast< ::flwr::proto::Sint64List&>(::flwr::proto::_Sint64List_default_instance_);
+inline const ::flwr::proto::SintList& MetricsRecordValue::_internal_sint_list() const {
+ return _internal_has_sint_list()
+ ? *value_.sint_list_
+ : reinterpret_cast< ::flwr::proto::SintList&>(::flwr::proto::_SintList_default_instance_);
}
-inline const ::flwr::proto::Sint64List& MetricsRecordValue::sint64_list() const {
- // @@protoc_insertion_point(field_get:flwr.proto.MetricsRecordValue.sint64_list)
- return _internal_sint64_list();
+inline const ::flwr::proto::SintList& MetricsRecordValue::sint_list() const {
+ // @@protoc_insertion_point(field_get:flwr.proto.MetricsRecordValue.sint_list)
+ return _internal_sint_list();
}
-inline ::flwr::proto::Sint64List* MetricsRecordValue::unsafe_arena_release_sint64_list() {
- // @@protoc_insertion_point(field_unsafe_arena_release:flwr.proto.MetricsRecordValue.sint64_list)
- if (_internal_has_sint64_list()) {
+inline ::flwr::proto::SintList* MetricsRecordValue::unsafe_arena_release_sint_list() {
+ // @@protoc_insertion_point(field_unsafe_arena_release:flwr.proto.MetricsRecordValue.sint_list)
+ if (_internal_has_sint_list()) {
clear_has_value();
- ::flwr::proto::Sint64List* temp = value_.sint64_list_;
- value_.sint64_list_ = nullptr;
+ ::flwr::proto::SintList* temp = value_.sint_list_;
+ value_.sint_list_ = nullptr;
return temp;
} else {
return nullptr;
}
}
-inline void MetricsRecordValue::unsafe_arena_set_allocated_sint64_list(::flwr::proto::Sint64List* sint64_list) {
+inline void MetricsRecordValue::unsafe_arena_set_allocated_sint_list(::flwr::proto::SintList* sint_list) {
clear_value();
- if (sint64_list) {
- set_has_sint64_list();
- value_.sint64_list_ = sint64_list;
+ if (sint_list) {
+ set_has_sint_list();
+ value_.sint_list_ = sint_list;
}
- // @@protoc_insertion_point(field_unsafe_arena_set_allocated:flwr.proto.MetricsRecordValue.sint64_list)
+ // @@protoc_insertion_point(field_unsafe_arena_set_allocated:flwr.proto.MetricsRecordValue.sint_list)
}
-inline ::flwr::proto::Sint64List* MetricsRecordValue::_internal_mutable_sint64_list() {
- if (!_internal_has_sint64_list()) {
+inline ::flwr::proto::SintList* MetricsRecordValue::_internal_mutable_sint_list() {
+ if (!_internal_has_sint_list()) {
clear_value();
- set_has_sint64_list();
- value_.sint64_list_ = CreateMaybeMessage< ::flwr::proto::Sint64List >(GetArenaForAllocation());
+ set_has_sint_list();
+ value_.sint_list_ = CreateMaybeMessage< ::flwr::proto::SintList >(GetArenaForAllocation());
}
- return value_.sint64_list_;
+ return value_.sint_list_;
}
-inline ::flwr::proto::Sint64List* MetricsRecordValue::mutable_sint64_list() {
- ::flwr::proto::Sint64List* _msg = _internal_mutable_sint64_list();
- // @@protoc_insertion_point(field_mutable:flwr.proto.MetricsRecordValue.sint64_list)
+inline ::flwr::proto::SintList* MetricsRecordValue::mutable_sint_list() {
+ ::flwr::proto::SintList* _msg = _internal_mutable_sint_list();
+ // @@protoc_insertion_point(field_mutable:flwr.proto.MetricsRecordValue.sint_list)
+ return _msg;
+}
+
+// .flwr.proto.UintList uint_list = 23;
+inline bool MetricsRecordValue::_internal_has_uint_list() const {
+ return value_case() == kUintList;
+}
+inline bool MetricsRecordValue::has_uint_list() const {
+ return _internal_has_uint_list();
+}
+inline void MetricsRecordValue::set_has_uint_list() {
+ _oneof_case_[0] = kUintList;
+}
+inline void MetricsRecordValue::clear_uint_list() {
+ if (_internal_has_uint_list()) {
+ if (GetArenaForAllocation() == nullptr) {
+ delete value_.uint_list_;
+ }
+ clear_has_value();
+ }
+}
+inline ::flwr::proto::UintList* MetricsRecordValue::release_uint_list() {
+ // @@protoc_insertion_point(field_release:flwr.proto.MetricsRecordValue.uint_list)
+ if (_internal_has_uint_list()) {
+ clear_has_value();
+ ::flwr::proto::UintList* temp = value_.uint_list_;
+ if (GetArenaForAllocation() != nullptr) {
+ temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+ }
+ value_.uint_list_ = nullptr;
+ return temp;
+ } else {
+ return nullptr;
+ }
+}
+inline const ::flwr::proto::UintList& MetricsRecordValue::_internal_uint_list() const {
+ return _internal_has_uint_list()
+ ? *value_.uint_list_
+ : reinterpret_cast< ::flwr::proto::UintList&>(::flwr::proto::_UintList_default_instance_);
+}
+inline const ::flwr::proto::UintList& MetricsRecordValue::uint_list() const {
+ // @@protoc_insertion_point(field_get:flwr.proto.MetricsRecordValue.uint_list)
+ return _internal_uint_list();
+}
+inline ::flwr::proto::UintList* MetricsRecordValue::unsafe_arena_release_uint_list() {
+ // @@protoc_insertion_point(field_unsafe_arena_release:flwr.proto.MetricsRecordValue.uint_list)
+ if (_internal_has_uint_list()) {
+ clear_has_value();
+ ::flwr::proto::UintList* temp = value_.uint_list_;
+ value_.uint_list_ = nullptr;
+ return temp;
+ } else {
+ return nullptr;
+ }
+}
+inline void MetricsRecordValue::unsafe_arena_set_allocated_uint_list(::flwr::proto::UintList* uint_list) {
+ clear_value();
+ if (uint_list) {
+ set_has_uint_list();
+ value_.uint_list_ = uint_list;
+ }
+ // @@protoc_insertion_point(field_unsafe_arena_set_allocated:flwr.proto.MetricsRecordValue.uint_list)
+}
+inline ::flwr::proto::UintList* MetricsRecordValue::_internal_mutable_uint_list() {
+ if (!_internal_has_uint_list()) {
+ clear_value();
+ set_has_uint_list();
+ value_.uint_list_ = CreateMaybeMessage< ::flwr::proto::UintList >(GetArenaForAllocation());
+ }
+ return value_.uint_list_;
+}
+inline ::flwr::proto::UintList* MetricsRecordValue::mutable_uint_list() {
+ ::flwr::proto::UintList* _msg = _internal_mutable_uint_list();
+ // @@protoc_insertion_point(field_mutable:flwr.proto.MetricsRecordValue.uint_list)
return _msg;
}
@@ -3341,7 +3743,45 @@ inline void ConfigsRecordValue::set_sint64(::PROTOBUF_NAMESPACE_ID::int64 value)
// @@protoc_insertion_point(field_set:flwr.proto.ConfigsRecordValue.sint64)
}
-// bool bool = 3;
+// uint64 uint64 = 3;
+inline bool ConfigsRecordValue::_internal_has_uint64() const {
+ return value_case() == kUint64;
+}
+inline bool ConfigsRecordValue::has_uint64() const {
+ return _internal_has_uint64();
+}
+inline void ConfigsRecordValue::set_has_uint64() {
+ _oneof_case_[0] = kUint64;
+}
+inline void ConfigsRecordValue::clear_uint64() {
+ if (_internal_has_uint64()) {
+ value_.uint64_ = uint64_t{0u};
+ clear_has_value();
+ }
+}
+inline ::PROTOBUF_NAMESPACE_ID::uint64 ConfigsRecordValue::_internal_uint64() const {
+ if (_internal_has_uint64()) {
+ return value_.uint64_;
+ }
+ return uint64_t{0u};
+}
+inline void ConfigsRecordValue::_internal_set_uint64(::PROTOBUF_NAMESPACE_ID::uint64 value) {
+ if (!_internal_has_uint64()) {
+ clear_value();
+ set_has_uint64();
+ }
+ value_.uint64_ = value;
+}
+inline ::PROTOBUF_NAMESPACE_ID::uint64 ConfigsRecordValue::uint64() const {
+ // @@protoc_insertion_point(field_get:flwr.proto.ConfigsRecordValue.uint64)
+ return _internal_uint64();
+}
+inline void ConfigsRecordValue::set_uint64(::PROTOBUF_NAMESPACE_ID::uint64 value) {
+ _internal_set_uint64(value);
+ // @@protoc_insertion_point(field_set:flwr.proto.ConfigsRecordValue.uint64)
+}
+
+// bool bool = 4;
inline bool ConfigsRecordValue::_internal_has_bool_() const {
return value_case() == kBool;
}
@@ -3379,7 +3819,7 @@ inline void ConfigsRecordValue::set_bool_(bool value) {
// @@protoc_insertion_point(field_set:flwr.proto.ConfigsRecordValue.bool)
}
-// string string = 4;
+// string string = 5;
inline bool ConfigsRecordValue::_internal_has_string() const {
return value_case() == kString;
}
@@ -3461,7 +3901,7 @@ inline void ConfigsRecordValue::set_allocated_string(std::string* string) {
// @@protoc_insertion_point(field_set_allocated:flwr.proto.ConfigsRecordValue.string)
}
-// bytes bytes = 5;
+// bytes bytes = 6;
inline bool ConfigsRecordValue::_internal_has_bytes() const {
return value_case() == kBytes;
}
@@ -3617,81 +4057,155 @@ inline ::flwr::proto::DoubleList* ConfigsRecordValue::mutable_double_list() {
return _msg;
}
-// .flwr.proto.Sint64List sint64_list = 22;
-inline bool ConfigsRecordValue::_internal_has_sint64_list() const {
- return value_case() == kSint64List;
+// .flwr.proto.SintList sint_list = 22;
+inline bool ConfigsRecordValue::_internal_has_sint_list() const {
+ return value_case() == kSintList;
}
-inline bool ConfigsRecordValue::has_sint64_list() const {
- return _internal_has_sint64_list();
+inline bool ConfigsRecordValue::has_sint_list() const {
+ return _internal_has_sint_list();
}
-inline void ConfigsRecordValue::set_has_sint64_list() {
- _oneof_case_[0] = kSint64List;
+inline void ConfigsRecordValue::set_has_sint_list() {
+ _oneof_case_[0] = kSintList;
}
-inline void ConfigsRecordValue::clear_sint64_list() {
- if (_internal_has_sint64_list()) {
+inline void ConfigsRecordValue::clear_sint_list() {
+ if (_internal_has_sint_list()) {
if (GetArenaForAllocation() == nullptr) {
- delete value_.sint64_list_;
+ delete value_.sint_list_;
}
clear_has_value();
}
}
-inline ::flwr::proto::Sint64List* ConfigsRecordValue::release_sint64_list() {
- // @@protoc_insertion_point(field_release:flwr.proto.ConfigsRecordValue.sint64_list)
- if (_internal_has_sint64_list()) {
+inline ::flwr::proto::SintList* ConfigsRecordValue::release_sint_list() {
+ // @@protoc_insertion_point(field_release:flwr.proto.ConfigsRecordValue.sint_list)
+ if (_internal_has_sint_list()) {
clear_has_value();
- ::flwr::proto::Sint64List* temp = value_.sint64_list_;
+ ::flwr::proto::SintList* temp = value_.sint_list_;
if (GetArenaForAllocation() != nullptr) {
temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
}
- value_.sint64_list_ = nullptr;
+ value_.sint_list_ = nullptr;
return temp;
} else {
return nullptr;
}
}
-inline const ::flwr::proto::Sint64List& ConfigsRecordValue::_internal_sint64_list() const {
- return _internal_has_sint64_list()
- ? *value_.sint64_list_
- : reinterpret_cast< ::flwr::proto::Sint64List&>(::flwr::proto::_Sint64List_default_instance_);
+inline const ::flwr::proto::SintList& ConfigsRecordValue::_internal_sint_list() const {
+ return _internal_has_sint_list()
+ ? *value_.sint_list_
+ : reinterpret_cast< ::flwr::proto::SintList&>(::flwr::proto::_SintList_default_instance_);
}
-inline const ::flwr::proto::Sint64List& ConfigsRecordValue::sint64_list() const {
- // @@protoc_insertion_point(field_get:flwr.proto.ConfigsRecordValue.sint64_list)
- return _internal_sint64_list();
+inline const ::flwr::proto::SintList& ConfigsRecordValue::sint_list() const {
+ // @@protoc_insertion_point(field_get:flwr.proto.ConfigsRecordValue.sint_list)
+ return _internal_sint_list();
}
-inline ::flwr::proto::Sint64List* ConfigsRecordValue::unsafe_arena_release_sint64_list() {
- // @@protoc_insertion_point(field_unsafe_arena_release:flwr.proto.ConfigsRecordValue.sint64_list)
- if (_internal_has_sint64_list()) {
+inline ::flwr::proto::SintList* ConfigsRecordValue::unsafe_arena_release_sint_list() {
+ // @@protoc_insertion_point(field_unsafe_arena_release:flwr.proto.ConfigsRecordValue.sint_list)
+ if (_internal_has_sint_list()) {
clear_has_value();
- ::flwr::proto::Sint64List* temp = value_.sint64_list_;
- value_.sint64_list_ = nullptr;
+ ::flwr::proto::SintList* temp = value_.sint_list_;
+ value_.sint_list_ = nullptr;
return temp;
} else {
return nullptr;
}
}
-inline void ConfigsRecordValue::unsafe_arena_set_allocated_sint64_list(::flwr::proto::Sint64List* sint64_list) {
+inline void ConfigsRecordValue::unsafe_arena_set_allocated_sint_list(::flwr::proto::SintList* sint_list) {
clear_value();
- if (sint64_list) {
- set_has_sint64_list();
- value_.sint64_list_ = sint64_list;
+ if (sint_list) {
+ set_has_sint_list();
+ value_.sint_list_ = sint_list;
}
- // @@protoc_insertion_point(field_unsafe_arena_set_allocated:flwr.proto.ConfigsRecordValue.sint64_list)
+ // @@protoc_insertion_point(field_unsafe_arena_set_allocated:flwr.proto.ConfigsRecordValue.sint_list)
}
-inline ::flwr::proto::Sint64List* ConfigsRecordValue::_internal_mutable_sint64_list() {
- if (!_internal_has_sint64_list()) {
+inline ::flwr::proto::SintList* ConfigsRecordValue::_internal_mutable_sint_list() {
+ if (!_internal_has_sint_list()) {
clear_value();
- set_has_sint64_list();
- value_.sint64_list_ = CreateMaybeMessage< ::flwr::proto::Sint64List >(GetArenaForAllocation());
+ set_has_sint_list();
+ value_.sint_list_ = CreateMaybeMessage< ::flwr::proto::SintList >(GetArenaForAllocation());
}
- return value_.sint64_list_;
+ return value_.sint_list_;
}
-inline ::flwr::proto::Sint64List* ConfigsRecordValue::mutable_sint64_list() {
- ::flwr::proto::Sint64List* _msg = _internal_mutable_sint64_list();
- // @@protoc_insertion_point(field_mutable:flwr.proto.ConfigsRecordValue.sint64_list)
+inline ::flwr::proto::SintList* ConfigsRecordValue::mutable_sint_list() {
+ ::flwr::proto::SintList* _msg = _internal_mutable_sint_list();
+ // @@protoc_insertion_point(field_mutable:flwr.proto.ConfigsRecordValue.sint_list)
return _msg;
}
-// .flwr.proto.BoolList bool_list = 23;
+// .flwr.proto.UintList uint_list = 23;
+inline bool ConfigsRecordValue::_internal_has_uint_list() const {
+ return value_case() == kUintList;
+}
+inline bool ConfigsRecordValue::has_uint_list() const {
+ return _internal_has_uint_list();
+}
+inline void ConfigsRecordValue::set_has_uint_list() {
+ _oneof_case_[0] = kUintList;
+}
+inline void ConfigsRecordValue::clear_uint_list() {
+ if (_internal_has_uint_list()) {
+ if (GetArenaForAllocation() == nullptr) {
+ delete value_.uint_list_;
+ }
+ clear_has_value();
+ }
+}
+inline ::flwr::proto::UintList* ConfigsRecordValue::release_uint_list() {
+ // @@protoc_insertion_point(field_release:flwr.proto.ConfigsRecordValue.uint_list)
+ if (_internal_has_uint_list()) {
+ clear_has_value();
+ ::flwr::proto::UintList* temp = value_.uint_list_;
+ if (GetArenaForAllocation() != nullptr) {
+ temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
+ }
+ value_.uint_list_ = nullptr;
+ return temp;
+ } else {
+ return nullptr;
+ }
+}
+inline const ::flwr::proto::UintList& ConfigsRecordValue::_internal_uint_list() const {
+ return _internal_has_uint_list()
+ ? *value_.uint_list_
+ : reinterpret_cast< ::flwr::proto::UintList&>(::flwr::proto::_UintList_default_instance_);
+}
+inline const ::flwr::proto::UintList& ConfigsRecordValue::uint_list() const {
+ // @@protoc_insertion_point(field_get:flwr.proto.ConfigsRecordValue.uint_list)
+ return _internal_uint_list();
+}
+inline ::flwr::proto::UintList* ConfigsRecordValue::unsafe_arena_release_uint_list() {
+ // @@protoc_insertion_point(field_unsafe_arena_release:flwr.proto.ConfigsRecordValue.uint_list)
+ if (_internal_has_uint_list()) {
+ clear_has_value();
+ ::flwr::proto::UintList* temp = value_.uint_list_;
+ value_.uint_list_ = nullptr;
+ return temp;
+ } else {
+ return nullptr;
+ }
+}
+inline void ConfigsRecordValue::unsafe_arena_set_allocated_uint_list(::flwr::proto::UintList* uint_list) {
+ clear_value();
+ if (uint_list) {
+ set_has_uint_list();
+ value_.uint_list_ = uint_list;
+ }
+ // @@protoc_insertion_point(field_unsafe_arena_set_allocated:flwr.proto.ConfigsRecordValue.uint_list)
+}
+inline ::flwr::proto::UintList* ConfigsRecordValue::_internal_mutable_uint_list() {
+ if (!_internal_has_uint_list()) {
+ clear_value();
+ set_has_uint_list();
+ value_.uint_list_ = CreateMaybeMessage< ::flwr::proto::UintList >(GetArenaForAllocation());
+ }
+ return value_.uint_list_;
+}
+inline ::flwr::proto::UintList* ConfigsRecordValue::mutable_uint_list() {
+ ::flwr::proto::UintList* _msg = _internal_mutable_uint_list();
+ // @@protoc_insertion_point(field_mutable:flwr.proto.ConfigsRecordValue.uint_list)
+ return _msg;
+}
+
+// .flwr.proto.BoolList bool_list = 24;
inline bool ConfigsRecordValue::_internal_has_bool_list() const {
return value_case() == kBoolList;
}
@@ -3765,7 +4279,7 @@ inline ::flwr::proto::BoolList* ConfigsRecordValue::mutable_bool_list() {
return _msg;
}
-// .flwr.proto.StringList string_list = 24;
+// .flwr.proto.StringList string_list = 25;
inline bool ConfigsRecordValue::_internal_has_string_list() const {
return value_case() == kStringList;
}
@@ -3839,7 +4353,7 @@ inline ::flwr::proto::StringList* ConfigsRecordValue::mutable_string_list() {
return _msg;
}
-// .flwr.proto.BytesList bytes_list = 25;
+// .flwr.proto.BytesList bytes_list = 26;
inline bool ConfigsRecordValue::_internal_has_bytes_list() const {
return value_case() == kBytesList;
}
@@ -4243,6 +4757,8 @@ RecordSet::mutable_configs() {
// -------------------------------------------------------------------
+// -------------------------------------------------------------------
+
// @@protoc_insertion_point(namespace_scope)
diff --git a/framework/src/cc/flwr/include/flwr/proto/run.grpc.pb.cc b/framework/src/cc/flwr/include/flwr/proto/run.grpc.pb.cc
new file mode 100644
index 000000000000..aac071be0fc9
--- /dev/null
+++ b/framework/src/cc/flwr/include/flwr/proto/run.grpc.pb.cc
@@ -0,0 +1,27 @@
+// Generated by the gRPC C++ plugin.
+// If you make any local change, they will be lost.
+// source: flwr/proto/run.proto
+
+#include "flwr/proto/run.pb.h"
+#include "flwr/proto/run.grpc.pb.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+namespace flwr {
+namespace proto {
+
+} // namespace flwr
+} // namespace proto
+
diff --git a/framework/src/cc/flwr/include/flwr/proto/run.grpc.pb.h b/framework/src/cc/flwr/include/flwr/proto/run.grpc.pb.h
new file mode 100644
index 000000000000..6cd7b4e7e516
--- /dev/null
+++ b/framework/src/cc/flwr/include/flwr/proto/run.grpc.pb.h
@@ -0,0 +1,51 @@
+// Generated by the gRPC C++ plugin.
+// If you make any local change, they will be lost.
+// source: flwr/proto/run.proto
+// Original file comments:
+// Copyright 2024 Flower Labs GmbH. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ==============================================================================
+//
+#ifndef GRPC_flwr_2fproto_2frun_2eproto__INCLUDED
+#define GRPC_flwr_2fproto_2frun_2eproto__INCLUDED
+
+#include "flwr/proto/run.pb.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include