flwr-nightly 1.14.0.dev20241218__tar.gz → 1.15.0.dev20241220__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 (327) hide show
  1. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/PKG-INFO +2 -2
  2. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/README.md +1 -1
  3. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/pyproject.toml +1 -1
  4. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +1 -1
  5. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
  6. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +1 -1
  7. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
  8. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -1
  9. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
  10. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +3 -3
  11. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
  12. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
  13. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/utils.py +56 -10
  14. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/supernode/app.py +1 -2
  15. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/telemetry.py +13 -3
  16. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/app.py +1 -0
  17. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/run_serverapp.py +8 -9
  18. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/serverapp/app.py +17 -2
  19. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +7 -0
  20. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/linkstate/linkstate.py +4 -0
  21. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +6 -0
  22. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/simulation/app.py +12 -2
  23. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/simulation/run_simulation.py +8 -1
  24. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/LICENSE +0 -0
  25. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/__init__.py +0 -0
  26. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/__init__.py +0 -0
  27. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/app.py +0 -0
  28. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/build.py +0 -0
  29. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
  30. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/config_utils.py +0 -0
  31. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/example.py +0 -0
  32. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/install.py +0 -0
  33. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/log.py +0 -0
  34. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/login/__init__.py +0 -0
  35. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/login/login.py +0 -0
  36. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/ls.py +0 -0
  37. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/__init__.py +0 -0
  38. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/new.py +0 -0
  39. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  40. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  41. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  42. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  43. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  44. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  45. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  46. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  47. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  48. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  49. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  50. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  51. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  52. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  53. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  54. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  55. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  56. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  57. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  58. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  59. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  60. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  61. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  62. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  63. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  64. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  65. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  66. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  67. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  68. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  69. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  70. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  71. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  72. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  73. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  74. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  75. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  76. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  77. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  78. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  79. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  80. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  81. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  82. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/run/__init__.py +0 -0
  83. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/run/run.py +0 -0
  84. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/cli/stop.py +0 -0
  85. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/__init__.py +0 -0
  86. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/app.py +0 -0
  87. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/client.py +0 -0
  88. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/client_app.py +0 -0
  89. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/clientapp/__init__.py +0 -0
  90. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/clientapp/app.py +0 -0
  91. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  92. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/clientapp/utils.py +0 -0
  93. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  94. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  95. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  96. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  97. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/grpc_client/connection.py +0 -0
  98. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  99. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  100. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  101. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  102. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/heartbeat.py +0 -0
  103. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/message_handler/__init__.py +0 -0
  104. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  105. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  106. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/mod/__init__.py +0 -0
  107. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  108. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/mod/comms_mods.py +0 -0
  109. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  110. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  111. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  112. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  113. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/mod/utils.py +0 -0
  114. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/nodestate/__init__.py +0 -0
  115. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
  116. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/nodestate/nodestate.py +0 -0
  117. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/nodestate/nodestate_factory.py +0 -0
  118. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/numpy_client.py +0 -0
  119. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/rest_client/__init__.py +0 -0
  120. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/rest_client/connection.py +0 -0
  121. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/run_info_store.py +0 -0
  122. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/supernode/__init__.py +0 -0
  123. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/client/typing.py +0 -0
  124. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/__init__.py +0 -0
  125. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/address.py +0 -0
  126. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/args.py +0 -0
  127. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/auth_plugin/__init__.py +0 -0
  128. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/auth_plugin/auth_plugin.py +0 -0
  129. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/config.py +0 -0
  130. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/constant.py +0 -0
  131. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/context.py +0 -0
  132. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/date.py +0 -0
  133. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/differential_privacy.py +0 -0
  134. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  135. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/dp.py +0 -0
  136. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/exit_handlers.py +0 -0
  137. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/grpc.py +0 -0
  138. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/logger.py +0 -0
  139. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/message.py +0 -0
  140. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/object_ref.py +0 -0
  141. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/parameter.py +0 -0
  142. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/pyproject.py +0 -0
  143. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/record/__init__.py +0 -0
  144. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/record/configsrecord.py +0 -0
  145. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/record/conversion_utils.py +0 -0
  146. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/record/metricsrecord.py +0 -0
  147. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/record/parametersrecord.py +0 -0
  148. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/record/recordset.py +0 -0
  149. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/record/typeddict.py +0 -0
  150. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/recordset_compat.py +0 -0
  151. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/retry_invoker.py +0 -0
  152. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  153. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  154. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  155. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  156. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  157. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  158. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  159. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  160. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/serde.py +0 -0
  161. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/typing.py +0 -0
  162. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/common/version.py +0 -0
  163. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/__init__.py +0 -0
  164. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  165. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  166. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  167. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  168. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/error_pb2.py +0 -0
  169. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/error_pb2.pyi +0 -0
  170. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  171. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  172. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/exec_pb2.py +0 -0
  173. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  174. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  175. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  176. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/fab_pb2.py +0 -0
  177. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  178. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  179. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  180. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/fleet_pb2.py +0 -0
  181. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  182. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  183. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  184. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  185. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  186. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  187. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  188. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/log_pb2.py +0 -0
  189. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/log_pb2.pyi +0 -0
  190. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
  191. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  192. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/message_pb2.py +0 -0
  193. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/message_pb2.pyi +0 -0
  194. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  195. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  196. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/node_pb2.py +0 -0
  197. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/node_pb2.pyi +0 -0
  198. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  199. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  200. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/recordset_pb2.py +0 -0
  201. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  202. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  203. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  204. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/run_pb2.py +0 -0
  205. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/run_pb2.pyi +0 -0
  206. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  207. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  208. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/serverappio_pb2.py +0 -0
  209. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
  210. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  211. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  212. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/simulationio_pb2.py +0 -0
  213. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
  214. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  215. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  216. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/task_pb2.py +0 -0
  217. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/task_pb2.pyi +0 -0
  218. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  219. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  220. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/transport_pb2.py +0 -0
  221. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  222. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  223. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  224. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/py.typed +0 -0
  225. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/__init__.py +0 -0
  226. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/client_manager.py +0 -0
  227. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/client_proxy.py +0 -0
  228. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/compat/__init__.py +0 -0
  229. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/compat/app.py +0 -0
  230. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/compat/app_utils.py +0 -0
  231. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  232. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/compat/legacy_context.py +0 -0
  233. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/criterion.py +0 -0
  234. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/driver/__init__.py +0 -0
  235. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/driver/driver.py +0 -0
  236. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  237. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  238. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/history.py +0 -0
  239. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/server.py +0 -0
  240. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/server_app.py +0 -0
  241. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/server_config.py +0 -0
  242. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/serverapp/__init__.py +0 -0
  243. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/serverapp_components.py +0 -0
  244. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/__init__.py +0 -0
  245. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/aggregate.py +0 -0
  246. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/bulyan.py +0 -0
  247. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  248. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  249. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  250. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  251. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  252. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  253. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/fedadam.py +0 -0
  254. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/fedavg.py +0 -0
  255. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  256. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  257. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  258. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/fedopt.py +0 -0
  259. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/fedprox.py +0 -0
  260. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  261. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  262. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  263. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  264. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  265. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/krum.py +0 -0
  266. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  267. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/strategy/strategy.py +0 -0
  268. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/__init__.py +0 -0
  269. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  270. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +0 -0
  271. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +0 -0
  272. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  273. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  274. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  275. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  276. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  277. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  278. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  279. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  280. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  281. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  282. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  283. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  284. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  285. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  286. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  287. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  288. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  289. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  290. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  291. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  292. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  293. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  294. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  295. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  296. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  297. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  298. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/linkstate/utils.py +0 -0
  299. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
  300. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  301. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  302. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/superlink/utils.py +0 -0
  303. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/typing.py +0 -0
  304. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/utils/__init__.py +0 -0
  305. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/utils/tensorboard.py +0 -0
  306. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/utils/validator.py +0 -0
  307. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/workflow/__init__.py +0 -0
  308. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/workflow/constant.py +0 -0
  309. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  310. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  311. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  312. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  313. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/simulation/__init__.py +0 -0
  314. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/simulation/legacy_app.py +0 -0
  315. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  316. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  317. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  318. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  319. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/simulation/simulationio_connection.py +0 -0
  320. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/superexec/__init__.py +0 -0
  321. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/superexec/app.py +0 -0
  322. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/superexec/deployment.py +0 -0
  323. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/superexec/exec_grpc.py +0 -0
  324. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/superexec/exec_servicer.py +0 -0
  325. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/superexec/exec_user_auth_interceptor.py +0 -0
  326. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/src/py/flwr/superexec/executor.py +0 -0
  327. {flwr_nightly-1.14.0.dev20241218 → flwr_nightly-1.15.0.dev20241220}/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.14.0.dev20241218
