flwr-nightly 1.15.0.dev20250128__tar.gz → 1.15.0.dev20250129__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.
Files changed (334) hide show
  1. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/PKG-INFO +1 -1
  2. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/pyproject.toml +1 -1
  3. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/utils.py +5 -8
  4. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/clientapp/app.py +15 -19
  5. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/grpc_client/connection.py +1 -6
  6. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/grpc_rere_client/connection.py +12 -12
  7. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -16
  8. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/message_handler/task_handler.py +0 -17
  9. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/differential_privacy.py +2 -1
  10. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/grpc.py +6 -1
  11. flwr_nightly-1.15.0.dev20250129/src/py/flwr/proto/fleet_pb2.py +66 -0
  12. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/fleet_pb2.pyi +0 -84
  13. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/fleet_pb2_grpc.py +5 -93
  14. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/fleet_pb2_grpc.pyi +12 -38
  15. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/app.py +6 -2
  16. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/driver/grpc_driver.py +2 -1
  17. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/serverapp/app.py +7 -5
  18. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +6 -43
  19. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +2 -0
  20. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +1 -49
  21. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -27
  22. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/simulation/simulationio_connection.py +2 -1
  23. flwr_nightly-1.15.0.dev20250128/src/py/flwr/proto/fleet_pb2.py +0 -79
  24. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/LICENSE +0 -0
  25. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/README.md +0 -0
  26. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/__init__.py +0 -0
  27. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/__init__.py +0 -0
  28. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/app.py +0 -0
  29. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/auth_plugin/__init__.py +0 -0
  30. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
  31. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/build.py +0 -0
  32. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
  33. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/config_utils.py +0 -0
  34. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/constant.py +0 -0
  35. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/example.py +0 -0
  36. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/install.py +0 -0
  37. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/log.py +0 -0
  38. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/login/__init__.py +0 -0
  39. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/login/login.py +0 -0
  40. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/ls.py +0 -0
  41. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/__init__.py +0 -0
  42. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/new.py +0 -0
  43. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  44. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  45. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  46. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  47. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  48. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  49. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  50. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  51. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  52. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  53. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  54. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  55. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  56. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  57. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  58. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  59. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  60. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  61. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  62. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  63. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  64. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  65. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  66. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  67. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  68. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  69. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  70. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  71. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  72. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  73. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  74. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  75. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  76. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  77. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  78. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  79. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  80. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  81. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  82. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  83. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  84. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  85. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  86. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  87. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  88. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  89. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  90. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  91. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  92. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  93. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  94. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  95. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/run/__init__.py +0 -0
  96. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/run/run.py +0 -0
  97. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/cli/stop.py +0 -0
  98. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/__init__.py +0 -0
  99. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/app.py +0 -0
  100. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/client.py +0 -0
  101. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/client_app.py +0 -0
  102. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/clientapp/__init__.py +0 -0
  103. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  104. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/clientapp/utils.py +0 -0
  105. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  106. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  107. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  108. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  109. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  110. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  111. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/heartbeat.py +0 -0
  112. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/message_handler/__init__.py +0 -0
  113. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  114. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/mod/__init__.py +0 -0
  115. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  116. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/mod/comms_mods.py +0 -0
  117. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  118. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  119. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  120. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  121. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/mod/utils.py +0 -0
  122. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/nodestate/__init__.py +0 -0
  123. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
  124. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/nodestate/nodestate.py +0 -0
  125. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/nodestate/nodestate_factory.py +0 -0
  126. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/numpy_client.py +0 -0
  127. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/rest_client/__init__.py +0 -0
  128. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/rest_client/connection.py +0 -0
  129. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/run_info_store.py +0 -0
  130. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/supernode/__init__.py +0 -0
  131. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/supernode/app.py +0 -0
  132. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/client/typing.py +0 -0
  133. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/__init__.py +0 -0
  134. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/address.py +0 -0
  135. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/args.py +0 -0
  136. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/auth_plugin/__init__.py +0 -0
  137. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/auth_plugin/auth_plugin.py +0 -0
  138. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/config.py +0 -0
  139. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/constant.py +0 -0
  140. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/context.py +0 -0
  141. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/date.py +0 -0
  142. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  143. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/dp.py +0 -0
  144. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/exit/__init__.py +0 -0
  145. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/exit/exit.py +0 -0
  146. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/exit/exit_code.py +0 -0
  147. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/exit_handlers.py +0 -0
  148. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/logger.py +0 -0
  149. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/message.py +0 -0
  150. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/object_ref.py +0 -0
  151. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/parameter.py +0 -0
  152. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/pyproject.py +0 -0
  153. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/record/__init__.py +0 -0
  154. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/record/configsrecord.py +0 -0
  155. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/record/conversion_utils.py +0 -0
  156. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/record/metricsrecord.py +0 -0
  157. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/record/parametersrecord.py +0 -0
  158. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/record/recordset.py +0 -0
  159. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/record/typeddict.py +0 -0
  160. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/recordset_compat.py +0 -0
  161. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/retry_invoker.py +0 -0
  162. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  163. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  164. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  165. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  166. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  167. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  168. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  169. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  170. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/serde.py +0 -0
  171. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/telemetry.py +0 -0
  172. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/typing.py +0 -0
  173. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/common/version.py +0 -0
  174. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/__init__.py +0 -0
  175. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  176. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  177. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  178. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  179. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/error_pb2.py +0 -0
  180. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/error_pb2.pyi +0 -0
  181. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  182. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  183. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/exec_pb2.py +0 -0
  184. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  185. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  186. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  187. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/fab_pb2.py +0 -0
  188. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  189. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  190. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  191. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  192. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  193. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  194. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  195. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/log_pb2.py +0 -0
  196. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/log_pb2.pyi +0 -0
  197. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
  198. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  199. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/message_pb2.py +0 -0
  200. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/message_pb2.pyi +0 -0
  201. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  202. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  203. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/node_pb2.py +0 -0
  204. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/node_pb2.pyi +0 -0
  205. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  206. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  207. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/recordset_pb2.py +0 -0
  208. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  209. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  210. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  211. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/run_pb2.py +0 -0
  212. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/run_pb2.pyi +0 -0
  213. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  214. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  215. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/serverappio_pb2.py +0 -0
  216. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
  217. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  218. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  219. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/simulationio_pb2.py +0 -0
  220. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
  221. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  222. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  223. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/task_pb2.py +0 -0
  224. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/task_pb2.pyi +0 -0
  225. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  226. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  227. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/transport_pb2.py +0 -0
  228. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  229. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  230. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  231. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/py.typed +0 -0
  232. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/__init__.py +0 -0
  233. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/client_manager.py +0 -0
  234. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/client_proxy.py +0 -0
  235. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/compat/__init__.py +0 -0
  236. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/compat/app.py +0 -0
  237. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/compat/app_utils.py +0 -0
  238. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  239. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/compat/legacy_context.py +0 -0
  240. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/criterion.py +0 -0
  241. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/driver/__init__.py +0 -0
  242. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/driver/driver.py +0 -0
  243. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  244. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/history.py +0 -0
  245. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/run_serverapp.py +0 -0
  246. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/server.py +0 -0
  247. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/server_app.py +0 -0
  248. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/server_config.py +0 -0
  249. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/serverapp/__init__.py +0 -0
  250. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/serverapp_components.py +0 -0
  251. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/__init__.py +0 -0
  252. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/aggregate.py +0 -0
  253. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/bulyan.py +0 -0
  254. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  255. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  256. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  257. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  258. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  259. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  260. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/fedadam.py +0 -0
  261. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/fedavg.py +0 -0
  262. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  263. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  264. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  265. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/fedopt.py +0 -0
  266. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/fedprox.py +0 -0
  267. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  268. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  269. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  270. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  271. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  272. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/krum.py +0 -0
  273. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  274. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/strategy/strategy.py +0 -0
  275. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/__init__.py +0 -0
  276. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  277. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +0 -0
  278. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +0 -0
  279. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  280. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  281. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  282. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  283. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  284. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  285. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  286. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  287. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  288. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  289. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  290. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  291. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  292. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  293. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  294. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  295. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  296. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  297. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  298. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  299. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  300. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  301. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  302. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  303. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
  304. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/linkstate/utils.py +0 -0
  305. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
  306. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  307. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  308. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/superlink/utils.py +0 -0
  309. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/typing.py +0 -0
  310. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/utils/__init__.py +0 -0
  311. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/utils/tensorboard.py +0 -0
  312. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/utils/validator.py +0 -0
  313. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/workflow/__init__.py +0 -0
  314. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/workflow/constant.py +0 -0
  315. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  316. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  317. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  318. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  319. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/simulation/__init__.py +0 -0
  320. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/simulation/app.py +0 -0
  321. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/simulation/legacy_app.py +0 -0
  322. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  323. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  324. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  325. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  326. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/simulation/run_simulation.py +0 -0
  327. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/superexec/__init__.py +0 -0
  328. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/superexec/app.py +0 -0
  329. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/superexec/deployment.py +0 -0
  330. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/superexec/exec_grpc.py +0 -0
  331. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/superexec/exec_servicer.py +0 -0
  332. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/superexec/exec_user_auth_interceptor.py +0 -0
  333. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/src/py/flwr/superexec/executor.py +0 -0
  334. {flwr_nightly-1.15.0.dev20250128 → flwr_nightly-1.15.0.dev20250129}/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.15.0.dev20250128
