flwr-nightly 1.10.0.dev20240722__tar.gz → 1.10.0.dev20240723__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of flwr-nightly might be problematic. Click here for more details.

Files changed (277) hide show
  1. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/PKG-INFO +1 -1
  2. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/pyproject.toml +1 -1
  3. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/config_utils.py +13 -15
  4. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/new.py +1 -1
  5. flwr_nightly-1.10.0.dev20240722/src/py/flwr/cli/new/templates/app/code/client.hf.py.tpl → flwr_nightly-1.10.0.dev20240723/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +7 -5
  6. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +28 -10
  7. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +7 -5
  8. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +2 -2
  9. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +17 -7
  10. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/flwr_tune/app.py.tpl +20 -17
  11. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client.py.tpl +5 -3
  12. flwr_nightly-1.10.0.dev20240722/src/py/flwr/cli/new/templates/app/code/server.hf.py.tpl → flwr_nightly-1.10.0.dev20240723/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +2 -1
  13. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +2 -1
  14. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +2 -1
  15. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +2 -1
  16. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +1 -1
  17. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +2 -1
  18. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +1 -1
  19. flwr_nightly-1.10.0.dev20240722/src/py/flwr/cli/new/templates/app/code/task.hf.py.tpl → flwr_nightly-1.10.0.dev20240723/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +13 -1
  20. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +14 -1
  21. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +13 -2
  22. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +13 -1
  23. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
  24. flwr_nightly-1.10.0.dev20240722/src/py/flwr/cli/new/templates/app/pyproject.hf.toml.tpl → flwr_nightly-1.10.0.dev20240723/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +2 -2
  25. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
  26. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +6 -6
  27. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
  28. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +2 -2
  29. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
  30. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +4 -4
  31. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/run/run.py +31 -27
  32. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/supernode/app.py +12 -43
  33. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/config.py +6 -1
  34. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/object_ref.py +84 -21
  35. flwr_nightly-1.10.0.dev20240723/src/py/flwr/proto/exec_pb2.py +43 -0
  36. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/exec_pb2.pyi +20 -1
  37. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/run_serverapp.py +0 -3
  38. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +1 -1
  39. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +4 -4
  40. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/simulation/__init__.py +1 -1
  41. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/simulation/run_simulation.py +32 -4
  42. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/superexec/app.py +4 -5
  43. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/superexec/deployment.py +1 -0
  44. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/superexec/exec_servicer.py +3 -1
  45. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/superexec/executor.py +3 -0
  46. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/superexec/simulation.py +28 -6
  47. flwr_nightly-1.10.0.dev20240722/src/py/flwr/proto/exec_pb2.py +0 -39
  48. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/LICENSE +0 -0
  49. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/README.md +0 -0
  50. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/__init__.py +0 -0
  51. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/__init__.py +0 -0
  52. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/app.py +0 -0
  53. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/build.py +0 -0
  54. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/example.py +0 -0
  55. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/install.py +0 -0
  56. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/__init__.py +0 -0
  57. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  58. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  59. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  60. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  61. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  62. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  63. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  64. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  65. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  66. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  67. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/flwr_tune/config.yaml.tpl +0 -0
  68. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  69. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  70. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server.py.tpl +0 -0
  71. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/flwr_tune/static_config.yaml.tpl +0 -0
  72. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  73. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/run/__init__.py +0 -0
  74. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/cli/utils.py +0 -0
  75. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/__init__.py +0 -0
  76. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/app.py +0 -0
  77. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/client.py +0 -0
  78. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/client_app.py +0 -0
  79. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  80. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  81. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  82. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  83. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/grpc_client/connection.py +0 -0
  84. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  85. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  86. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  87. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  88. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/heartbeat.py +0 -0
  89. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/message_handler/__init__.py +0 -0
  90. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  91. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  92. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/mod/__init__.py +0 -0
  93. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  94. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/mod/comms_mods.py +0 -0
  95. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  96. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  97. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  98. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  99. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/mod/utils.py +0 -0
  100. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/node_state.py +0 -0
  101. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/node_state_tests.py +0 -0
  102. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/numpy_client.py +0 -0
  103. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/rest_client/__init__.py +0 -0
  104. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/rest_client/connection.py +0 -0
  105. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/supernode/__init__.py +0 -0
  106. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/client/typing.py +0 -0
  107. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/__init__.py +0 -0
  108. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/address.py +0 -0
  109. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/constant.py +0 -0
  110. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/context.py +0 -0
  111. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/date.py +0 -0
  112. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/differential_privacy.py +0 -0
  113. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  114. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/dp.py +0 -0
  115. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/exit_handlers.py +0 -0
  116. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/grpc.py +0 -0
  117. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/logger.py +0 -0
  118. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/message.py +0 -0
  119. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/parameter.py +0 -0
  120. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/pyproject.py +0 -0
  121. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/record/__init__.py +0 -0
  122. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/record/configsrecord.py +0 -0
  123. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/record/conversion_utils.py +0 -0
  124. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/record/metricsrecord.py +0 -0
  125. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/record/parametersrecord.py +0 -0
  126. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/record/recordset.py +0 -0
  127. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/record/typeddict.py +0 -0
  128. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/recordset_compat.py +0 -0
  129. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/retry_invoker.py +0 -0
  130. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  131. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  132. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  133. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  134. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  135. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  136. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  137. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  138. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/serde.py +0 -0
  139. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/telemetry.py +0 -0
  140. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/typing.py +0 -0
  141. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/common/version.py +0 -0
  142. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/__init__.py +0 -0
  143. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/common_pb2.py +0 -0
  144. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/common_pb2.pyi +0 -0
  145. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  146. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  147. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/driver_pb2.py +0 -0
  148. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/driver_pb2.pyi +0 -0
  149. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
  150. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
  151. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/error_pb2.py +0 -0
  152. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/error_pb2.pyi +0 -0
  153. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  154. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  155. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  156. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  157. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/fab_pb2.py +0 -0
  158. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  159. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  160. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  161. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/fleet_pb2.py +0 -0
  162. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  163. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  164. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  165. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  166. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  167. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  168. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  169. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/node_pb2.py +0 -0
  170. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/node_pb2.pyi +0 -0
  171. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  172. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  173. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/recordset_pb2.py +0 -0
  174. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  175. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  176. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  177. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/run_pb2.py +0 -0
  178. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/run_pb2.pyi +0 -0
  179. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  180. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  181. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/task_pb2.py +0 -0
  182. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/task_pb2.pyi +0 -0
  183. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  184. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  185. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/transport_pb2.py +0 -0
  186. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  187. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  188. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  189. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/py.typed +0 -0
  190. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/__init__.py +0 -0
  191. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/app.py +0 -0
  192. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/client_manager.py +0 -0
  193. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/client_proxy.py +0 -0
  194. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/compat/__init__.py +0 -0
  195. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/compat/app.py +0 -0
  196. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/compat/app_utils.py +0 -0
  197. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  198. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/compat/legacy_context.py +0 -0
  199. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/criterion.py +0 -0
  200. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/driver/__init__.py +0 -0
  201. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/driver/driver.py +0 -0
  202. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  203. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  204. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/history.py +0 -0
  205. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/server.py +0 -0
  206. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/server_app.py +0 -0
  207. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/server_config.py +0 -0
  208. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/serverapp_components.py +0 -0
  209. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/__init__.py +0 -0
  210. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/aggregate.py +0 -0
  211. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/bulyan.py +0 -0
  212. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  213. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  214. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  215. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  216. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  217. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  218. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/fedadam.py +0 -0
  219. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/fedavg.py +0 -0
  220. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  221. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  222. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  223. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/fedopt.py +0 -0
  224. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/fedprox.py +0 -0
  225. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  226. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  227. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  228. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  229. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  230. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/krum.py +0 -0
  231. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  232. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/strategy/strategy.py +0 -0
  233. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/__init__.py +0 -0
  234. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  235. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
  236. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
  237. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  238. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  239. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  240. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  241. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  242. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  243. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  244. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  245. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  246. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  247. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  248. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  249. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  250. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  251. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  252. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  253. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  254. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  255. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/state/__init__.py +0 -0
  256. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/state/in_memory_state.py +0 -0
  257. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/state/sqlite_state.py +0 -0
  258. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/state/state.py +0 -0
  259. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
  260. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/superlink/state/utils.py +0 -0
  261. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/typing.py +0 -0
  262. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/utils/__init__.py +0 -0
  263. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/utils/tensorboard.py +0 -0
  264. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/utils/validator.py +0 -0
  265. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/workflow/__init__.py +0 -0
  266. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/workflow/constant.py +0 -0
  267. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  268. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  269. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  270. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  271. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/simulation/app.py +0 -0
  272. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  273. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  274. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  275. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  276. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/superexec/__init__.py +0 -0
  277. {flwr_nightly-1.10.0.dev20240722 → flwr_nightly-1.10.0.dev20240723}/src/py/flwr/superexec/exec_grpc.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.10.0.dev20240722
