flwr-nightly 1.12.0.dev20241006__tar.gz → 1.12.0.dev20241007__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 (305) hide show
  1. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/PKG-INFO +1 -1
  2. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/pyproject.toml +8 -19
  3. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/constant.py +3 -0
  4. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/message.py +32 -15
  5. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/aggregate.py +22 -8
  6. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/state/in_memory_state.py +30 -2
  7. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/state/sqlite_state.py +29 -2
  8. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/LICENSE +0 -0
  9. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/README.md +0 -0
  10. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/__init__.py +0 -0
  11. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/__init__.py +0 -0
  12. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/app.py +0 -0
  13. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/build.py +0 -0
  14. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/config_utils.py +0 -0
  15. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/example.py +0 -0
  16. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/install.py +0 -0
  17. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/log.py +0 -0
  18. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/__init__.py +0 -0
  19. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/new.py +0 -0
  20. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  21. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  22. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  23. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  24. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  25. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  26. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  27. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  28. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  29. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  30. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  31. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  32. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  33. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  34. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  35. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  36. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  37. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  38. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  39. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  40. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  41. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  42. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  43. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  44. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  45. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  46. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  47. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  48. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  49. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  50. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  51. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  52. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  53. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  54. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  55. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  56. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  57. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  58. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  59. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  60. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  61. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  62. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  63. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  64. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  65. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  66. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  67. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  68. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  69. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  70. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/run/__init__.py +0 -0
  71. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/run/run.py +0 -0
  72. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/cli/utils.py +0 -0
  73. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/__init__.py +0 -0
  74. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/app.py +0 -0
  75. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/client.py +0 -0
  76. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/client_app.py +0 -0
  77. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/clientapp/__init__.py +0 -0
  78. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/clientapp/app.py +0 -0
  79. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  80. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/clientapp/utils.py +0 -0
  81. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  82. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  83. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  84. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  85. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/grpc_client/connection.py +0 -0
  86. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  87. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  88. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  89. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  90. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/heartbeat.py +0 -0
  91. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/message_handler/__init__.py +0 -0
  92. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  93. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  94. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/mod/__init__.py +0 -0
  95. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  96. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/mod/comms_mods.py +0 -0
  97. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  98. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  99. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  100. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  101. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/mod/utils.py +0 -0
  102. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/node_state.py +0 -0
  103. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/node_state_tests.py +0 -0
  104. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/numpy_client.py +0 -0
  105. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/rest_client/__init__.py +0 -0
  106. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/rest_client/connection.py +0 -0
  107. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/supernode/__init__.py +0 -0
  108. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/supernode/app.py +0 -0
  109. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/client/typing.py +0 -0
  110. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/__init__.py +0 -0
  111. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/address.py +0 -0
  112. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/config.py +0 -0
  113. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/context.py +0 -0
  114. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/date.py +0 -0
  115. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/differential_privacy.py +0 -0
  116. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  117. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/dp.py +0 -0
  118. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/exit_handlers.py +0 -0
  119. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/grpc.py +0 -0
  120. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/logger.py +0 -0
  121. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/object_ref.py +0 -0
  122. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/parameter.py +0 -0
  123. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/pyproject.py +0 -0
  124. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/record/__init__.py +0 -0
  125. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/record/configsrecord.py +0 -0
  126. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/record/conversion_utils.py +0 -0
  127. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/record/metricsrecord.py +0 -0
  128. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/record/parametersrecord.py +0 -0
  129. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/record/recordset.py +0 -0
  130. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/record/typeddict.py +0 -0
  131. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/recordset_compat.py +0 -0
  132. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/retry_invoker.py +0 -0
  133. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  134. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  135. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  136. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  137. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  138. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  139. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  140. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  141. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/serde.py +0 -0
  142. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/telemetry.py +0 -0
  143. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/typing.py +0 -0
  144. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/common/version.py +0 -0
  145. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/__init__.py +0 -0
  146. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  147. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  148. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  149. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  150. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/common_pb2.py +0 -0
  151. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/common_pb2.pyi +0 -0
  152. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  153. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  154. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/control_pb2.py +0 -0
  155. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/control_pb2.pyi +0 -0
  156. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
  157. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  158. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/driver_pb2.py +0 -0
  159. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/driver_pb2.pyi +0 -0
  160. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
  161. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
  162. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/error_pb2.py +0 -0
  163. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/error_pb2.pyi +0 -0
  164. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  165. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  166. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/exec_pb2.py +0 -0
  167. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  168. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  169. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  170. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/fab_pb2.py +0 -0
  171. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  172. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  173. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  174. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/fleet_pb2.py +0 -0
  175. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  176. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  177. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  178. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  179. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  180. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  181. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  182. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/message_pb2.py +0 -0
  183. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/message_pb2.pyi +0 -0
  184. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  185. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  186. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/node_pb2.py +0 -0
  187. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/node_pb2.pyi +0 -0
  188. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  189. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  190. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/recordset_pb2.py +0 -0
  191. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  192. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  193. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  194. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/run_pb2.py +0 -0
  195. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/run_pb2.pyi +0 -0
  196. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  197. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  198. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/task_pb2.py +0 -0
  199. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/task_pb2.pyi +0 -0
  200. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  201. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  202. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/transport_pb2.py +0 -0
  203. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  204. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  205. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  206. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/py.typed +0 -0
  207. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/__init__.py +0 -0
  208. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/app.py +0 -0
  209. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/client_manager.py +0 -0
  210. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/client_proxy.py +0 -0
  211. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/compat/__init__.py +0 -0
  212. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/compat/app.py +0 -0
  213. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/compat/app_utils.py +0 -0
  214. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  215. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/compat/legacy_context.py +0 -0
  216. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/criterion.py +0 -0
  217. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/driver/__init__.py +0 -0
  218. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/driver/driver.py +0 -0
  219. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  220. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  221. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/history.py +0 -0
  222. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/run_serverapp.py +0 -0
  223. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/server.py +0 -0
  224. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/server_app.py +0 -0
  225. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/server_config.py +0 -0
  226. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/serverapp_components.py +0 -0
  227. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/__init__.py +0 -0
  228. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/bulyan.py +0 -0
  229. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  230. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  231. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  232. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  233. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  234. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  235. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedadam.py +0 -0
  236. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedavg.py +0 -0
  237. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  238. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  239. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  240. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedopt.py +0 -0
  241. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedprox.py +0 -0
  242. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  243. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  244. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  245. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  246. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  247. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/krum.py +0 -0
  248. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  249. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/strategy/strategy.py +0 -0
  250. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/__init__.py +0 -0
  251. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  252. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
  253. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
  254. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  255. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  256. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  257. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  258. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  259. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  260. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  261. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  262. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  263. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  264. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  265. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  266. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  267. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  268. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  269. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  270. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  271. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  272. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  273. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  274. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  275. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  276. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  277. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  278. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/state/__init__.py +0 -0
  279. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/state/state.py +0 -0
  280. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
  281. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/superlink/state/utils.py +0 -0
  282. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/typing.py +0 -0
  283. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/utils/__init__.py +0 -0
  284. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/utils/tensorboard.py +0 -0
  285. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/utils/validator.py +0 -0
  286. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/workflow/__init__.py +0 -0
  287. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/workflow/constant.py +0 -0
  288. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  289. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  290. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  291. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  292. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/simulation/__init__.py +0 -0
  293. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/simulation/app.py +0 -0
  294. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  295. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  296. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  297. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  298. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/simulation/run_simulation.py +0 -0
  299. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/superexec/__init__.py +0 -0
  300. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/superexec/app.py +0 -0
  301. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/superexec/deployment.py +0 -0
  302. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/superexec/exec_grpc.py +0 -0
  303. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/superexec/exec_servicer.py +0 -0
  304. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/src/py/flwr/superexec/executor.py +0 -0
  305. {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241007}/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.12.0.dev20241006