3
+ Version: 1.15.0.dev20241220
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -118,7 +118,7 @@ Flower's goal is to make federated learning accessible to everyone. This series
118
118
 
119
119
  4. **Custom Clients for Federated Learning**
120
120
 
121
- [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adap/flower/blob/main/doc/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb))
121
+ [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb))
122
122
 
123
123
  Stay tuned, more tutorials are coming soon. Topics include **Privacy and Security in Federated Learning**, and **Scaling Federated Learning**.
124
124
 
@@ -64,7 +64,7 @@ Flower's goal is to make federated learning accessible to everyone. This series
64
64
 
65
65
  4. **Custom Clients for Federated Learning**
66
66
 
67
- [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adap/flower/blob/main/doc/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb))
67
+ [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb))
68
68
 
69
69
  Stay tuned, more tutorials are coming soon. Topics include **Privacy and Security in Federated Learning**, and **Scaling Federated Learning**.
70
70
 
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr-nightly"
7
- version = "1.14.0.dev20241218"
7
+ version = "1.15.0.dev20241220"
8
8
  description = "Flower: A Friendly Federated AI Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "flwr-datasets[vision]>=0.3.0",
13
13
  "torch==2.2.1",
14
14
  "torchvision==0.17.1",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "flwr-datasets>=0.3.0",