3
+ Version: 1.15.0.dev20250129
4
4
  Summary: Flower: A Friendly Federated AI 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.15.0.dev20250128"
7
+ version = "1.15.0.dev20250129"
8
8
  description = "Flower: A Friendly Federated AI Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -20,7 +20,6 @@ import json
20
20
  import re
21
21
  from collections.abc import Iterator
22
22
  from contextlib import contextmanager
23
- from logging import DEBUG
24
23
  from pathlib import Path
25
24
  from typing import Any, Callable, Optional, Union, cast
26
25
 
@@ -30,8 +29,11 @@ import typer
30
29
  from flwr.cli.cli_user_auth_interceptor import CliUserAuthInterceptor
31
30
  from flwr.common.auth_plugin import CliAuthPlugin
32
31
  from flwr.common.constant import AUTH_TYPE_KEY, CREDENTIALS_DIR, FLWR_DIR
33
- from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
34
- from flwr.common.logger import log
32
+ from flwr.common.grpc import (
33
+ GRPC_MAX_MESSAGE_LENGTH,
34
+ create_channel,
35
+ on_channel_state_change,
36
+ )
35
37
 
36
38
  from .auth_plugin import get_cli_auth_plugins
37
39
  from .config_utils import validate_certificate_in_federation_config
@@ -264,11 +266,6 @@ def init_channel(
264
266
  app: Path, federation_config: dict[str, Any], auth_plugin: Optional[CliAuthPlugin]
265
267
  ) -> grpc.Channel:
