flwr-nightly 1.11.0.dev20240815__tar.gz → 1.11.0.dev20240817__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 (294) hide show
  1. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/PKG-INFO +1 -1
  2. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/pyproject.toml +2 -2
  3. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/config_utils.py +2 -2
  4. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/run/run.py +5 -4
  5. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/app.py +97 -11
  6. {flwr_nightly-1.11.0.dev20240815/src/py/flwr/client/process → flwr_nightly-1.11.0.dev20240817/src/py/flwr/client/clientapp}/__init__.py +7 -0
  7. flwr_nightly-1.11.0.dev20240817/src/py/flwr/client/clientapp/app.py +178 -0
  8. flwr_nightly-1.11.0.dev20240817/src/py/flwr/client/clientapp/clientappio_servicer.py +238 -0
  9. flwr_nightly-1.11.0.dev20240817/src/py/flwr/client/clientapp/utils.py +108 -0
  10. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/grpc_rere_client/connection.py +8 -1
  11. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/rest_client/connection.py +14 -2
  12. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/supernode/__init__.py +0 -2
  13. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/supernode/app.py +21 -120
  14. flwr_nightly-1.11.0.dev20240817/src/py/flwr/proto/clientappio_pb2.py +45 -0
  15. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/clientappio_pb2.pyi +17 -0
  16. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/clientappio_pb2_grpc.py +34 -0
  17. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +13 -0
  18. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/app.py +3 -0
  19. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/run_serverapp.py +18 -2
  20. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/server.py +3 -1
  21. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/driver/driver_servicer.py +23 -8
  22. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/ffs/disk_ffs.py +6 -3
  23. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/ffs/ffs.py +3 -3
  24. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +9 -3
  25. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +16 -1
  26. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +2 -2
  27. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/workflow/default_workflows.py +3 -1
  28. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/superexec/deployment.py +8 -9
  29. flwr_nightly-1.11.0.dev20240815/src/py/flwr/client/process/clientappio_servicer.py +0 -145
  30. flwr_nightly-1.11.0.dev20240815/src/py/flwr/proto/clientappio_pb2.py +0 -41
  31. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/LICENSE +0 -0
  32. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/README.md +0 -0
  33. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/__init__.py +0 -0
  34. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/__init__.py +0 -0
  35. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/app.py +0 -0
  36. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/build.py +0 -0
  37. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/example.py +0 -0
  38. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/install.py +0 -0
  39. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/__init__.py +0 -0
  40. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/new.py +0 -0
  41. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  42. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  43. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  44. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  45. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  46. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  47. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  48. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  49. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  50. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  51. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  52. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  53. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  54. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  55. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  56. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/flwr_tune/app.py.tpl +0 -0
  57. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client.py.tpl +0 -0
  58. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/flwr_tune/config.yaml.tpl +0 -0
  59. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  60. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  61. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server.py.tpl +0 -0
  62. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/flwr_tune/static_config.yaml.tpl +0 -0
  63. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  64. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  65. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  66. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  67. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  68. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  69. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  70. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  71. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  72. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  73. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  74. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  75. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  76. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  77. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  78. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  79. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  80. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  81. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  82. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  83. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/run/__init__.py +0 -0
  84. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/cli/utils.py +0 -0
  85. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/__init__.py +0 -0
  86. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/client.py +0 -0
  87. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/client_app.py +0 -0
  88. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  89. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  90. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  91. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  92. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/grpc_client/connection.py +0 -0
  93. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  94. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  95. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  96. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/heartbeat.py +0 -0
  97. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/message_handler/__init__.py +0 -0
  98. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  99. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  100. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/mod/__init__.py +0 -0
  101. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  102. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/mod/comms_mods.py +0 -0
  103. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  104. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  105. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  106. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  107. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/mod/utils.py +0 -0
  108. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/node_state.py +0 -0
  109. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/node_state_tests.py +0 -0
  110. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/numpy_client.py +0 -0
  111. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/rest_client/__init__.py +0 -0
  112. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/client/typing.py +0 -0
  113. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/__init__.py +0 -0
  114. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/address.py +0 -0
  115. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/config.py +0 -0
  116. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/constant.py +0 -0
  117. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/context.py +0 -0
  118. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/date.py +0 -0
  119. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/differential_privacy.py +0 -0
  120. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  121. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/dp.py +0 -0
  122. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/exit_handlers.py +0 -0
  123. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/grpc.py +0 -0
  124. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/logger.py +0 -0
  125. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/message.py +0 -0
  126. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/object_ref.py +0 -0
  127. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/parameter.py +0 -0
  128. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/pyproject.py +0 -0
  129. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/record/__init__.py +0 -0
  130. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/record/configsrecord.py +0 -0
  131. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/record/conversion_utils.py +0 -0
  132. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/record/metricsrecord.py +0 -0
  133. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/record/parametersrecord.py +0 -0
  134. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/record/recordset.py +0 -0
  135. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/record/typeddict.py +0 -0
  136. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/recordset_compat.py +0 -0
  137. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/retry_invoker.py +0 -0
  138. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  139. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  140. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  141. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  142. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  143. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  144. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  145. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  146. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/serde.py +0 -0
  147. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/telemetry.py +0 -0
  148. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/typing.py +0 -0
  149. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/common/version.py +0 -0
  150. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/__init__.py +0 -0
  151. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/common_pb2.py +0 -0
  152. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/common_pb2.pyi +0 -0
  153. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  154. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  155. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/driver_pb2.py +0 -0
  156. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/driver_pb2.pyi +0 -0
  157. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
  158. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
  159. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/error_pb2.py +0 -0
  160. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/error_pb2.pyi +0 -0
  161. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  162. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  163. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/exec_pb2.py +0 -0
  164. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  165. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  166. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  167. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/fab_pb2.py +0 -0
  168. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  169. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  170. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  171. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/fleet_pb2.py +0 -0
  172. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  173. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  174. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  175. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  176. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  177. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  178. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  179. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/message_pb2.py +0 -0
  180. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/message_pb2.pyi +0 -0
  181. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  182. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  183. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/node_pb2.py +0 -0
  184. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/node_pb2.pyi +0 -0
  185. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  186. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  187. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/recordset_pb2.py +0 -0
  188. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  189. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  190. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  191. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/run_pb2.py +0 -0
  192. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/run_pb2.pyi +0 -0
  193. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  194. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  195. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/task_pb2.py +0 -0
  196. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/task_pb2.pyi +0 -0
  197. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  198. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  199. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/transport_pb2.py +0 -0
  200. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  201. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  202. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  203. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/py.typed +0 -0
  204. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/__init__.py +0 -0
  205. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/client_manager.py +0 -0
  206. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/client_proxy.py +0 -0
  207. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/compat/__init__.py +0 -0
  208. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/compat/app.py +0 -0
  209. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/compat/app_utils.py +0 -0
  210. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  211. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/compat/legacy_context.py +0 -0
  212. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/criterion.py +0 -0
  213. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/driver/__init__.py +0 -0
  214. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/driver/driver.py +0 -0
  215. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  216. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  217. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/history.py +0 -0
  218. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/server_app.py +0 -0
  219. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/server_config.py +0 -0
  220. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/serverapp_components.py +0 -0
  221. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/__init__.py +0 -0
  222. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/aggregate.py +0 -0
  223. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/bulyan.py +0 -0
  224. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  225. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  226. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  227. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  228. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  229. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  230. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/fedadam.py +0 -0
  231. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/fedavg.py +0 -0
  232. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  233. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  234. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  235. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/fedopt.py +0 -0
  236. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/fedprox.py +0 -0
  237. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  238. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  239. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  240. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  241. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  242. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/krum.py +0 -0
  243. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  244. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/strategy/strategy.py +0 -0
  245. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/__init__.py +0 -0
  246. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  247. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
  248. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  249. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  250. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  251. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  252. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  253. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  254. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  255. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  256. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  257. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  258. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  259. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  260. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  261. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  262. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  263. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  264. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  265. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  266. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  267. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/state/__init__.py +0 -0
  268. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/state/in_memory_state.py +0 -0
  269. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/state/sqlite_state.py +0 -0
  270. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/state/state.py +0 -0
  271. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
  272. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/superlink/state/utils.py +0 -0
  273. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/typing.py +0 -0
  274. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/utils/__init__.py +0 -0
  275. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/utils/tensorboard.py +0 -0
  276. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/utils/validator.py +0 -0
  277. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/workflow/__init__.py +0 -0
  278. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/workflow/constant.py +0 -0
  279. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  280. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  281. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  282. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/simulation/__init__.py +0 -0
  283. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/simulation/app.py +0 -0
  284. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  285. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  286. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  287. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  288. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/simulation/run_simulation.py +0 -0
  289. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/superexec/__init__.py +0 -0
  290. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/superexec/app.py +0 -0
  291. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/superexec/exec_grpc.py +0 -0
  292. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/superexec/exec_servicer.py +0 -0
  293. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/superexec/executor.py +0 -0
  294. {flwr_nightly-1.11.0.dev20240815 → flwr_nightly-1.11.0.dev20240817}/src/py/flwr/superexec/simulation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.11.0.dev20240815