13
13
  "torch==2.3.1",
14
14
  "trl==0.8.1",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "flwr-datasets>=0.3.0",
13
13
  "torch==2.2.1",
14
14
  "transformers>=4.30.0,<5.0",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "jax==0.4.30",
13
13
  "jaxlib==0.4.30",
14
14
  "scikit-learn==1.3.2",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "flwr-datasets[vision]>=0.3.0",
13
13
  "mlx==0.21.1",
14
14
  ]
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "numpy>=1.21.0",
13
13
  ]
14
14
 
@@ -8,10 +8,10 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "flwr-datasets[vision]>=0.3.0",
13
- "torch==2.2.1",
14
- "torchvision==0.17.1",
13
+ "torch==2.5.1",
14
+ "torchvision==0.20.1",
15
15
  ]
16
16
 
17
17
  [tool.hatch.build.targets.wheel]
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "flwr-datasets[vision]>=0.3.0",
13
13
  "scikit-learn>=1.1.1",
14
14
  ]
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "flwr-datasets[vision]>=0.3.0",
13
13
  "tensorflow>=2.11.1,<2.18.0",
14
14
  ]
@@ -22,7 +22,7 @@ from collections.abc import Iterator
22
22
  from contextlib import contextmanager
23
23
  from logging import DEBUG
24
24
  from pathlib import Path
25
- from typing import Any, Callable, Optional, cast
25
+ from typing import Any, Callable, Optional, Union, cast
26
26
 
27
27
  import grpc
28
28
  import typer
@@ -148,23 +148,69 @@ def sanitize_project_name(name: str) -> str:
148
148
  return sanitized_name
149
149
 
150
150
 