266
268
  """Initialize gRPC channel to the Exec API."""
267
-
268
- def on_channel_state_change(channel_connectivity: str) -> None:
269
- """Log channel connectivity."""
270
- log(DEBUG, channel_connectivity)
271
-
272
269
  insecure, root_certificates_bytes = validate_certificate_in_federation_config(
273
270
  app, federation_config
274
271
  )
@@ -29,7 +29,7 @@ from flwr.common.args import add_args_flwr_app_common
29
29
  from flwr.common.config import get_flwr_dir
30
30
  from flwr.common.constant import CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS, ErrorCode
31
31
  from flwr.common.exit import ExitCode, flwr_exit
32
- from flwr.common.grpc import create_channel
32
+ from flwr.common.grpc import create_channel, on_channel_state_change
33
33
  from flwr.common.logger import log
34
34
  from flwr.common.message import Error
35
35
  from flwr.common.retry_invoker import _make_simple_grpc_retry_invoker, _wrap_stub
@@ -66,11 +66,11 @@ def flwr_clientapp() -> None:
66
66
  "flwr-clientapp does not support TLS yet.",
67
67
  )
68
68
 
69
- log(INFO, "Starting Flower ClientApp")
69
+ log(INFO, "Start `flwr-clientapp` process")
70
70
  log(
71
71
  DEBUG,
72
- "Starting isolated `ClientApp` connected to SuperNode's ClientAppIo API at %s "
73
- "with token %s",
72
+ "`flwr-clientapp` will attempt to connect to SuperNode's "
73
+ "ClientAppIo API at %s with token %s",
74
74
  args.clientappio_api_address,
75
75
  args.token,
76
76
  )
@@ -83,11 +83,6 @@ def flwr_clientapp() -> None:
83
83
  )
84
84
 
85
85
 