3
+ Version: 1.11.0.dev20240817
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.11.0.dev20240815"
7
+ version = "1.11.0.dev20240817"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -59,7 +59,7 @@ flower-supernode = "flwr.client:run_supernode"
59
59
  flower-client-app = "flwr.client:run_client_app"
60
60
  flower-server-app = "flwr.server:run_server_app"
61
61
  flower-simulation = "flwr.simulation.run_simulation:run_simulation_from_cli"
62
- flwr-clientapp = "flwr.client.supernode:flwr_clientapp"
62
+ flwr-clientapp = "flwr.client.clientapp:flwr_clientapp"
63
63
 
64
64
  [tool.poetry.dependencies]
65
65
  python = "^3.8"
@@ -74,13 +74,13 @@ def get_fab_metadata(fab_file: Union[Path, bytes]) -> Tuple[str, str]:
74
74
  Returns
75
75
  -------
76
76
  Tuple[str, str]
77
- The `fab_version` and `fab_id` of the given Flower App Bundle.
77
+ The `fab_id` and `fab_version` of the given Flower App Bundle.
78
78
  """
79
79
  conf = get_fab_config(fab_file)
80
80
 
81
81
  return (
82
- conf["project"]["version"],
83
82
  f"{conf['tool']['flwr']['app']['publisher']}/{conf['project']['name']}",
83
+ conf["project"]["version"],
84
84
  )
85
85
 
86
86
 
@@ -35,6 +35,11 @@ from flwr.proto.exec_pb2 import StartRunRequest # pylint: disable=E0611
35
35
  from flwr.proto.exec_pb2_grpc import ExecStub
36
36
 
37
37
 
38
+ def on_channel_state_change(channel_connectivity: str) -> None:
39
+ """Log channel connectivity."""
40
+ log(DEBUG, channel_connectivity)
41
+
42
+
38
43
  # pylint: disable-next=too-many-locals
39
44
  def run(
40
45
  app: Annotated[
@@ -122,10 +127,6 @@ def _run_with_superexec(
122
127
  config_overrides: Optional[List[str]],
123
128
  ) -> None:
124
129
 
125
- def on_channel_state_change(channel_connectivity: str) -> None:
126
- """Log channel connectivity."""
127
- log(DEBUG, channel_connectivity)
128
-
129
130
  insecure_str = federation_config.get("insecure")
130
131
  if root_certificates := federation_config.get("root-certificates"):
131
132
  root_certificates_bytes = Path(root_certificates).read_bytes()
@@ -15,6 +15,7 @@
15
15
  """Flower client app."""
16
16
 
17
17
  import signal
18
+ import subprocess
18
19
  import sys
19
20
  import time
20
21
  from dataclasses import dataclass
@@ -22,9 +23,12 @@ from logging import ERROR, INFO, WARN
22
23
  from pathlib import Path
23
24
  from typing import Callable, ContextManager, Dict, Optional, Tuple, Type, Union
24
25
 
26
+ import grpc
25
27
  from cryptography.hazmat.primitives.asymmetric import ec
26
28
  from grpc import RpcError
27
29
 
30
+ from flwr.cli.config_utils import get_fab_metadata
31
+ from flwr.cli.install import install_from_fab
28
32
  from flwr.client.client import Client
29
33
  from flwr.client.client_app import ClientApp, LoadClientAppError
30
34
  from flwr.client.typing import ClientFnExt
@@ -32,6 +36,7 @@ from flwr.common import GRPC_MAX_MESSAGE_LENGTH, Context, EventType, Message, ev
32
36
  from flwr.common.address import parse_address
33
37
  from flwr.common.constant import (
34
38
  MISSING_EXTRA_REST,
39
+ RUN_ID_NUM_BYTES,
35
40
  TRANSPORT_TYPE_GRPC_ADAPTER,
36
41
  TRANSPORT_TYPE_GRPC_BIDI,
37
42
  TRANSPORT_TYPE_GRPC_RERE,
@@ -43,7 +48,11 @@ from flwr.common.logger import log, warn_deprecated_feature
43
48
  from flwr.common.message import Error
44
49
  from flwr.common.retry_invoker import RetryInvoker, RetryState, exponential
45
50
  from flwr.common.typing import Fab, Run, UserConfig
51
+ from flwr.proto.clientappio_pb2_grpc import add_ClientAppIoServicer_to_server
52
+ from flwr.server.superlink.fleet.grpc_bidi.grpc_server import generic_create_grpc_server
53
+ from flwr.server.superlink.state.utils import generate_rand_int_from_bytes
46
54
 
55
+ from .clientapp.clientappio_servicer import ClientAppIoInputs, ClientAppIoServicer
47
56
  from .grpc_adapter_client.connection import grpc_adapter
48
57
  from .grpc_client.connection import grpc_connection
49
58
  from .grpc_rere_client.connection import grpc_request_response
@@ -51,6 +60,8 @@ from .message_handler.message_handler import handle_control_message
51
60
  from .node_state import NodeState
52
61
  from .numpy_client import NumPyClient
53
62
 
63
+ ADDRESS_CLIENTAPPIO_API_GRPC_RERE = "0.0.0.0:9094"
64
+
54
65
 
55
66
  def _check_actionable_client(
56
67
  client: Optional[Client], client_fn: Optional[ClientFnExt]
@@ -158,7 +169,7 @@ def start_client(
158
169
  >>> )
159
170
  """