151
- def get_sha256_hash(file_path: Path) -> str:
151
+ def get_sha256_hash(file_path_or_int: Union[Path, int]) -> str:
152
152
  """Calculate the SHA-256 hash of a file."""
153
153
  sha256 = hashlib.sha256()
154
- with open(file_path, "rb") as f:
155
- while True:
156
- data = f.read(65536) # Read in 64kB blocks
157
- if not data:
158
- break
159
- sha256.update(data)
154
+ if isinstance(file_path_or_int, Path):
155
+ with open(file_path_or_int, "rb") as f:
156
+ while True:
157
+ data = f.read(65536) # Read in 64kB blocks
158
+ if not data:
159
+ break
160
+ sha256.update(data)
161
+ elif isinstance(file_path_or_int, int):
162
+ sha256.update(str(file_path_or_int).encode())
160
163
  return sha256.hexdigest()
161
164
 
162
165
 
163
166
  def get_user_auth_config_path(root_dir: Path, federation: str) -> Path:
164
- """Return the path to the user auth config file."""
167
+ """Return the path to the user auth config file.
168
+
169
+ Additionally, a `.gitignore` file will be created in the Flower directory to
170
+ include the `.credentials` folder to be excluded from git. If the `.gitignore`
171
+ file already exists, a warning will be displayed if the `.credentials` entry is
172
+ not found.
173
+ """
165
174
  # Locate the credentials directory
166
- credentials_dir = root_dir.absolute() / FLWR_DIR / CREDENTIALS_DIR
175
+ abs_flwr_dir = root_dir.absolute() / FLWR_DIR
176
+ credentials_dir = abs_flwr_dir / CREDENTIALS_DIR
167
177
  credentials_dir.mkdir(parents=True, exist_ok=True)
178
+
179
+ # Determine the absolute path of the Flower directory for .gitignore
180
+ gitignore_path = abs_flwr_dir / ".gitignore"
181
+ credential_entry = CREDENTIALS_DIR
182
+
183
+ try:
184
+ if gitignore_path.exists():
185
+ with open(gitignore_path, encoding="utf-8") as gitignore_file:
186
+ lines = gitignore_file.read().splitlines()
187
+
188
+ # Warn if .credentials is not already in .gitignore
189
+ if credential_entry not in lines:
190
+ typer.secho(
191
+ f"`.gitignore` exists, but `{credential_entry}` entry not found. "
192
+ "Consider adding it to your `.gitignore` to exclude Flower "
193
+ "credentials from git.",
194
+ fg=typer.colors.YELLOW,
195
+ bold=True,
196
+ )
197
+ else:
198
+ typer.secho(
199
+ f"Creating a new `.gitignore` with `{credential_entry}` entry...",
200
+ fg=typer.colors.BLUE,
201
+ )
202
+ # Create a new .gitignore with .credentials
203
+ with open(gitignore_path, "w", encoding="utf-8") as gitignore_file:
204
+ gitignore_file.write(f"{credential_entry}\n")
205
+ except Exception as err:
206
+ typer.secho(
207
+ "❌ An error occurred while handling `.gitignore.` "
208
+ f"Please check the permissions of `{gitignore_path}` and try again.",
209
+ fg=typer.colors.RED,
210
+ bold=True,
211
+ )
212
+ raise typer.Exit(code=1) from err
213
+
168
214
  return credentials_dir / f"{federation}.json"
169
215
 
170
216
 
@@ -114,9 +114,8 @@ def run_client_app() -> None:
114
114
  event(EventType.RUN_CLIENT_APP_ENTER)
115
115
  log(
116
116
  ERROR,
117
- "The command `flower-client-app` has been replaced by `flower-supernode`.",
117
+ "The command `flower-client-app` has been replaced by `flwr run`.",
118
118
  )
119
- log(INFO, "Execute `flower-supernode --help` to learn how to use it.")
120
119
  register_exit_handlers(event_type=EventType.RUN_CLIENT_APP_LEAVE)
121
120
 
122
121
 