3
+ Version: 1.10.0.dev20240723
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr-nightly"
7
- version = "1.10.0.dev20240722"
7
+ version = "1.10.0.dev20240723"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -77,6 +77,9 @@ def load_and_validate(
77
77
  A tuple with the optional config in case it exists and is valid
78
78
  and associated errors and warnings.
79
79
  """
80
+ if path is None:
81
+ path = Path.cwd() / "pyproject.toml"
82
+
80
83
  config = load(path)
81
84
 
82
85
  if config is None:
@@ -86,7 +89,7 @@ def load_and_validate(
86
89
  ]
87
90
  return (None, errors, [])
88
91
 
89
- is_valid, errors, warnings = validate(config, check_module)
92
+ is_valid, errors, warnings = validate(config, check_module, path.parent)
90
93
 
91
94
  if not is_valid:
92
95
  return (None, errors, warnings)
@@ -94,14 +97,8 @@ def load_and_validate(
94
97
  return (config, errors, warnings)
95
98
 
96
99
 
97
- def load(path: Optional[Path] = None) -> Optional[Dict[str, Any]]:
100
+ def load(toml_path: Path) -> Optional[Dict[str, Any]]:
98
101
  """Load pyproject.toml and return as dict."""
99
- if path is None:
100
- cur_dir = Path.cwd()
101
- toml_path = cur_dir / "pyproject.toml"
102
- else:
103
- toml_path = path
104
-
105
102
  if not toml_path.is_file():
106
103
  return None
107
104
 
@@ -167,7 +164,9 @@ def validate_fields(config: Dict[str, Any]) -> Tuple[bool, List[str], List[str]]
167
164
 
168
165
 
169
166
  def validate(
170
- config: Dict[str, Any], check_module: bool = True
167
+ config: Dict[str, Any],
168
+ check_module: bool = True,
169
+ project_dir: Optional[Union[str, Path]] = None,
171
170
  ) -> Tuple[bool, List[str], List[str]]:
172
171
  """Validate pyproject.toml."""
173
172
  is_valid, errors, warnings = validate_fields(config)
@@ -176,16 +175,15 @@ def validate(
176
175
  return False, errors, warnings
177
176
 
178
177
  # Validate serverapp
179
- is_valid, reason = object_ref.validate(
180
- config["tool"]["flwr"]["app"]["components"]["serverapp"], check_module
181
- )
178
+ serverapp_ref = config["tool"]["flwr"]["app"]["components"]["serverapp"]
179
+ is_valid, reason = object_ref.validate(serverapp_ref, check_module, project_dir)
180
+
182
181
  if not is_valid and isinstance(reason, str):
183
182
  return False, [reason], []
184
183
 
185
184
  # Validate clientapp
186
- is_valid, reason = object_ref.validate(
187
- config["tool"]["flwr"]["app"]["components"]["clientapp"], check_module
188
- )
185
+ clientapp_ref = config["tool"]["flwr"]["app"]["components"]["clientapp"]
186
+ is_valid, reason = object_ref.validate(clientapp_ref, check_module, project_dir)
189
187
 
190
188
  if not is_valid and isinstance(reason, str):
191
189
  return False, [reason], []
@@ -38,7 +38,7 @@ class MlFramework(str, Enum):
38
38
  PYTORCH = "PyTorch"
39
39
  TENSORFLOW = "TensorFlow"
40
40
  JAX = "JAX"
41
- HUGGINGFACE = "HF"
41
+ HUGGINGFACE = "HuggingFace"
42
42
  MLX = "MLX"
43
43
  SKLEARN = "sklearn"
44
44
  FLOWERTUNE = "FlowerTune"
@@ -17,10 +17,11 @@ from $import_name.task import (
17
17
 
18
18
  # Flower client
19
19
  class FlowerClient(NumPyClient):
20
- def __init__(self, net, trainloader, testloader):
20
+ def __init__(self, net, trainloader, testloader, local_epochs):
21
21
  self.net = net
22
22
  self.trainloader = trainloader
23
23
  self.testloader = testloader
24
+ self.local_epochs = local_epochs
24
25
 
25
26
  def get_parameters(self, config):
26
27
  return get_weights(self.net)
@@ -33,7 +34,7 @@ class FlowerClient(NumPyClient):
33
34
  train(
34
35
  self.net,
35
36
  self.trainloader,
36
- epochs=int(self.context.run_config["local-epochs"]),
37
+ epochs=self.local_epochs,
37
38
  )
38
39
  return self.get_parameters(config={}), len(self.trainloader), {}
39
40
 
@@ -49,12 +50,13 @@ def client_fn(context: Context):
49
50
  CHECKPOINT, num_labels=2
50
51
  ).to(DEVICE)
51
52
 
52
- partition_id = int(context.node_config["partition-id"])
53
- num_partitions = int(context.node_config["num-partitions"])
53
+ partition_id = context.node_config["partition-id"]
54
+ num_partitions = context.node_config["num-partitions"]
54
55
  trainloader, valloader = load_data(partition_id, num_partitions)
56
+ local_epochs = context.run_config["local-epochs"]
55
57
 
56
58
  # Return Client instance
57
- return FlowerClient(net, trainloader, valloader).to_client()
59
+ return FlowerClient(net, trainloader, valloader, local_epochs).to_client()
58
60
 
59
61
 
60
62
  # Flower ClientApp
@@ -19,13 +19,22 @@ from $import_name.task import (
19
19
 
20
20
  # Define Flower Client and client_fn
21
21
  class FlowerClient(NumPyClient):
22
- def __init__(self, data):
23
- num_layers = int(self.context.run_config["num-layers"])
24
- hidden_dim = int(self.context.run_config["hidden-dim"])
25
- num_classes = 10
26
- batch_size = int(self.context.run_config["batch-size"])
27
- learning_rate = float(self.context.run_config["lr"])
28
- num_epochs = int(self.context.run_config["local-epochs"])
22
+ def __init__(
23
+ self,
24
+ data,
25
+ num_layers,
26
+ hidden_dim,
27
+ num_classes,
28
+ batch_size,
29
+ learning_rate,
30
+ num_epochs,
31
+ ):
32
+ self.num_layers = num_layers
33
+ self.hidden_dim = hidden_dim
34
+ self.num_classes = num_classes
35
+ self.batch_size = batch_size
36
+ self.learning_rate = learning_rate
37
+ self.num_epochs = num_epochs
29
38
 
30
39
  self.train_images, self.train_labels, self.test_images, self.test_labels = data
31
40
  self.model = MLP(
@@ -61,12 +70,21 @@ class FlowerClient(NumPyClient):
61
70
 
62
71
 
63
72
  def client_fn(context: Context):
64
- partition_id = int(context.node_config["partition-id"])
65
- num_partitions = int(context.node_config["num-partitions"])
73
+ partition_id = context.node_config["partition-id"]
74
+ num_partitions = context.node_config["num-partitions"]
66
75
  data = load_data(partition_id, num_partitions)
67
76
 
77
+ num_layers = context.run_config["num-layers"]
78
+ hidden_dim = context.run_config["hidden-dim"]
79
+ num_classes = 10
80
+ batch_size = context.run_config["batch-size"]
81
+ learning_rate = context.run_config["lr"]
82
+ num_epochs = context.run_config["local-epochs"]
83
+
68
84
  # Return Client instance
69
- return FlowerClient(data).to_client()
85
+ return FlowerClient(
86
+ data, num_layers, hidden_dim, num_classes, batch_size, learning_rate, num_epochs
87
+ ).to_client()
70
88
 
71
89
 
72
90
  # Flower ClientApp
@@ -16,10 +16,11 @@ from $import_name.task import (
16
16
 
17
17
  # Define Flower Client and client_fn
18
18
  class FlowerClient(NumPyClient):
19
- def __init__(self, net, trainloader, valloader):
19
+ def __init__(self, net, trainloader, valloader, local_epochs):
20
20
  self.net = net
21
21
  self.trainloader = trainloader
22
22
  self.valloader = valloader
23
+ self.local_epochs = local_epochs
23
24
 
24
25
  def fit(self, parameters, config):
25
26
  set_weights(self.net, parameters)
@@ -27,7 +28,7 @@ class FlowerClient(NumPyClient):
27
28
  self.net,
28
29
  self.trainloader,
29
30
  self.valloader,
30
- int(self.context.run_config["local-epochs"]),
31
+ self.local_epochs,
31
32
  DEVICE,
32
33
  )
33
34
  return get_weights(self.net), len(self.trainloader.dataset), results
@@ -41,12 +42,13 @@ class FlowerClient(NumPyClient):
41
42
  def client_fn(context: Context):
42
43
  # Load model and data
43
44
  net = Net().to(DEVICE)
44
- partition_id = int(context.node_config["partition-id"])
45
- num_partitions = int(context.node_config["num-partitions"])
45
+ partition_id = context.node_config["partition-id"]
46
+ num_partitions = context.node_config["num-partitions"]
46
47
  trainloader, valloader = load_data(partition_id, num_partitions)
48
+ local_epochs = context.run_config["local-epochs"]
47
49
 
48
50
  # Return Client instance
49
- return FlowerClient(net, trainloader, valloader).to_client()
51
+ return FlowerClient(net, trainloader, valloader, local_epochs).to_client()
50
52
 
51
53
 
52
54
  # Flower ClientApp
@@ -69,8 +69,8 @@ class FlowerClient(NumPyClient):
69
69
 
70
70
 
71
71
  def client_fn(context: Context):
72
- partition_id = int(context.node_config["partition-id"])
73
- num_partitions = int(context.node_config["num-partitions"])
72
+ partition_id = context.node_config["partition-id"]
73
+ num_partitions = context.node_config["num-partitions"]
74
74
  fds = FederatedDataset(dataset="mnist", partitioners={"train": num_partitions})
75
75
  dataset = fds.load_partition(partition_id, "train").with_format("numpy")
76
76
 
@@ -8,12 +8,17 @@ from $import_name.task import load_data, load_model
8
8
 
9
9
  # Define Flower Client and client_fn
10
10
  class FlowerClient(NumPyClient):
11
- def __init__(self, model, x_train, y_train, x_test, y_test):
11
+ def __init__(
12
+ self, model, x_train, y_train, x_test, y_test, epochs, batch_size, verbose
13
+ ):
12
14
  self.model = model
13
15
  self.x_train = x_train
14
16
  self.y_train = y_train
15
17
  self.x_test = x_test
16
18
  self.y_test = y_test
19
+ self.epochs = epochs
20
+ self.batch_size = batch_size
21
+ self.verbose = verbose
17
22
 
18
23
  def get_parameters(self, config):
19
24
  return self.model.get_weights()
@@ -23,9 +28,9 @@ class FlowerClient(NumPyClient):
23
28
  self.model.fit(
24
29
  self.x_train,
25
30
  self.y_train,
26
- epochs=int(self.context.run_config["local-epochs"]),
27
- batch_size=int(self.context.run_config["batch-size"]),
28
- verbose=bool(self.context.run_config.get("verbose")),
31
+ epochs=self.epochs,
32
+ batch_size=self.batch_size,
33
+ verbose=self.verbose,
29
34
  )
30
35
  return self.model.get_weights(), len(self.x_train), {}
31
36
 
@@ -39,12 +44,17 @@ def client_fn(context: Context):
39
44
  # Load model and data
40
45
  net = load_model()
41
46
 
42
- partition_id = int(context.node_config["partition-id"])
43
- num_partitions = int(context.node_config["num-partitions"])
47
+ partition_id = context.node_config["partition-id"]
48
+ num_partitions = context.node_config["num-partitions"]
44
49
  x_train, y_train, x_test, y_test = load_data(partition_id, num_partitions)
50
+ epochs = context.run_config["local-epochs"]
51
+ batch_size = context.run_config["batch-size"]
52
+ verbose = context.run_config.get("verbose")
45
53
 
46
54
  # Return Client instance
47
- return FlowerClient(net, x_train, y_train, x_test, y_test).to_client()
55
+ return FlowerClient(
56
+ net, x_train, y_train, x_test, y_test, epochs, batch_size, verbose
57
+ ).to_client()
48
58
 
49
59
 
50
60
  # Flower ClientApp
@@ -9,8 +9,8 @@ from hydra import compose, initialize
9
9
  from hydra.utils import instantiate
10
10
 
11
11
  from flwr.client import ClientApp
12
- from flwr.common import ndarrays_to_parameters
13
- from flwr.server import ServerApp, ServerConfig
12
+ from flwr.common import Context, ndarrays_to_parameters
13
+ from flwr.server import ServerApp, ServerAppComponents, ServerConfig
14
14
 
15
15
  from $import_name.client_app import gen_client_fn, get_parameters
16
16
  from $import_name.dataset import get_tokenizer_and_data_collator_and_propt_formatting
@@ -67,20 +67,23 @@ init_model = get_model(cfg.model)
67
67
  init_model_parameters = get_parameters(init_model)
68
68
  init_model_parameters = ndarrays_to_parameters(init_model_parameters)
69
69
 
70
- # Instantiate strategy according to config. Here we pass other arguments
71
- # that are only defined at runtime.
72
- strategy = instantiate(
73
- cfg.strategy,
74
- on_fit_config_fn=get_on_fit_config(),
75
- fit_metrics_aggregation_fn=fit_weighted_average,
76
- initial_parameters=init_model_parameters,
77
- evaluate_fn=get_evaluate_fn(
78
- cfg.model, cfg.train.save_every_round, cfg_static.num_rounds, save_path
79
- ),
80
- )
70
+ def server_fn(context: Context):
71
+ # Instantiate strategy according to config. Here we pass other arguments
72
+ # that are only defined at runtime.
73
+ strategy = instantiate(
74
+ cfg.strategy,
75
+ on_fit_config_fn=get_on_fit_config(),
76
+ fit_metrics_aggregation_fn=fit_weighted_average,
77
+ initial_parameters=init_model_parameters,
78
+ evaluate_fn=get_evaluate_fn(
79
+ cfg.model, cfg.train.save_every_round, cfg_static.num_rounds, save_path
80
+ ),
81
+ )
82
+
83
+ config = ServerConfig(num_rounds=cfg_static.num_rounds)
84
+
85
+ return ServerAppComponents(strategy=strategy, config=config)
86
+
81
87
 
82
88
  # ServerApp for Flower Next
83
- server = ServerApp(
84
- config=ServerConfig(num_rounds=cfg_static.num_rounds),
85
- strategy=strategy,
86
- )
89
+ server = ServerApp(server_fn=server_fn)
@@ -10,6 +10,7 @@ from transformers import TrainingArguments
10
10
  from trl import SFTTrainer
11
11
 
12
12
  from flwr.client import NumPyClient
13
+ from flwr.common import Context
13
14
  from flwr.common.typing import NDArrays, Scalar
14
15
  from $import_name.dataset import reformat
15
16
  from $import_name.models import cosine_annealing, get_model
@@ -102,13 +103,14 @@ def gen_client_fn(
102
103
  model_cfg: DictConfig,
103
104
  train_cfg: DictConfig,
104
105
  save_path: str,
105
- ) -> Callable[[str], FlowerClient]: # pylint: disable=too-many-arguments
106
+ ) -> Callable[[Context], FlowerClient]: # pylint: disable=too-many-arguments
106
107
  """Generate the client function that creates the Flower Clients."""
107
108
 
108
- def client_fn(cid: str) -> FlowerClient:
109
+ def client_fn(context: Context) -> FlowerClient:
109
110
  """Create a Flower client representing a single organization."""
110
111
  # Let's get the partition corresponding to the i-th client
111
- client_trainset = fds.load_partition(int(cid), "train")
112
+ partition_id = context.node_config["partition-id"]
113
+ client_trainset = fds.load_partition(partition_id, "train")
112
114
  client_trainset = reformat(client_trainset, llm_task="$llm_challenge_str")
113
115
 
114
116
  return FlowerClient(
@@ -7,7 +7,7 @@ from flwr.server import ServerApp, ServerAppComponents, ServerConfig
7
7
 
8
8
  def server_fn(context: Context):
9
9
  # Read from config
10
- num_rounds = int(context.run_config["num-server-rounds"])
10
+ num_rounds = context.run_config["num-server-rounds"]
11
11
 
12
12
  # Define strategy
13
13
  strategy = FedAvg(
@@ -18,5 +18,6 @@ def server_fn(context: Context):
18
18
 
19
19
  return ServerAppComponents(strategy=strategy, config=config)
20
20
 
21
+
21
22
  # Create ServerApp
22
23
  app = ServerApp(server_fn=server_fn)
@@ -7,7 +7,7 @@ from flwr.server import ServerApp, ServerAppComponents, ServerConfig
7
7
 
8
8
  def server_fn(context: Context):
9
9
  # Read from config
10
- num_rounds = int(context.run_config["num-server-rounds"])
10
+ num_rounds = context.run_config["num-server-rounds"]
11
11
 
12
12
  # Define strategy
13
13
  strategy = FedAvg()
@@ -15,5 +15,6 @@ def server_fn(context: Context):
15
15
 
16
16
  return ServerAppComponents(strategy=strategy, config=config)
17
17
 
18
+
18
19
  # Create ServerApp
19
20
  app = ServerApp(server_fn=server_fn)
@@ -7,7 +7,7 @@ from flwr.server.strategy import FedAvg
7
7
 
8
8
  def server_fn(context: Context):
9
9
  # Read from config
10
- num_rounds = int(context.run_config["num-server-rounds"])
10
+ num_rounds = context.run_config["num-server-rounds"]
11
11
 
12
12
  # Define strategy
13
13
  strategy = FedAvg()
@@ -15,5 +15,6 @@ def server_fn(context: Context):
15
15
 
16
16
  return ServerAppComponents(strategy=strategy, config=config)
17
17
 
18
+
18
19
  # Create ServerApp
19
20
  app = ServerApp(server_fn=server_fn)
@@ -7,7 +7,7 @@ from flwr.server.strategy import FedAvg
7
7
 
8
8
  def server_fn(context: Context):
9
9
  # Read from config
10
- num_rounds = int(context.run_config["num-server-rounds"])
10
+ num_rounds = context.run_config["num-server-rounds"]
11
11
 
12
12
  # Define strategy
13
13
  strategy = FedAvg()
@@ -15,5 +15,6 @@ def server_fn(context: Context):
15
15
 
16
16
  return ServerAppComponents(strategy=strategy, config=config)
17
17
 
18
+
18
19
  # Create ServerApp
19
20
  app = ServerApp(server_fn=server_fn)
@@ -13,7 +13,7 @@ parameters = ndarrays_to_parameters(ndarrays)
13
13
 
14
14
  def server_fn(context: Context):
15
15
  # Read from config
16
- num_rounds = int(context.run_config["num-server-rounds"])
16
+ num_rounds = context.run_config["num-server-rounds"]
17
17
 
18
18
  # Define strategy
19
19
  strategy = FedAvg(
@@ -7,7 +7,7 @@ from flwr.server.strategy import FedAvg
7
7
 
8
8
  def server_fn(context: Context):
9
9
  # Read from config
10
- num_rounds = int(context.run_config["num-server-rounds"])
10
+ num_rounds = context.run_config["num-server-rounds"]
11
11
 
12
12
  # Define strategy
13
13
  strategy = FedAvg(
@@ -19,5 +19,6 @@ def server_fn(context: Context):
19
19
 
20
20
  return ServerAppComponents(strategy=strategy, config=config)
21
21
 
22
+
22
23
  # Create ServerApp
23
24
  app = ServerApp(server_fn=server_fn)
@@ -13,7 +13,7 @@ parameters = ndarrays_to_parameters(load_model().get_weights())
13
13
 
14
14
  def server_fn(context: Context):
15
15
  # Read from config
16
- num_rounds = int(context.run_config["num-server-rounds"])
16
+ num_rounds = context.run_config["num-server-rounds"]
17
17
 
18
18
  # Define strategy
19
19
  strategy = strategy = FedAvg(
@@ -10,15 +10,27 @@ from torch.utils.data import DataLoader
10
10
  from transformers import AutoTokenizer, DataCollatorWithPadding
11
11
 
12
12
  from flwr_datasets import FederatedDataset
13
+ from flwr_datasets.partitioner import IidPartitioner
14
+
13
15
 
14
16
  warnings.filterwarnings("ignore", category=UserWarning)
15
17
  DEVICE = torch.device("cpu")
16
18
  CHECKPOINT = "distilbert-base-uncased" # transformer model checkpoint
17
19
 
18
20
 
21
+ fds = None # Cache FederatedDataset
22
+
23
+
19
24
  def load_data(partition_id: int, num_partitions: int):
20
25
  """Load IMDB data (training and eval)"""
21
- fds = FederatedDataset(dataset="imdb", partitioners={"train": num_partitions})
26
+ # Only initialize `FederatedDataset` once
27
+ global fds
28
+ if fds is None:
29
+ partitioner = IidPartitioner(num_partitions=num_partitions)
30
+ fds = FederatedDataset(
31
+ dataset="stanfordnlp/imdb",
32
+ partitioners={"train": partitioner},
33
+ )
22
34
  partition = fds.load_partition(partition_id)
23
35
  # Divide data: 80% train, 20% test
24
36
  partition_train_test = partition.train_test_split(test_size=0.2, seed=42)
@@ -5,10 +5,12 @@ import mlx.nn as nn
5
5
  import numpy as np
6
6
  from datasets.utils.logging import disable_progress_bar
7
7
  from flwr_datasets import FederatedDataset
8
+ from flwr_datasets.partitioner import IidPartitioner
8
9
 
9
10
 
10
11
  disable_progress_bar()
11
12
 
13
+
12
14
  class MLP(nn.Module):
13
15
  """A simple MLP."""
14
16
 
@@ -43,8 +45,19 @@ def batch_iterate(batch_size, X, y):
43
45
  yield X[ids], y[ids]
44
46
 
45
47
 
48
+ fds = None # Cache FederatedDataset
49
+
50
+
46
51
  def load_data(partition_id: int, num_partitions: int):
47
- fds = FederatedDataset(dataset="mnist", partitioners={"train": num_partitions})
52
+ # Only initialize `FederatedDataset` once
53
+ global fds
54
+ if fds is None:
55
+ partitioner = IidPartitioner(num_partitions=num_partitions)
56
+ fds = FederatedDataset(
57
+ dataset="ylecun/mnist",
58
+ partitioners={"train": partitioner},
59
+ trust_remote_code=True,
60
+ )
48
61
  partition = fds.load_partition(partition_id)
49
62
  partition_splits = partition.train_test_split(test_size=0.2, seed=42)
50
63
 
@@ -6,9 +6,10 @@ import torch
6
6
  import torch.nn as nn
7
7
  import torch.nn.functional as F
8
8
  from torch.utils.data import DataLoader
9
- from torchvision.datasets import CIFAR10
10
9
  from torchvision.transforms import Compose, Normalize, ToTensor
11
10
  from flwr_datasets import FederatedDataset
11
+ from flwr_datasets.partitioner import IidPartitioner
12
+
12
13
 
13
14
  DEVICE = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
14
15
 
@@ -34,9 +35,19 @@ class Net(nn.Module):
34
35
  return self.fc3(x)
35
36
 
36
37
 
38
+ fds = None # Cache FederatedDataset
39
+
40
+
37
41
  def load_data(partition_id: int, num_partitions: int):
38
42
  """Load partition CIFAR10 data."""
39
- fds = FederatedDataset(dataset="cifar10", partitioners={"train": num_partitions})
43
+ # Only initialize `FederatedDataset` once
44
+ global fds
45
+ if fds is None:
46
+ partitioner = IidPartitioner(num_partitions=num_partitions)
47
+ fds = FederatedDataset(
48
+ dataset="uoft-cs/cifar10",
49
+ partitioners={"train": partitioner},
50
+ )
40
51
  partition = fds.load_partition(partition_id)
41
52
  # Divide data on each node: 80% train, 20% test
42
53
  partition_train_test = partition.train_test_split(test_size=0.2, seed=42)
@@ -4,11 +4,13 @@ import os
4
4
 
5
5
  import tensorflow as tf
6
6
  from flwr_datasets import FederatedDataset
7
+ from flwr_datasets.partitioner import IidPartitioner
7
8
 
8
9
 
9
10
  # Make TensorFlow log less verbose
10
11
  os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3"
11
12
 
13
+
12
14
  def load_model():
13
15
  # Load model and data (MobileNetV2, CIFAR-10)
14
16
  model = tf.keras.applications.MobileNetV2((32, 32, 3), classes=10, weights=None)
@@ -16,9 +18,19 @@ def load_model():
16
18
  return model
17
19
 
18
20
 
21
+ fds = None # Cache FederatedDataset
22
+
23
+
19
24
  def load_data(partition_id, num_partitions):
20
25
  # Download and partition dataset
21
- fds = FederatedDataset(dataset="cifar10", partitioners={"train": num_partitions})
26
+ # Only initialize `FederatedDataset` once
27
+ global fds
28
+ if fds is None:
29
+ partitioner = IidPartitioner(num_partitions=num_partitions)
30
+ fds = FederatedDataset(
31
+ dataset="uoft-cs/cifar10",
32
+ partitioners={"train": partitioner},
33
+ )
22
34
  partition = fds.load_partition(partition_id, "train")
23
35
  partition.set_format("numpy")
24
36
 
@@ -30,7 +30,7 @@ serverapp = "$import_name.app:server"
30
30
  clientapp = "$import_name.app:client"
31
31
 
32
32
  [tool.flwr.app.config]
33
- num-server-rounds = "3"
33
+ num-server-rounds = 3
34
34
 
35
35
  [tool.flwr.federations]
36
36
  default = "localhost"
@@ -28,8 +28,8 @@ serverapp = "$import_name.server_app:app"
28
28
  clientapp = "$import_name.client_app:app"
29
29
 
30
30
  [tool.flwr.app.config]
31
- num-server-rounds = "3"
32
- local-epochs = "1"
31
+ num-server-rounds = 3
32
+ local-epochs = 1
33
33
 
34
34
  [tool.flwr.federations]
35
35
  default = "localhost"
@@ -25,7 +25,7 @@ serverapp = "$import_name.server_app:app"
25
25
  clientapp = "$import_name.client_app:app"
26
26
 
27
27
  [tool.flwr.app.config]
28
- num-server-rounds = "3"
28
+ num-server-rounds = 3
29
29
 
30
30
  [tool.flwr.federations]
31
31
  default = "localhost"