3
+ Version: 1.12.0.dev20241007
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.12.0.dev20241006"
7
+ version = "1.12.0.dev20241007"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -43,12 +43,8 @@ classifiers = [
43
43
  "Topic :: Software Development :: Libraries :: Python Modules",
44
44
  "Typing :: Typed",
45
45
  ]
46
- packages = [
47
- { include = "flwr", from = "src/py" },
48
- ]
49
- exclude = [
50
- "src/py/**/*_test.py",
51
- ]
46
+ packages = [{ include = "flwr", from = "src/py" }]
47
+ exclude = ["src/py/**/*_test.py"]
52
48
 
53
49
  [tool.poetry.scripts]
54
50
  # `flwr` CLI
@@ -62,7 +58,7 @@ flower-superlink = "flwr.server.app:run_superlink"
62
58
  flower-supernode = "flwr.client.supernode.app:run_supernode"
63
59
  flower-server-app = "flwr.server.run_serverapp:run_server_app"
64
60
  flwr-clientapp = "flwr.client.clientapp:flwr_clientapp"
65
- flower-client-app = "flwr.client.supernode:run_client_app" # Deprecated
61
+ flower-client-app = "flwr.client.supernode:run_client_app" # Deprecated
66
62
 
67
63
  [tool.poetry.dependencies]