160
171
  event(EventType.START_CLIENT_ENTER)
161
- _start_client_internal(
172
+ start_client_internal(
162
173
  server_address=server_address,
163
174
  node_config={},
164
175
  load_client_app_fn=None,
@@ -179,7 +190,7 @@ def start_client(
179
190
  # pylint: disable=too-many-branches
180
191
  # pylint: disable=too-many-locals
181
192
  # pylint: disable=too-many-statements
182
- def _start_client_internal(
193
+ def start_client_internal(
183
194
  *,
184
195
  server_address: str,
185
196
  node_config: UserConfig,
@@ -196,6 +207,8 @@ def _start_client_internal(
196
207
  max_retries: Optional[int] = None,
197
208
  max_wait_time: Optional[float] = None,
198
209
  flwr_path: Optional[Path] = None,
210
+ isolate: Optional[bool] = False,
211
+ supernode_address: Optional[str] = ADDRESS_CLIENTAPPIO_API_GRPC_RERE,
199
212
  ) -> None:
200
213
  """Start a Flower client node which connects to a Flower server.
201
214
 
@@ -243,6 +256,13 @@ def _start_client_internal(
243
256
  If set to None, there is no limit to the total time.
244
257
  flwr_path: Optional[Path] (default: None)
245
258
  The fully resolved path containing installed Flower Apps.
259
+ isolate : Optional[bool] (default: False)
260
+ Whether to run `ClientApp` in a separate process. By default, this value is
261
+ `False`, and the `ClientApp` runs in the same process as the SuperNode. If
262
+ `True`, the `ClientApp` runs in an isolated process and communicates using
263
+ gRPC at the address `supernode_address`.
264
+ supernode_address : Optional[str] (default: `ADDRESS_CLIENTAPPIO_API_GRPC_RERE`)
265
+ The SuperNode gRPC server address.
246
266
  """
247
267
  if insecure is None:
248
268
  insecure = root_certificates is None
@@ -268,6 +288,13 @@ def _start_client_internal(
268
288
 
269
289
  load_client_app_fn = _load_client_app
270
290
 
291
+ if isolate:
292
+ if supernode_address is None:
293
+ raise ValueError("`supernode_address` required when `isolate` is set")
294
+ _clientappio_grpc_server, clientappio_servicer = run_clientappio_api_grpc(
295
+ address=supernode_address
296
+ )
297
+
271
298
  # At this point, only `load_client_app_fn` should be used
272
299
  # Both `client` and `client_fn` must not be used directly
273
300
 
@@ -333,7 +360,7 @@ def _start_client_internal(
333
360
  root_certificates,
334
361
  authentication_keys,
335
362
  ) as conn:
336
- receive, send, create_node, delete_node, get_run, _ = conn
363
+ receive, send, create_node, delete_node, get_run, get_fab = conn
337
364
 
338
365
  # Register node when connecting the first time
339
366
  if node_state is None:
@@ -400,9 +427,20 @@ def _start_client_internal(
400
427
  else:
401
428
  runs[run_id] = Run(run_id, "", "", "", {})
402
429
 
430
+ run: Run = runs[run_id]
431
+ if get_fab is not None and run.fab_hash:
432
+ fab = get_fab(run.fab_hash)
433
+ install_from_fab(fab.content, flwr_path, True)
434
+ fab_id, fab_version = get_fab_metadata(fab.content)
435
+ else:
436
+ fab = None
437
+ fab_id, fab_version = run.fab_id, run.fab_version
438
+
439
+ run.fab_id, run.fab_version = fab_id, fab_version
440
+
403
441
  # Register context for this run
404
442
  node_state.register_context(
405
- run_id=run_id, run=runs[run_id], flwr_path=flwr_path
443
+ run_id=run_id, run=run, flwr_path=flwr_path
406
444
  )
407
445
 
408
446
  # Retrieve context for this run
@@ -416,14 +454,45 @@ def _start_client_internal(
416
454
 
417
455
  # Handle app loading and task message
418
456
  try:
419
- # Load ClientApp instance
420
- run: Run = runs[run_id]
421
- client_app: ClientApp = load_client_app_fn(
422
- run.fab_id, run.fab_version
423
- )
457
+ if isolate and supernode_address is not None:
458
+ # Generate SuperNode token
459
+ token: int = generate_rand_int_from_bytes(RUN_ID_NUM_BYTES)
460
+
461
+ # Share Message and Context with servicer
462
+ clientappio_servicer.set_inputs(
463
+ clientapp_input=ClientAppIoInputs(
464
+ message=message,
465
+ context=context,
466
+ run=run,
467
+ token=token,
468
+ ),
469
+ token_returned=True,
470
+ )
424
471
 
425
- # Execute ClientApp
426
- reply_message = client_app(message=message, context=context)
472
+ # Run `ClientApp` in subprocess
473
+ command = [
474
+ "flwr-clientapp",
475
+ "--supernode",
476
+ supernode_address,
477
+ "--token",
478
+ str(token),
479
+ ]
480
+ subprocess.run(
481
+ command,
482
+ stdout=None,
483
+ stderr=None,
484
+ check=True,
485
+ )
486
+ outputs = clientappio_servicer.get_outputs()
487
+ reply_message, context = outputs.message, outputs.context
488
+ else:
489
+ # Load ClientApp instance
490
+ client_app: ClientApp = load_client_app_fn(
491
+ fab_id, fab_version
492
+ )
493
+
494
+ # Execute ClientApp
495
+ reply_message = client_app(message=message, context=context)
427
496
  except Exception as ex: # pylint: disable=broad-exception-caught
428
497
 
429
498
  # Legacy grpc-bidi
@@ -667,3 +736,20 @@ class _AppStateTracker:
667
736
 
668
737
  signal.signal(signal.SIGINT, signal_handler)
669
738
  signal.signal(signal.SIGTERM, signal_handler)
739
+
740
+
741
+ def run_clientappio_api_grpc(address: str) -> Tuple[grpc.Server, ClientAppIoServicer]:
742
+ """Run ClientAppIo API gRPC server."""
743
+ clientappio_servicer: grpc.Server = ClientAppIoServicer()
744
+ clientappio_add_servicer_to_server_fn = add_ClientAppIoServicer_to_server
745
+ clientappio_grpc_server = generic_create_grpc_server(
746
+ servicer_and_add_fn=(
747
+ clientappio_servicer,
748
+ clientappio_add_servicer_to_server_fn,
749
+ ),
750
+ server_address=address,
751
+ max_message_length=GRPC_MAX_MESSAGE_LENGTH,
752
+ )
753
+ log(INFO, "Starting Flower ClientAppIo gRPC server on %s", address)
754
+ clientappio_grpc_server.start()
755
+ return clientappio_grpc_server, clientappio_servicer
@@ -13,3 +13,10 @@
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
15
  """Flower AppIO service."""
16
+
17
+
18
+ from .app import flwr_clientapp as flwr_clientapp
19
+
20
+ __all__ = [
21
+ "flwr_clientapp",
22
+ ]
@@ -0,0 +1,178 @@
1
+ # Copyright 2024 Flower Labs GmbH. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # ==============================================================================
15
+ """Flower ClientApp process."""
16
+
17
+ import argparse
18
+ from logging import DEBUG, ERROR, INFO
19
+ from typing import Optional, Tuple
20
+
21
+ import grpc
22
+
23
+ from flwr.client.client_app import ClientApp, LoadClientAppError
24
+ from flwr.common import Context, Message
25
+ from flwr.common.constant import ErrorCode
26
+ from flwr.common.grpc import create_channel
27
+ from flwr.common.logger import log
28
+ from flwr.common.message import Error
29
+ from flwr.common.serde import (
30
+ context_from_proto,
31
+ context_to_proto,
32
+ message_from_proto,
33
+ message_to_proto,
34
+ run_from_proto,
35
+ )
36
+ from flwr.common.typing import Run
37
+
38
+ # pylint: disable=E0611
39
+ from flwr.proto.clientappio_pb2 import (
40
+ GetTokenRequest,
41
+ GetTokenResponse,
42
+ PullClientAppInputsRequest,
43
+ PullClientAppInputsResponse,
44
+ PushClientAppOutputsRequest,
45
+ PushClientAppOutputsResponse,
46
+ )
47
+ from flwr.proto.clientappio_pb2_grpc import ClientAppIoStub
48
+
49
+ from .utils import get_load_client_app_fn
50
+
51
+
52
+ def flwr_clientapp() -> None:
53
+ """Run process-isolated Flower ClientApp."""
54
+ log(INFO, "Starting Flower ClientApp")
55
+
56
+ parser = argparse.ArgumentParser(
57
+ description="Run a Flower ClientApp",
58
+ )
59
+ parser.add_argument(
60
+ "--supernode",
61
+ help="Address of SuperNode ClientAppIo gRPC servicer",
62
+ )
63
+ parser.add_argument(
64
+ "--token",
65
+ help="Unique token generated by SuperNode for each ClientApp execution",
66
+ )
67
+ args = parser.parse_args()
68
+ log(
69
+ DEBUG,
70
+ "Staring isolated `ClientApp` connected to SuperNode ClientAppIo at %s "
71
+ "with the token %s",
72
+ args.supernode,
73
+ args.token,
74
+ )
75
+ run_clientapp(supernode=args.supernode, token=int(args.token))
76
+
77
+
78
+ def on_channel_state_change(channel_connectivity: str) -> None:
79
+ """Log channel connectivity."""
80
+ log(DEBUG, channel_connectivity)
81
+
82
+
83
+ def run_clientapp( # pylint: disable=R0914
84
+ supernode: str,
85
+ token: int,
86
+ ) -> None:
87
+ """Run Flower ClientApp process.
88
+
89
+ Parameters
90
+ ----------
91
+ supernode : str
92
+ Address of SuperNode
93
+ token : int
94
+ Unique SuperNode token for ClientApp-SuperNode authentication
95
+ """
96
+ channel = create_channel(
97
+ server_address=supernode,
98
+ insecure=True,
99
+ )
100
+ channel.subscribe(on_channel_state_change)
101
+
102
+ try:
103
+ stub = ClientAppIoStub(channel)
104
+
105
+ # Pull Message, Context, and Run from SuperNode
106
+ message, context, run = pull_message(stub=stub, token=token)
107
+
108
+ load_client_app_fn = get_load_client_app_fn(
109
+ default_app_ref="",
110
+ app_path=None,
111
+ multi_app=True,
112
+ flwr_dir=None,
113
+ )
114
+
115
+ try:
116
+ # Load ClientApp
117
+ client_app: ClientApp = load_client_app_fn(run.fab_id, run.fab_version)
118
+
119
+ # Execute ClientApp
120
+ reply_message = client_app(message=message, context=context)
121
+ except Exception as ex: # pylint: disable=broad-exception-caught
122
+ # Don't update/change NodeState
123
+
124
+ e_code = ErrorCode.CLIENT_APP_RAISED_EXCEPTION
125
+ # Ex fmt: "<class 'ZeroDivisionError'>:<'division by zero'>"
126
+ reason = str(type(ex)) + ":<'" + str(ex) + "'>"
127
+ exc_entity = "ClientApp"
128
+ if isinstance(ex, LoadClientAppError):
129
+ reason = "An exception was raised when attempting to load `ClientApp`"
130
+ e_code = ErrorCode.LOAD_CLIENT_APP_EXCEPTION
131
+
132
+ log(ERROR, "%s raised an exception", exc_entity, exc_info=ex)
133
+
134
+ # Create error message
135
+ reply_message = message.create_error_reply(
136
+ error=Error(code=e_code, reason=reason)
137
+ )
138
+
139
+ # Push Message and Context to SuperNode
140
+ _ = push_message(stub=stub, token=token, message=reply_message, context=context)
141
+
142
+ except KeyboardInterrupt:
143
+ log(INFO, "Closing connection")
144
+ except grpc.RpcError as e:
145
+ log(ERROR, "GRPC error occurred: %s", str(e))
146
+ finally:
147
+ channel.close()
148
+
149
+
150
+ def get_token(stub: grpc.Channel) -> Optional[int]:
151
+ """Get a token from SuperNode."""
152
+ res: GetTokenResponse = stub.GetToken(GetTokenRequest())
153
+ return res.token
154
+
155
+
156
+ def pull_message(stub: grpc.Channel, token: int) -> Tuple[Message, Context, Run]:
157
+ """Pull message from SuperNode to ClientApp."""
158
+ res: PullClientAppInputsResponse = stub.PullClientAppInputs(
159
+ PullClientAppInputsRequest(token=token)
160
+ )
161
+ message = message_from_proto(res.message)
162
+ context = context_from_proto(res.context)
163
+ run = run_from_proto(res.run)
164
+ return message, context, run
165
+
166
+
167
+ def push_message(
168
+ stub: grpc.Channel, token: int, message: Message, context: Context
169
+ ) -> PushClientAppOutputsResponse:
170
+ """Push message to SuperNode from ClientApp."""
171
+ proto_message = message_to_proto(message)
172
+ proto_context = context_to_proto(context)
173
+ res: PushClientAppOutputsResponse = stub.PushClientAppOutputs(
174
+ PushClientAppOutputsRequest(
175
+ token=token, message=proto_message, context=proto_context
176
+ )
177
+ )
178
+ return res