@@ -151,6 +151,16 @@ class EventType(str, Enum):
151
151
 
152
152
  # Not yet implemented
153
153
 
154
+ # --- `flwr-*` commands ------------------------------------------------------------
155
+
156
+ # CLI: flwr-simulation
157
+ FLWR_SIMULATION_RUN_ENTER = auto()
158
+ FLWR_SIMULATION_RUN_LEAVE = auto()
159
+
160
+ # CLI: flwr-serverapp
161
+ FLWR_SERVERAPP_RUN_ENTER = auto()
162
+ FLWR_SERVERAPP_RUN_LEAVE = auto()
163
+
154
164
  # --- Simulation Engine ------------------------------------------------------------
155
165
 
156
166
  # CLI: flower-simulation
@@ -171,12 +181,12 @@ class EventType(str, Enum):
171
181
  RUN_SUPERNODE_ENTER = auto()
172
182
  RUN_SUPERNODE_LEAVE = auto()
173
183
 
174
- # CLI: `flower-server-app`
184
+ # --- DEPRECATED -------------------------------------------------------------------
185
+
186
+ # [DEPRECATED] CLI: `flower-server-app`
175
187
  RUN_SERVER_APP_ENTER = auto()
176
188
  RUN_SERVER_APP_LEAVE = auto()
177
189
 
178
- # --- DEPRECATED -------------------------------------------------------------------
179
-
180
190
  # [DEPRECATED] CLI: `flower-client-app`
181
191
  RUN_CLIENT_APP_ENTER = auto()
182
192
  RUN_CLIENT_APP_LEAVE = auto()
@@ -374,6 +374,7 @@ def run_superlink() -> None:
374
374
  server_public_key,
375
375
  ) = maybe_keys
376
376
  state = state_factory.state()
377
+ state.clear_supernode_auth_keys_and_credentials()
377
378
  state.store_node_public_keys(node_public_keys)