68
64
  python = "^3.9"
@@ -96,6 +92,7 @@ types-setuptools = "==69.0.0.20240125"
96
92
  clang-format = "==17.0.6"
97
93
  isort = "==5.13.2"
98
94
  black = { version = "==24.2.0", extras = ["jupyter"] }
95
+ taplo = "==0.9.3"
99
96
  docformatter = "==1.7.5"
100
97
  mypy = "==1.8.0"
101
98
  pylint = "==3.0.3"
@@ -160,10 +157,7 @@ disable = "duplicate-code,too-few-public-methods,useless-import-alias"
160
157
  [tool.pytest.ini_options]
161
158
  minversion = "6.2"
162
159
  addopts = "-qq"
163
- testpaths = [
164
- "src/py/flwr",
165
- "src/py/flwr_tool",
166
- ]
160
+ testpaths = ["src/py/flwr", "src/py/flwr_tool"]
167
161
  filterwarnings = "ignore::DeprecationWarning"
168
162
 
169
163
  [tool.pytest-watcher]
@@ -176,17 +170,12 @@ patterns = ["*.py"]
176
170
  ignore_patterns = []
177
171
 
178
172
  [tool.mypy]
179
- plugins = [
180
- "numpy.typing.mypy_plugin",
181
- ]
173
+ plugins = ["numpy.typing.mypy_plugin"]
182
174
  ignore_missing_imports = true
183
175
  strict = true
184
176
 
185
177
  [[tool.mypy.overrides]]
186
- module = [
187
- "importlib.metadata.*",
188
- "importlib_metadata.*",
189
- ]
178
+ module = ["importlib.metadata.*", "importlib_metadata.*"]
190
179
  follow_imports = "skip"
191
180
  follow_imports_for_stubs = true
192
181
  disallow_untyped_calls = false
@@ -78,6 +78,9 @@ GRPC_ADAPTER_METADATA_SHOULD_EXIT_KEY = "should-exit"
78
78
  GRPC_ADAPTER_METADATA_MESSAGE_MODULE_KEY = "grpc-message-module"
79
79
  GRPC_ADAPTER_METADATA_MESSAGE_QUALNAME_KEY = "grpc-message-qualname"
80
80
 
81
+ # Message TTL
82
+ MESSAGE_TTL_TOLERANCE = 1e-1
83
+
81
84
 
82
85
  class MessageType:
83
86
  """Message type."""
@@ -17,9 +17,11 @@
17
17
  from __future__ import annotations
18
18
 
19
19
  import time
20
- import warnings
20
+ from logging import WARNING
21
21
  from typing import Optional, cast
22
22
 
23
+ from .constant import MESSAGE_TTL_TOLERANCE
24
+ from .logger import log
23
25
  from .record import RecordSet
24
26
 
25
27
  DEFAULT_TTL = 3600
@@ -289,13 +291,6 @@ class Message:
289
291
 
290
292
  ttl = msg.meta.ttl - (reply.meta.created_at - msg.meta.created_at)