86
- def on_channel_state_change(channel_connectivity: str) -> None:
87
- """Log channel connectivity."""
88
- log(DEBUG, channel_connectivity)
89
-
90
-
91
86
  def run_clientapp( # pylint: disable=R0914
92
87
  clientappio_api_address: str,
93
88
  run_once: bool,
@@ -116,11 +111,11 @@ def run_clientapp( # pylint: disable=R0914
116
111
  time.sleep(1)
117
112
 
118
113
  # Pull Message, Context, Run and (optional) FAB from SuperNode
119
- message, context, run, fab = pull_message(stub=stub, token=token)
114
+ message, context, run, fab = pull_clientappinputs(stub=stub, token=token)
120
115
 
121
116
  # Install FAB, if provided
122
117
  if fab:
123
- log(DEBUG, "Flower ClientApp starts FAB installation.")
118
+ log(DEBUG, "[flwr-clientapp] Start FAB installation.")
124
119
  install_from_fab(fab.content, flwr_dir=flwr_dir_, skip_prompt=True)
125
120
 
126
121
  load_client_app_fn = get_load_client_app_fn(
@@ -132,6 +127,7 @@ def run_clientapp( # pylint: disable=R0914
132
127
 
133
128
  try:
134
129
  # Load ClientApp
130
+ log(DEBUG, "[flwr-clientapp] Start `ClientApp` Loading.")
135
131
  client_app: ClientApp = load_client_app_fn(
136
132
  run.fab_id, run.fab_version, fab.hash_str if fab else ""
137
133
  )
@@ -160,7 +156,7 @@ def run_clientapp( # pylint: disable=R0914
160
156
  )
161
157
 
162
158
  # Push Message and Context to SuperNode
163
- _ = push_message(
159
+ _ = push_clientappoutputs(
164
160
  stub=stub, token=token, message=reply_message, context=context
165
161
  )
166
162
 
@@ -183,7 +179,7 @@ def run_clientapp( # pylint: disable=R0914
183
179
 
184
180
  def get_token(stub: grpc.Channel) -> Optional[int]:
185
181
  """Get a token from SuperNode."""
186
- log(DEBUG, "Flower ClientApp process requests token")
182
+ log(DEBUG, "[flwr-clientapp] Request token")
187
183
  try:
188
184
  res: GetTokenResponse = stub.GetToken(GetTokenRequest())
189
185
  log(DEBUG, "[GetToken] Received token: %s", res.token)
@@ -196,11 +192,11 @@ def get_token(stub: grpc.Channel) -> Optional[int]:
196
192
  return None
197
193
 
198
194
 
199
- def pull_message(
195
+ def pull_clientappinputs(
200
196
  stub: grpc.Channel, token: int
201
197
  ) -> tuple[Message, Context, Run, Optional[Fab]]:
202
- """Pull message from SuperNode to ClientApp."""
203
- log(INFO, "Pulling ClientAppInputs for token %s", token)
198
+ """Pull ClientAppInputs from SuperNode."""
199
+ log(INFO, "[flwr-clientapp] Pull `ClientAppInputs` for token %s", token)
204
200
  try:
205
201
  res: PullClientAppInputsResponse = stub.PullClientAppInputs(
206
202
  PullClientAppInputsRequest(token=token)
@@ -215,11 +211,11 @@ def pull_message(
215
211
  raise e
216
212
 
217
213
 
218
- def push_message(
214
+ def push_clientappoutputs(
219
215
  stub: grpc.Channel, token: int, message: Message, context: Context
220
216
  ) -> PushClientAppOutputsResponse:
221
- """Push message to SuperNode from ClientApp."""
222
- log(INFO, "Pushing ClientAppOutputs for token %s", token)
217
+ """Push ClientAppOutputs to SuperNode."""
218
+ log(INFO, "[flwr-clientapp] Push `ClientAppOutputs` for token %s", token)
223
219
  proto_message = message_to_proto(message)
224
220
  proto_context = context_to_proto(context)
225
221
 
@@ -36,7 +36,7 @@ from flwr.common import (
36
36
  from flwr.common import recordset_compat as compat
37
37
  from flwr.common import serde
38
38
  from flwr.common.constant import MessageType, MessageTypeLegacy
39
- from flwr.common.grpc import create_channel
39
+ from flwr.common.grpc import create_channel, on_channel_state_change
40
40
  from flwr.common.logger import log
41
41
  from flwr.common.retry_invoker import RetryInvoker
42
42
  from flwr.common.typing import Fab, Run
@@ -48,11 +48,6 @@ from flwr.proto.transport_pb2 import ( # pylint: disable=E0611
48
48
  from flwr.proto.transport_pb2_grpc import FlowerServiceStub # pylint: disable=E0611
49
49
 
50
50
 
51
- def on_channel_state_change(channel_connectivity: str) -> None:
52
- """Log channel connectivity."""
53
- log(DEBUG, channel_connectivity)
54
-
55
-
56
51
  @contextmanager
57
52
  def grpc_connection( # pylint: disable=R0913,R0915,too-many-positional-arguments
58
53
  server_address: str,
@@ -20,7 +20,7 @@ import threading
20
20
  from collections.abc import Iterator, Sequence
21
21
  from contextlib import contextmanager
22
22
  from copy import copy
23
- from logging import DEBUG, ERROR
23
+ from logging import ERROR
24
24
  from pathlib import Path
25
25
  from typing import Callable, Optional, Union, cast
26
26
 
@@ -36,10 +36,13 @@ from flwr.common.constant import (
36
36
  PING_DEFAULT_INTERVAL,
37
37
  PING_RANDOM_RANGE,
38
38
  )
39
- from flwr.common.grpc import create_channel
39
+ from flwr.common.grpc import create_channel, on_channel_state_change
40
40
  from flwr.common.logger import log
41
41
  from flwr.common.message import Message, Metadata
42
42
  from flwr.common.retry_invoker import RetryInvoker
43
+ from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
44
+ generate_key_pairs,
45
+ )
43
46
  from flwr.common.serde import message_from_proto, message_to_proto, run_from_proto
44
47
  from flwr.common.typing import Fab, Run, RunNotRunningException
45
48
  from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
@@ -60,11 +63,6 @@ from .client_interceptor import AuthenticateClientInterceptor
60
63
  from .grpc_adapter import GrpcAdapter
61
64
 
62
65
 
63
- def on_channel_state_change(channel_connectivity: str) -> None:
64
- """Log channel connectivity."""
65
- log(DEBUG, channel_connectivity)
66
-
67
-
68
66
  @contextmanager
69
67
  def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
70
68
  server_address: str,
@@ -130,12 +128,14 @@ def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
130
128
  if isinstance(root_certificates, str):
131
129
  root_certificates = Path(root_certificates).read_bytes()
132
130
 
133
- interceptors: Optional[Sequence[grpc.UnaryUnaryClientInterceptor]] = None
134
- if authentication_keys is not None:
135
- interceptors = AuthenticateClientInterceptor(
136
- authentication_keys[0], authentication_keys[1]
137
- )
131
+ # Automatic node auth: generate keys if user didn't provide any
132
+ if authentication_keys is None:
133
+ authentication_keys = generate_key_pairs()
138
134
 
135
+ # Always configure auth interceptor, with either user-provided or generated keys
136
+ interceptors: Sequence[grpc.UnaryUnaryClientInterceptor] = [
137
+ AuthenticateClientInterceptor(*authentication_keys),
138
+ ]
139
139
  channel = create_channel(
140
140
  server_address=server_address,
141
141
  insecure=insecure,
@@ -42,12 +42,8 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
42
42
  PingResponse,
43
43
  PullMessagesRequest,
44
44
  PullMessagesResponse,
45
- PullTaskInsRequest,
46
- PullTaskInsResponse,
47
45
  PushMessagesRequest,
48
46
  PushMessagesResponse,
49
- PushTaskResRequest,
50
- PushTaskResResponse,
51
47
  )
52
48
  from flwr.proto.grpcadapter_pb2 import MessageContainer # pylint: disable=E0611
53
49
  from flwr.proto.grpcadapter_pb2_grpc import GrpcAdapterStub
@@ -130,24 +126,12 @@ class GrpcAdapter:
130
126
  """."""
131
127
  return self._send_and_receive(request, PingResponse, **kwargs)
132
128
 
133
- def PullTaskIns( # pylint: disable=C0103
134
- self, request: PullTaskInsRequest, **kwargs: Any
135
- ) -> PullTaskInsResponse:
136
- """."""
137
- return self._send_and_receive(request, PullTaskInsResponse, **kwargs)
138
-
139
129
  def PullMessages( # pylint: disable=C0103
140
130
  self, request: PullMessagesRequest, **kwargs: Any
141
131
  ) -> PullMessagesResponse:
142
132
  """."""
143
133
  return self._send_and_receive(request, PullMessagesResponse, **kwargs)
144
134
 
145
- def PushTaskRes( # pylint: disable=C0103
146
- self, request: PushTaskResRequest, **kwargs: Any
147
- ) -> PushTaskResResponse:
148
- """."""
149
- return self._send_and_receive(request, PushTaskResResponse, **kwargs)
150
-
151
135
  def PushMessages( # pylint: disable=C0103
152
136
  self, request: PushMessagesRequest, **kwargs: Any
153
137
  ) -> PushMessagesResponse:
@@ -15,9 +15,6 @@
15
15
  """Task handling."""
16
16
 
17
17
 
18
- from typing import Optional
19
-
20
- from flwr.proto.fleet_pb2 import PullTaskInsResponse # pylint: disable=E0611
21
18
  from flwr.proto.task_pb2 import TaskIns # pylint: disable=E0611
22
19
 
23
20
 
@@ -38,17 +35,3 @@ def validate_task_ins(task_ins: TaskIns) -> bool:
38
35
  if not (task_ins.HasField("task") and task_ins.task.HasField("recordset")):
39
36
  return False
40
37
  return True
41
-
42
-
43
- def get_task_ins(
44
- pull_task_ins_response: PullTaskInsResponse,
45
- ) -> Optional[TaskIns]:
46
- """Get the first TaskIns, if available."""
47
- # Extract a single ServerMessage from the response, if possible
48
- if len(pull_task_ins_response.task_ins_list) == 0:
49
- return None
50
-
51
- # Only evaluate the first message
52
- task_ins: TaskIns = pull_task_ins_response.task_ins_list[0]
53
-
54
- return task_ins
@@ -39,7 +39,8 @@ def get_norm(input_arrays: NDArrays) -> float:
39
39
  def add_gaussian_noise_inplace(input_arrays: NDArrays, std_dev: float) -> None:
40
40
  """Add Gaussian noise to each element of the input arrays."""
41
41
  for array in input_arrays:
42
- array += np.random.normal(0, std_dev, array.shape)
42
+ noise = np.random.normal(0, std_dev, array.shape).astype(array.dtype)
43
+ array += noise
43
44
 
44
45
 
45
46
  def clip_inputs_inplace(input_arrays: NDArrays, clipping_norm: float) -> None:
@@ -80,7 +80,7 @@ def create_channel(
80
80
  log(DEBUG, "Opened secure gRPC connection using certificates")
81
81
 
82
82
  if interceptors is not None:
83
- channel = grpc.intercept_channel(channel, interceptors)
83
+ channel = grpc.intercept_channel(channel, *interceptors)
84
84
 
85
85
  return channel
86
86
 
@@ -224,3 +224,8 @@ def generic_create_grpc_server( # pylint: disable=too-many-arguments,R0917
224
224
  server.add_insecure_port(server_address)
225
225
 
226
226
  return server
227
+
228
+
229
+ def on_channel_state_change(channel_connectivity: str) -> None:
230
+ """Log channel connectivity."""
231
+ log(DEBUG, channel_connectivity)
@@ -0,0 +1,66 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: flwr/proto/fleet.proto
5
+ # Protobuf Python Version: 5.29.0
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 5,
15
+ 29,
16
+ 0,
17
+ '',
18
+ 'flwr/proto/fleet.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+ from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
26
+ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
27
+ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
28
+ from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
29
+
30
+
31
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x18\x66lwr/proto/message.proto\"*\n\x11\x43reateNodeRequest\x12\x15\n\rping_interval\x18\x01 \x01(\x01\"4\n\x12\x43reateNodeResponse\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"3\n\x11\x44\x65leteNodeRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"\x14\n\x12\x44\x65leteNodeResponse\"D\n\x0bPingRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x15\n\rping_interval\x18\x02 \x01(\x01\"\x1f\n\x0cPingResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"J\n\x13PullMessagesRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x13\n\x0bmessage_ids\x18\x02 \x03(\t\"l\n\x14PullMessagesResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12*\n\rmessages_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.Message\"a\n\x13PushMessagesRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12*\n\rmessages_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.Message\"\xb0\x01\n\x14PushMessagesResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12>\n\x07results\x18\x02 \x03(\x0b\x32-.flwr.proto.PushMessagesResponse.ResultsEntry\x1a.\n\x0cResultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"\x1e\n\tReconnect\x12\x11\n\treconnect\x18\x01 \x01(\x04\x32\x92\x04\n\x05\x46leet\x12M\n\nCreateNode\x12\x1d.flwr.proto.CreateNodeRequest\x1a\x1e.flwr.proto.CreateNodeResponse\"\x00\x12M\n\nDeleteNode\x12\x1d.flwr.proto.DeleteNodeRequest\x1a\x1e.flwr.proto.DeleteNodeResponse\"\x00\x12;\n\x04Ping\x12\x17.flwr.proto.PingRequest\x1a\x18.flwr.proto.PingResponse\"\x00\x12S\n\x0cPullMessages\x12\x1f.flwr.proto.PullMessagesRequest\x1a .flwr.proto.PullMessagesResponse\"\x00\x12S\n\x0cPushMessages\x12\x1f.flwr.proto.PushMessagesRequest\x1a .flwr.proto.PushMessagesResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12\x41\n\x06GetFab\x12\x19.flwr.proto.GetFabRequest\x1a\x1a.flwr.proto.GetFabResponse\"\x00\x62\x06proto3')
32
+
33
+ _globals = globals()
34
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
35
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.fleet_pb2', _globals)
36
+ if not _descriptor._USE_C_DESCRIPTORS:
37
+ DESCRIPTOR._loaded_options = None
38
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._loaded_options = None
39
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_options = b'8\001'
40
+ _globals['_CREATENODEREQUEST']._serialized_start=131
41
+ _globals['_CREATENODEREQUEST']._serialized_end=173
42
+ _globals['_CREATENODERESPONSE']._serialized_start=175
43
+ _globals['_CREATENODERESPONSE']._serialized_end=227
44
+ _globals['_DELETENODEREQUEST']._serialized_start=229
45
+ _globals['_DELETENODEREQUEST']._serialized_end=280
46
+ _globals['_DELETENODERESPONSE']._serialized_start=282
47
+ _globals['_DELETENODERESPONSE']._serialized_end=302
48
+ _globals['_PINGREQUEST']._serialized_start=304
49
+ _globals['_PINGREQUEST']._serialized_end=372
50
+ _globals['_PINGRESPONSE']._serialized_start=374
51
+ _globals['_PINGRESPONSE']._serialized_end=405
52
+ _globals['_PULLMESSAGESREQUEST']._serialized_start=407
53
+ _globals['_PULLMESSAGESREQUEST']._serialized_end=481
54
+ _globals['_PULLMESSAGESRESPONSE']._serialized_start=483
55
+ _globals['_PULLMESSAGESRESPONSE']._serialized_end=591
56
+ _globals['_PUSHMESSAGESREQUEST']._serialized_start=593
57
+ _globals['_PUSHMESSAGESREQUEST']._serialized_end=690
58
+ _globals['_PUSHMESSAGESRESPONSE']._serialized_start=693
59
+ _globals['_PUSHMESSAGESRESPONSE']._serialized_end=869
60
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_start=823
61
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_end=869
62
+ _globals['_RECONNECT']._serialized_start=871
63
+ _globals['_RECONNECT']._serialized_end=901
64
+ _globals['_FLEET']._serialized_start=904
65
+ _globals['_FLEET']._serialized_end=1434
66
+ # @@protoc_insertion_point(module_scope)
@@ -5,7 +5,6 @@ isort:skip_file
5
5
  import builtins
6
6
  import flwr.proto.message_pb2
7
7
  import flwr.proto.node_pb2
8
- import flwr.proto.task_pb2
9
8
  import google.protobuf.descriptor
10
9
  import google.protobuf.internal.containers
11
10
  import google.protobuf.message
@@ -87,89 +86,6 @@ class PingResponse(google.protobuf.message.Message):
87
86
  def ClearField(self, field_name: typing_extensions.Literal["success",b"success"]) -> None: ...
88
87
  global___PingResponse = PingResponse
89
88
 
90
- class PullTaskInsRequest(google.protobuf.message.Message):
91
- """PullTaskIns messages"""
92
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
93
- NODE_FIELD_NUMBER: builtins.int
94
- TASK_IDS_FIELD_NUMBER: builtins.int
95
- @property
96
- def node(self) -> flwr.proto.node_pb2.Node: ...
97
- @property
98
- def task_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
99
- def __init__(self,
100
- *,
101
- node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
102
- task_ids: typing.Optional[typing.Iterable[typing.Text]] = ...,
103
- ) -> None: ...
104
- def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
105
- def ClearField(self, field_name: typing_extensions.Literal["node",b"node","task_ids",b"task_ids"]) -> None: ...
106
- global___PullTaskInsRequest = PullTaskInsRequest
107
-
108
- class PullTaskInsResponse(google.protobuf.message.Message):
109
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
110
- RECONNECT_FIELD_NUMBER: builtins.int
111
- TASK_INS_LIST_FIELD_NUMBER: builtins.int
112
- @property
113
- def reconnect(self) -> global___Reconnect: ...
114
- @property
115
- def task_ins_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.task_pb2.TaskIns]: ...
116
- def __init__(self,
117
- *,
118
- reconnect: typing.Optional[global___Reconnect] = ...,
119
- task_ins_list: typing.Optional[typing.Iterable[flwr.proto.task_pb2.TaskIns]] = ...,
120
- ) -> None: ...
121
- def HasField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect"]) -> builtins.bool: ...
122
- def ClearField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect","task_ins_list",b"task_ins_list"]) -> None: ...
123
- global___PullTaskInsResponse = PullTaskInsResponse
124
-
125
- class PushTaskResRequest(google.protobuf.message.Message):
126
- """PushTaskRes messages"""
127
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
128
- NODE_FIELD_NUMBER: builtins.int
129
- TASK_RES_LIST_FIELD_NUMBER: builtins.int
130
- @property
131
- def node(self) -> flwr.proto.node_pb2.Node: ...
132
- @property
133
- def task_res_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.task_pb2.TaskRes]: ...
134
- def __init__(self,
135
- *,
136
- node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
137
- task_res_list: typing.Optional[typing.Iterable[flwr.proto.task_pb2.TaskRes]] = ...,
138
- ) -> None: ...
139
- def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
140
- def ClearField(self, field_name: typing_extensions.Literal["node",b"node","task_res_list",b"task_res_list"]) -> None: ...
141
- global___PushTaskResRequest = PushTaskResRequest
142
-
143
- class PushTaskResResponse(google.protobuf.message.Message):
144
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
145
- class ResultsEntry(google.protobuf.message.Message):
146
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
147
- KEY_FIELD_NUMBER: builtins.int
148
- VALUE_FIELD_NUMBER: builtins.int
149
- key: typing.Text
150
- value: builtins.int
151
- def __init__(self,
152
- *,
153
- key: typing.Text = ...,
154
- value: builtins.int = ...,
155
- ) -> None: ...
156
- def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
157
-
158
- RECONNECT_FIELD_NUMBER: builtins.int
159
- RESULTS_FIELD_NUMBER: builtins.int
160
- @property
161
- def reconnect(self) -> global___Reconnect: ...
162
- @property
163
- def results(self) -> google.protobuf.internal.containers.ScalarMap[typing.Text, builtins.int]: ...
164
- def __init__(self,
165
- *,
166
- reconnect: typing.Optional[global___Reconnect] = ...,
167
- results: typing.Optional[typing.Mapping[typing.Text, builtins.int]] = ...,
168
- ) -> None: ...
169
- def HasField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect"]) -> builtins.bool: ...
170
- def ClearField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect","results",b"results"]) -> None: ...
171
- global___PushTaskResResponse = PushTaskResResponse
172
-
173
89
  class PullMessagesRequest(google.protobuf.message.Message):
174
90
  """PullMessages messages"""
175
91
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
@@ -51,21 +51,11 @@ class FleetStub(object):
51
51
  request_serializer=flwr_dot_proto_dot_fleet__pb2.PingRequest.SerializeToString,
52
52
  response_deserializer=flwr_dot_proto_dot_fleet__pb2.PingResponse.FromString,
53
53
  _registered_method=True)
54
- self.PullTaskIns = channel.unary_unary(
55
- '/flwr.proto.Fleet/PullTaskIns',
56
- request_serializer=flwr_dot_proto_dot_fleet__pb2.PullTaskInsRequest.SerializeToString,
57
- response_deserializer=flwr_dot_proto_dot_fleet__pb2.PullTaskInsResponse.FromString,
58
- _registered_method=True)
59
54
  self.PullMessages = channel.unary_unary(
60
55
  '/flwr.proto.Fleet/PullMessages',
61
56
  request_serializer=flwr_dot_proto_dot_fleet__pb2.PullMessagesRequest.SerializeToString,
62
57
  response_deserializer=flwr_dot_proto_dot_fleet__pb2.PullMessagesResponse.FromString,
63
58
  _registered_method=True)
64
- self.PushTaskRes = channel.unary_unary(
65
- '/flwr.proto.Fleet/PushTaskRes',
66
- request_serializer=flwr_dot_proto_dot_fleet__pb2.PushTaskResRequest.SerializeToString,
67
- response_deserializer=flwr_dot_proto_dot_fleet__pb2.PushTaskResResponse.FromString,
68
- _registered_method=True)
69
59
  self.PushMessages = channel.unary_unary(
70
60
  '/flwr.proto.Fleet/PushMessages',
71
61
  request_serializer=flwr_dot_proto_dot_fleet__pb2.PushMessagesRequest.SerializeToString,
@@ -104,33 +94,19 @@ class FleetServicer(object):
104
94
  context.set_details('Method not implemented!')
105
95
  raise NotImplementedError('Method not implemented!')
106
96
 
107
- def PullTaskIns(self, request, context):
108
- """Retrieve one or more tasks, if possible
109
-
110
- HTTP API path: /api/v1/fleet/pull-task-ins
111
- """
112
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
113
- context.set_details('Method not implemented!')
114
- raise NotImplementedError('Method not implemented!')
115
-
116
97
  def PullMessages(self, request, context):
117
- """HTTP API path: /api/v1/fleet/pull-messages
118
- """
119
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
120
- context.set_details('Method not implemented!')
121
- raise NotImplementedError('Method not implemented!')
98
+ """Retrieve one or more messages, if possible
122
99
 
123
- def PushTaskRes(self, request, context):
124
- """Complete one or more tasks, if possible
125
-
126
- HTTP API path: /api/v1/fleet/push-task-res
100
+ HTTP API path: /api/v1/fleet/pull-messages
127
101
  """
128
102
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
129
103
  context.set_details('Method not implemented!')
130
104
  raise NotImplementedError('Method not implemented!')
131
105
 
132
106
  def PushMessages(self, request, context):
133
- """HTTP API path: /api/v1/fleet/push-messages
107
+ """Complete one or more messages, if possible
108
+
109
+ HTTP API path: /api/v1/fleet/push-messages
134
110
  """
135
111
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
136
112
  context.set_details('Method not implemented!')
@@ -167,21 +143,11 @@ def add_FleetServicer_to_server(servicer, server):
167
143
  request_deserializer=flwr_dot_proto_dot_fleet__pb2.PingRequest.FromString,
168
144
  response_serializer=flwr_dot_proto_dot_fleet__pb2.PingResponse.SerializeToString,
169
145
  ),
170
- 'PullTaskIns': grpc.unary_unary_rpc_method_handler(
171
- servicer.PullTaskIns,
172
- request_deserializer=flwr_dot_proto_dot_fleet__pb2.PullTaskInsRequest.FromString,
173
- response_serializer=flwr_dot_proto_dot_fleet__pb2.PullTaskInsResponse.SerializeToString,
174
- ),
175
146
  'PullMessages': grpc.unary_unary_rpc_method_handler(
176
147
  servicer.PullMessages,
177
148
  request_deserializer=flwr_dot_proto_dot_fleet__pb2.PullMessagesRequest.FromString,
178
149
  response_serializer=flwr_dot_proto_dot_fleet__pb2.PullMessagesResponse.SerializeToString,
179
150
  ),
180
- 'PushTaskRes': grpc.unary_unary_rpc_method_handler(
181
- servicer.PushTaskRes,
182
- request_deserializer=flwr_dot_proto_dot_fleet__pb2.PushTaskResRequest.FromString,
183
- response_serializer=flwr_dot_proto_dot_fleet__pb2.PushTaskResResponse.SerializeToString,
184
- ),
185
151
  'PushMessages': grpc.unary_unary_rpc_method_handler(
186
152
  servicer.PushMessages,
187
153
  request_deserializer=flwr_dot_proto_dot_fleet__pb2.PushMessagesRequest.FromString,
@@ -289,33 +255,6 @@ class Fleet(object):
289
255
  metadata,
290
256
  _registered_method=True)
291
257
 
292
- @staticmethod
293
- def PullTaskIns(request,
294
- target,
295
- options=(),
296
- channel_credentials=None,
297
- call_credentials=None,
298
- insecure=False,
299
- compression=None,
300
- wait_for_ready=None,
301
- timeout=None,
302
- metadata=None):
303
- return grpc.experimental.unary_unary(
304
- request,
305
- target,
306
- '/flwr.proto.Fleet/PullTaskIns',
307
- flwr_dot_proto_dot_fleet__pb2.PullTaskInsRequest.SerializeToString,
308
- flwr_dot_proto_dot_fleet__pb2.PullTaskInsResponse.FromString,
309
- options,
310
- channel_credentials,
311
- insecure,
312
- call_credentials,
313
- compression,
314
- wait_for_ready,
315
- timeout,
316
- metadata,
317
- _registered_method=True)
318
-
319
258
  @staticmethod
320
259
  def PullMessages(request,
321
260
  target,
@@ -343,33 +282,6 @@ class Fleet(object):
343
282
  metadata,
344
283
  _registered_method=True)
345
284
 
346
- @staticmethod
347
- def PushTaskRes(request,
348
- target,
349
- options=(),
350
- channel_credentials=None,
351
- call_credentials=None,
352
- insecure=False,
353
- compression=None,
354
- wait_for_ready=None,
355
- timeout=None,
356
- metadata=None):
357
- return grpc.experimental.unary_unary(
358
- request,
359
- target,
360
- '/flwr.proto.Fleet/PushTaskRes',
361
- flwr_dot_proto_dot_fleet__pb2.PushTaskResRequest.SerializeToString,
362
- flwr_dot_proto_dot_fleet__pb2.PushTaskResResponse.FromString,
363
- options,
364
- channel_credentials,
365
- insecure,
366
- call_credentials,
367
- compression,
368
- wait_for_ready,
369
- timeout,
370
- metadata,
371
- _registered_method=True)
372
-
373
285
  @staticmethod
374
286
  def PushMessages(request,
375
287
  target,