378
379
  state.store_server_private_public_key(
379
380
  private_key_to_bytes(server_private_key),
@@ -15,12 +15,12 @@
15
15
  """Run ServerApp."""
16
16
 
17
17
 
18
- import sys
19
18
  from logging import DEBUG, ERROR
20
19
  from typing import Optional
21
20
 
22
- from flwr.common import Context
23
- from flwr.common.logger import log, warn_unsupported_feature
21
+ from flwr.common import Context, EventType, event
22
+ from flwr.common.exit_handlers import register_exit_handlers
23
+ from flwr.common.logger import log
24
24
  from flwr.common.object_ref import load_app
25
25
 
26
26
  from .driver import Driver
@@ -66,12 +66,11 @@ def run(
66
66
  return context
67
67
 
68
68
 
69
- # pylint: disable-next=too-many-branches,too-many-statements,too-many-locals
70
69
  def run_server_app() -> None:
71
70
  """Run Flower server app."""
72
- warn_unsupported_feature(
73
- "The command `flower-server-app` is deprecated and no longer in use. "
74
- "Use the `flwr-serverapp` exclusively instead."
71
+ event(EventType.RUN_SERVER_APP_ENTER)
72
+ log(
73
+ ERROR,
74
+ "The command `flower-server-app` has been replaced by `flwr run`.",
75
75
  )
76
- log(ERROR, "`flower-server-app` used.")
77
- sys.exit()
76
+ register_exit_handlers(event_type=EventType.RUN_SERVER_APP_LEAVE)
@@ -25,6 +25,7 @@ from typing import Optional
25
25
 
26
26
  from flwr.cli.config_utils import get_fab_metadata
27
27
  from flwr.cli.install import install_from_fab
28
+ from flwr.cli.utils import get_sha256_hash
28
29
  from flwr.common.args import add_args_flwr_app_common
29
30
  from flwr.common.config import (
30
31
  get_flwr_dir,
@@ -51,6 +52,7 @@ from flwr.common.serde import (
51
52
  run_from_proto,
52
53
  run_status_to_proto,
53
54
  )
55
+ from flwr.common.telemetry import EventType, event
54
56
  from flwr.common.typing import RunNotRunningException, RunStatus
55
57
  from flwr.proto.run_pb2 import UpdateRunStatusRequest # pylint: disable=E0611
56
58
  from flwr.proto.serverappio_pb2 import ( # pylint: disable=E0611
@@ -113,7 +115,8 @@ def run_serverapp( # pylint: disable=R0914, disable=W0212, disable=R0915
113
115
  # Resolve directory where FABs are installed
114
116
  flwr_dir_ = get_flwr_dir(flwr_dir)
115
117
  log_uploader = None
116
-
118
+ success = True
119
+ hash_run_id = None
117
120
  while True:
118
121
 
119
122
  try:
@@ -129,6 +132,8 @@ def run_serverapp( # pylint: disable=R0914, disable=W0212, disable=R0915
129
132
  run = run_from_proto(res.run)
130
133
  fab = fab_from_proto(res.fab)
131
134
 
135
+ hash_run_id = get_sha256_hash(run.run_id)
136
+
132
137
  driver.set_run(run.run_id)
133
138
 
134
139
  # Start log uploader for this run
@@ -171,6 +176,11 @@ def run_serverapp( # pylint: disable=R0914, disable=W0212, disable=R0915
171
176
  UpdateRunStatusRequest(run_id=run.run_id, run_status=run_status_proto)
172
177
  )
173
178
 
179
+ event(
180
+ EventType.FLWR_SERVERAPP_RUN_ENTER,
181
+ event_details={"run-id-hash": hash_run_id},
182
+ )
183
+
174
184
  # Load and run the ServerApp with the Driver
175
185
  updated_context = run_(
176
186
  driver=driver,
@@ -187,17 +197,18 @@ def run_serverapp( # pylint: disable=R0914, disable=W0212, disable=R0915
187
197
  _ = driver._stub.PushServerAppOutputs(out_req)
188
198
 
189
199
  run_status = RunStatus(Status.FINISHED, SubStatus.COMPLETED, "")
190
-
191
200
  except RunNotRunningException:
192
201
  log(INFO, "")
193
202
  log(INFO, "Run ID %s stopped.", run.run_id)
194
203
  log(INFO, "")
195
204
  run_status = None
205
+ success = False
196
206
 
197
207
  except Exception as ex: # pylint: disable=broad-exception-caught
198
208
  exc_entity = "ServerApp"
199
209
  log(ERROR, "%s raised an exception", exc_entity, exc_info=ex)
200
210
  run_status = RunStatus(Status.FINISHED, SubStatus.FAILED, str(ex))
211
+ success = False
201
212
 
202
213
  finally:
203
214
  # Stop log uploader for this run and upload final logs
@@ -213,6 +224,10 @@ def run_serverapp( # pylint: disable=R0914, disable=W0212, disable=R0915
213
224
  run_id=run.run_id, run_status=run_status_proto
214
225
  )
215
226
  )
227
+ event(
228
+ EventType.FLWR_SERVERAPP_RUN_LEAVE,
229
+ event_details={"run-id-hash": hash_run_id, "success": success},
230
+ )
216
231
 
217
232
  # Stop the loop if `flwr-serverapp` is expected to process a single run
218
233
  if run_once:
@@ -430,6 +430,13 @@ class InMemoryLinkState(LinkState): # pylint: disable=R0902,R0904
430
430
  """Retrieve `server_public_key` in urlsafe bytes."""
431
431
  return self.server_public_key
432
432
 
433
+ def clear_supernode_auth_keys_and_credentials(self) -> None:
434
+ """Clear stored `node_public_keys` and credentials in the link state if any."""
435
+ with self.lock:
436
+ self.server_private_key = None
437
+ self.server_public_key = None
438
+ self.node_public_keys.clear()
439
+
433
440
  def store_node_public_keys(self, public_keys: set[bytes]) -> None:
434
441
  """Store a set of `node_public_keys` in the link state."""
435
442
  with self.lock:
@@ -284,6 +284,10 @@ class LinkState(abc.ABC): # pylint: disable=R0904
284
284
  def get_server_public_key(self) -> Optional[bytes]:
285
285
  """Retrieve `server_public_key` in urlsafe bytes."""
286
286
 
287
+ @abc.abstractmethod
288
+ def clear_supernode_auth_keys_and_credentials(self) -> None:
289
+ """Clear stored `node_public_keys` and credentials in the link state if any."""
290
+
287
291
  @abc.abstractmethod
288
292
  def store_node_public_keys(self, public_keys: set[bytes]) -> None:
289
293
  """Store a set of `node_public_keys` in the link state."""
@@ -818,6 +818,12 @@ class SqliteLinkState(LinkState): # pylint: disable=R0904
818
818
  public_key = None
819
819
  return public_key
820
820
 
821
+ def clear_supernode_auth_keys_and_credentials(self) -> None:
822
+ """Clear stored `node_public_keys` and credentials in the link state if any."""
823
+ queries = ["DELETE FROM public_key;", "DELETE FROM credential;"]
824
+ for query in queries:
825
+ self.query(query)
826
+
821
827
  def store_node_public_keys(self, public_keys: set[bytes]) -> None:
822
828
  """Store a set of `node_public_keys` in the link state."""
823
829
  query = "INSERT INTO public_key (public_key) VALUES (?)"
@@ -24,7 +24,8 @@ from typing import Optional
24
24
 
25
25
  from flwr.cli.config_utils import get_fab_metadata
26
26
  from flwr.cli.install import install_from_fab
27
- from flwr.common import EventType
27
+ from flwr.cli.utils import get_sha256_hash
28
+ from flwr.common import EventType, event
28
29
  from flwr.common.args import add_args_flwr_app_common
29
30
  from flwr.common.config import (
30
31
  get_flwr_dir,
@@ -202,6 +203,15 @@ def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R09
202
203
  verbose: bool = fed_opt.get("verbose", False)
203
204
  enable_tf_gpu_growth: bool = fed_opt.get("enable_tf_gpu_growth", False)
204
205
 
206
+ event(
207
+ EventType.FLWR_SIMULATION_RUN_ENTER,
208
+ event_details={
209
+ "backend": "ray",
210
+ "num-supernodes": num_supernodes,
211
+ "run-id-hash": get_sha256_hash(run.run_id),
212
+ },
213
+ )
214
+
205
215
  # Launch the simulation
206
216
  updated_context = _run_simulation(
207
217
  server_app_attr=server_app_attr,
@@ -214,7 +224,7 @@ def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R09
214
224
  verbose_logging=verbose,
215
225
  server_app_run_config=fused_config,
216
226
  is_app=True,
217
- exit_event=EventType.CLI_FLOWER_SIMULATION_LEAVE,
227
+ exit_event=EventType.FLWR_SIMULATION_RUN_LEAVE,
218
228
  )
219
229
 
220
230
  # Send resulting context
@@ -28,6 +28,7 @@ from queue import Empty, Queue
28
28
  from typing import Any, Optional
29
29
 
30
30
  from flwr.cli.config_utils import load_and_validate
31
+ from flwr.cli.utils import get_sha256_hash
31
32
  from flwr.client import ClientApp
32
33
  from flwr.common import Context, EventType, RecordSet, event, log, now
33
34
  from flwr.common.config import get_fused_config_from_dir, parse_config_args
@@ -394,7 +395,13 @@ def _main_loop(
394
395
  finally:
395
396
  # Trigger stop event
396
397
  f_stop.set()
397
- event(exit_event, event_details={"success": success})
398
+ event(
399
+ exit_event,
400
+ event_details={
401
+ "run-id-hash": get_sha256_hash(run.run_id),
402
+ "success": success,
403
+ },
404
+ )
398
405
  if serverapp_th:
399
406
  serverapp_th.join()
400
407
  if server_app_thread_has_exception.is_set():