291
293
  """
292
- if ttl:
293
- warnings.warn(
294
- "A custom TTL was set, but note that the SuperLink does not enforce "
295
- "the TTL yet. The SuperLink will start enforcing the TTL in a future "
296
- "version of Flower.",
297
- stacklevel=2,
298
- )
299
294
  # If no TTL passed, use default for message creation (will update after
300
295
  # message creation)
301
296
  ttl_ = DEFAULT_TTL if ttl is None else ttl
@@ -309,6 +304,8 @@ class Message:
309
304
  )
310
305
  message.metadata.ttl = ttl
311
306
 
307
+ self._limit_task_res_ttl(message)
308
+
312
309
  return message
313
310
 
314
311
  def create_reply(self, content: RecordSet, ttl: float | None = None) -> Message:
@@ -334,13 +331,6 @@ class Message:
334
331
  Message
335
332
  A new `Message` instance representing the reply.
336
333
  """
337
- if ttl:
338
- warnings.warn(
339
- "A custom TTL was set, but note that the SuperLink does not enforce "
340
- "the TTL yet. The SuperLink will start enforcing the TTL in a future "
341
- "version of Flower.",
342
- stacklevel=2,
343
- )
344
334
  # If no TTL passed, use default for message creation (will update after
345
335
  # message creation)
346
336
  ttl_ = DEFAULT_TTL if ttl is None else ttl
@@ -357,6 +347,8 @@ class Message:
357
347
  )
358
348
  message.metadata.ttl = ttl
359
349
 
350
+ self._limit_task_res_ttl(message)
351
+
360
352
  return message
361
353
 
362
354
  def __repr__(self) -> str:
@@ -370,6 +362,31 @@ class Message:
370
362
  )
371
363
  return f"{self.__class__.__qualname__}({view})"
372
364
 
365
+ def _limit_task_res_ttl(self, message: Message) -> None:
366
+ """Limit the TaskRes TTL to not exceed the expiration time of the TaskIns it
367
+ replies to.
368
+
369
+ Parameters
370
+ ----------
371
+ message : Message
372
+ The message to which the TaskRes is replying.
373
+ """
374
+ # Calculate the maximum allowed TTL
375
+ max_allowed_ttl = (
376
+ self.metadata.created_at + self.metadata.ttl - message.metadata.created_at
377
+ )
378
+
379
+ if message.metadata.ttl - max_allowed_ttl > MESSAGE_TTL_TOLERANCE:
380
+ log(
381
+ WARNING,
382
+ "The reply TTL of %.2f seconds exceeded the "
383
+ "allowed maximum of %.2f seconds. "
384
+ "The TTL has been updated to the allowed maximum.",
385
+ message.metadata.ttl,
386
+ max_allowed_ttl,
387
+ )
388
+ message.metadata.ttl = max_allowed_ttl
389
+
373
390
 
374
391
  def _create_reply_metadata(msg: Message, ttl: float) -> Metadata:
375
392
  """Construct metadata for a reply message."""
@@ -15,8 +15,8 @@
15
15
  """Aggregation functions for strategy implementations."""
16
16
  # mypy: disallow_untyped_calls=False
17
17
 
18
- from functools import reduce
19
- from typing import Any, Callable
18
+ from functools import partial, reduce
19
+ from typing import Any, Callable, Union
20
20
 
21
21
  import numpy as np
22
22
 
@@ -52,17 +52,31 @@ def aggregate_inplace(results: list[tuple[ClientProxy, FitRes]]) -> NDArrays:
52
52
  fit_res.num_examples / num_examples_total for _, fit_res in results
53
53
  ]
54
54
 
55
+ def _try_inplace(
56
+ x: NDArray, y: Union[NDArray, float], np_binary_op: np.ufunc
57
+ ) -> NDArray:
58
+ return ( # type: ignore[no-any-return]
59
+ np_binary_op(x, y, out=x)
60
+ if np.can_cast(y, x.dtype, casting="same_kind")
61
+ else np_binary_op(x, np.array(y, x.dtype), out=x)
62
+ )
63
+
55
64
  # Let's do in-place aggregation
56
65
  # Get first result, then add up each other
57
66
  params = [
58
- scaling_factors[0] * x for x in parameters_to_ndarrays(results[0][1].parameters)
67
+ _try_inplace(x, scaling_factors[0], np_binary_op=np.multiply)
68
+ for x in parameters_to_ndarrays(results[0][1].parameters)
59
69
  ]
60
- for i, (_, fit_res) in enumerate(results[1:]):
70
+
71
+ for i, (_, fit_res) in enumerate(results[1:], start=1):
61
72
  res = (
62
- scaling_factors[i + 1] * x
73
+ _try_inplace(x, scaling_factors[i], np_binary_op=np.multiply)
63
74
  for x in parameters_to_ndarrays(fit_res.parameters)
64
75
  )
65
- params = [reduce(np.add, layer_updates) for layer_updates in zip(params, res)]
76
+ params = [
77
+ reduce(partial(_try_inplace, np_binary_op=np.add), layer_updates)
78
+ for layer_updates in zip(params, res)
79
+ ]
66
80
 
67
81
  return params
68
82
 
@@ -128,7 +142,7 @@ def aggregate_bulyan(
128
142
 
129
143
  Parameters
130
144
  ----------
131
- results: List[Tuple[NDArrays, int]]
145
+ results: list[tuple[NDArrays, int]]
132
146
  Weights and number of samples for each of the client.
133
147
  num_malicious: int
134
148
  The maximum number of malicious clients.
@@ -332,7 +346,7 @@ def _aggregate_n_closest_weights(
332
346
  ----------
333
347
  reference_weights: NDArrays
334
348
  The weights from which the distances will be computed
335
- results: List[Tuple[NDArrays, int]]
349
+ results: list[tuple[NDArrays, int]]
336
350
  The weights from models
337
351
  beta_closest: int
338
352
  The number of the closest distance weights that will be averaged
@@ -17,12 +17,16 @@
17
17
 
18
18
  import threading
19
19
  import time
20
- from logging import ERROR
20
+ from logging import ERROR, WARNING
21
21
  from typing import Optional
22
22
  from uuid import UUID, uuid4
23
23
 
24
24
  from flwr.common import log, now
25
- from flwr.common.constant import NODE_ID_NUM_BYTES, RUN_ID_NUM_BYTES
25
+ from flwr.common.constant import (
26
+ MESSAGE_TTL_TOLERANCE,
27
+ NODE_ID_NUM_BYTES,
28
+ RUN_ID_NUM_BYTES,
29
+ )
26
30
  from flwr.common.typing import Run, UserConfig
27
31
  from flwr.proto.task_pb2 import TaskIns, TaskRes # pylint: disable=E0611
28
32
  from flwr.server.superlink.state.state import State
@@ -83,6 +87,7 @@ class InMemoryState(State): # pylint: disable=R0902,R0904
83
87
 
84
88
  # Find TaskIns for node_id that were not delivered yet
85
89
  task_ins_list: list[TaskIns] = []
90
+ current_time = time.time()
86
91
  with self.lock:
87
92
  for _, task_ins in self.task_ins_store.items():
88
93
  # pylint: disable=too-many-boolean-expressions
@@ -91,11 +96,13 @@ class InMemoryState(State): # pylint: disable=R0902,R0904
91
96
  and task_ins.task.consumer.anonymous is False
92
97
  and task_ins.task.consumer.node_id == node_id
93
98
  and task_ins.task.delivered_at == ""
99
+ and task_ins.task.created_at + task_ins.task.ttl > current_time
94
100
  ) or (
95
101
  node_id is None # Anonymous
96
102
  and task_ins.task.consumer.anonymous is True
97
103
  and task_ins.task.consumer.node_id == 0
98
104
  and task_ins.task.delivered_at == ""
105
+ and task_ins.task.created_at + task_ins.task.ttl > current_time
99
106
  ):
100
107
  task_ins_list.append(task_ins)
101
108
  if limit and len(task_ins_list) == limit:
@@ -134,6 +141,27 @@ class InMemoryState(State): # pylint: disable=R0902,R0904
134
141
  )
135
142
  return None
136
143
 
144
+ # Fail if the TaskRes TTL exceeds the
145
+ # expiration time of the TaskIns it replies to.
146
+ # Condition: TaskIns.created_at + TaskIns.ttl ≥
147
+ # TaskRes.created_at + TaskRes.ttl
148
+ # A small tolerance is introduced to account
149
+ # for floating-point precision issues.
150
+ max_allowed_ttl = (
151
+ task_ins.task.created_at + task_ins.task.ttl - task_res.task.created_at
152
+ )
153
+ if task_res.task.ttl and (
154
+ task_res.task.ttl - max_allowed_ttl > MESSAGE_TTL_TOLERANCE
155
+ ):
156
+ log(
157
+ WARNING,
158
+ "Received TaskRes with TTL %.2f "
159
+ "exceeding the allowed maximum TTL %.2f.",
160
+ task_res.task.ttl,
161
+ max_allowed_ttl,
162
+ )
163
+ return None
164
+
137
165
  # Validate run_id
138
166
  if task_res.run_id not in self.run_ids:
139
167
  log(ERROR, "`run_id` is invalid")
@@ -20,12 +20,16 @@ import re
20
20
  import sqlite3
21
21
  import time
22
22
  from collections.abc import Sequence
23
- from logging import DEBUG, ERROR
23
+ from logging import DEBUG, ERROR, WARNING
24
24
  from typing import Any, Optional, Union, cast
25
25
  from uuid import UUID, uuid4
26
26
 
27
27
  from flwr.common import log, now
28
- from flwr.common.constant import NODE_ID_NUM_BYTES, RUN_ID_NUM_BYTES
28
+ from flwr.common.constant import (
29
+ MESSAGE_TTL_TOLERANCE,
30
+ NODE_ID_NUM_BYTES,
31
+ RUN_ID_NUM_BYTES,
32
+ )
29
33
  from flwr.common.typing import Run, UserConfig
30
34
  from flwr.proto.node_pb2 import Node # pylint: disable=E0611
31
35
  from flwr.proto.recordset_pb2 import RecordSet # pylint: disable=E0611
@@ -295,6 +299,7 @@ class SqliteState(State): # pylint: disable=R0904
295
299
  WHERE consumer_anonymous == 1
296
300
  AND consumer_node_id == 0
297
301
  AND delivered_at = ""
302
+ AND (created_at + ttl) > CAST(strftime('%s', 'now') AS REAL)
298
303
  """
299
304
  else:
300
305
  # Convert the uint64 value to sint64 for SQLite
@@ -307,6 +312,7 @@ class SqliteState(State): # pylint: disable=R0904
307
312
  WHERE consumer_anonymous == 0
308
313
  AND consumer_node_id == :node_id
309
314
  AND delivered_at = ""
315
+ AND (created_at + ttl) > CAST(strftime('%s', 'now') AS REAL)
310
316
  """
311
317
 
312
318
  if limit is not None:
@@ -383,6 +389,27 @@ class SqliteState(State): # pylint: disable=R0904
383
389
  )
384
390
  return None
385
391
 
392
+ # Fail if the TaskRes TTL exceeds the
393
+ # expiration time of the TaskIns it replies to.
394
+ # Condition: TaskIns.created_at + TaskIns.ttl ≥
395
+ # TaskRes.created_at + TaskRes.ttl
396
+ # A small tolerance is introduced to account
397
+ # for floating-point precision issues.
398
+ max_allowed_ttl = (
399
+ task_ins["created_at"] + task_ins["ttl"] - task_res.task.created_at
400
+ )
401
+ if task_res.task.ttl and (
402
+ task_res.task.ttl - max_allowed_ttl > MESSAGE_TTL_TOLERANCE
403
+ ):
404
+ log(
405
+ WARNING,
406
+ "Received TaskRes with TTL %.2f "
407
+ "exceeding the allowed maximum TTL %.2f.",
408
+ task_res.task.ttl,
409
+ max_allowed_ttl,
410
+ )
411
+ return None
412
+
386
413
  # Store TaskRes
387
414
  task_res.task_id = str(task_id)
388
415
  data = (task_res_to_dict(task_res),)