flwr-nightly 1.19.0.dev20250528__tar.gz → 1.19.0.dev20250529__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 (359) hide show
  1. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/PKG-INFO +1 -1
  2. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/mod/comms_mods.py +36 -17
  3. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/auth_plugin/auth_plugin.py +8 -2
  4. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/message.py +11 -0
  5. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/fleet_pb2.py +16 -16
  6. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/fleet_pb2.pyi +5 -5
  7. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/message_pb2.py +10 -10
  8. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/message_pb2.pyi +4 -4
  9. flwr_nightly-1.19.0.dev20250529/py/flwr/proto/serverappio_pb2.py +64 -0
  10. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/serverappio_pb2.pyi +5 -5
  11. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/app.py +52 -56
  12. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +1 -0
  13. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +10 -1
  14. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +3 -1
  15. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +10 -1
  16. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/utils.py +29 -0
  17. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/pyproject.toml +1 -1
  18. flwr_nightly-1.19.0.dev20250528/py/flwr/proto/serverappio_pb2.py +0 -64
  19. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/README.md +0 -0
  20. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/__init__.py +0 -0
  21. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/app/__init__.py +0 -0
  22. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/app/error.py +0 -0
  23. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/app/metadata.py +0 -0
  24. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/__init__.py +0 -0
  25. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/app.py +0 -0
  26. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  27. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
  28. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/build.py +0 -0
  29. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
  30. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/config_utils.py +0 -0
  31. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/constant.py +0 -0
  32. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/example.py +0 -0
  33. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/install.py +0 -0
  34. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/log.py +0 -0
  35. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/login/__init__.py +0 -0
  36. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/login/login.py +0 -0
  37. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/ls.py +0 -0
  38. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/__init__.py +0 -0
  39. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/new.py +0 -0
  40. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/__init__.py +0 -0
  41. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  42. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  43. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  44. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  45. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  46. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/__init__.py +0 -0
  47. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  48. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  49. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  50. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  51. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  52. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  53. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  54. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  55. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  56. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  57. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  58. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  59. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  60. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  61. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  62. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  63. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  64. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  65. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  66. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  67. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  68. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  69. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  70. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  71. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  72. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  73. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  74. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  75. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  76. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  77. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  78. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  79. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  80. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  81. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  82. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  83. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  84. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  85. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  86. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  87. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  88. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  89. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  90. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  91. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  92. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/run/__init__.py +0 -0
  93. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/run/run.py +0 -0
  94. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/stop.py +0 -0
  95. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/cli/utils.py +0 -0
  96. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/__init__.py +0 -0
  97. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/client.py +0 -0
  98. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/client_app.py +0 -0
  99. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/clientapp/__init__.py +0 -0
  100. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/clientapp/app.py +0 -0
  101. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  102. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/clientapp/utils.py +0 -0
  103. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  104. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  105. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  106. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  107. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  108. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  109. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  110. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/message_handler/__init__.py +0 -0
  111. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/message_handler/message_handler.py +0 -0
  112. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/mod/__init__.py +0 -0
  113. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/mod/centraldp_mods.py +0 -0
  114. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/mod/localdp_mod.py +0 -0
  115. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  116. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  117. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  118. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/mod/utils.py +0 -0
  119. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/numpy_client.py +0 -0
  120. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/rest_client/__init__.py +0 -0
  121. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/rest_client/connection.py +0 -0
  122. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/run_info_store.py +0 -0
  123. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/client/typing.py +0 -0
  124. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/clientapp/__init__.py +0 -0
  125. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/__init__.py +0 -0
  126. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/address.py +0 -0
  127. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/args.py +0 -0
  128. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/auth_plugin/__init__.py +0 -0
  129. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/config.py +0 -0
  130. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/constant.py +0 -0
  131. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/context.py +0 -0
  132. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/date.py +0 -0
  133. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/differential_privacy.py +0 -0
  134. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/differential_privacy_constants.py +0 -0
  135. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/dp.py +0 -0
  136. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  137. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  138. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/exit/__init__.py +0 -0
  139. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/exit/exit.py +0 -0
  140. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/exit/exit_code.py +0 -0
  141. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/exit_handlers.py +0 -0
  142. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/grpc.py +0 -0
  143. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/heartbeat.py +0 -0
  144. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/inflatable.py +0 -0
  145. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/inflatable_grpc_utils.py +0 -0
  146. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/logger.py +0 -0
  147. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/object_ref.py +0 -0
  148. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/parameter.py +0 -0
  149. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/pyproject.py +0 -0
  150. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/record/__init__.py +0 -0
  151. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/record/array.py +0 -0
  152. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/record/arrayrecord.py +0 -0
  153. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/record/configrecord.py +0 -0
  154. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/record/conversion_utils.py +0 -0
  155. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/record/metricrecord.py +0 -0
  156. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/record/recorddict.py +0 -0
  157. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/record/typeddict.py +0 -0
  158. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/recorddict_compat.py +0 -0
  159. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/retry_invoker.py +0 -0
  160. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  161. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  162. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  163. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  164. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  165. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  166. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  167. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  168. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/serde.py +0 -0
  169. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/serde_utils.py +0 -0
  170. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/telemetry.py +0 -0
  171. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/typing.py +0 -0
  172. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/common/version.py +0 -0
  173. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/compat/__init__.py +0 -0
  174. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/compat/client/__init__.py +0 -0
  175. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/compat/client/app.py +0 -0
  176. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  177. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  178. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/compat/common/__init__.py +0 -0
  179. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/compat/server/__init__.py +0 -0
  180. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/compat/server/app.py +0 -0
  181. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/compat/simulation/__init__.py +0 -0
  182. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/__init__.py +0 -0
  183. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/clientappio_pb2.py +0 -0
  184. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  185. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  186. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  187. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/error_pb2.py +0 -0
  188. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/error_pb2.pyi +0 -0
  189. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/error_pb2_grpc.py +0 -0
  190. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  191. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/exec_pb2.py +0 -0
  192. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/exec_pb2.pyi +0 -0
  193. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/exec_pb2_grpc.py +0 -0
  194. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  195. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/fab_pb2.py +0 -0
  196. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/fab_pb2.pyi +0 -0
  197. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  198. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  199. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  200. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  201. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  202. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  203. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  204. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  205. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/heartbeat_pb2.py +0 -0
  206. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  207. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  208. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  209. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/log_pb2.py +0 -0
  210. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/log_pb2.pyi +0 -0
  211. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/log_pb2_grpc.py +0 -0
  212. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  213. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/message_pb2_grpc.py +0 -0
  214. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  215. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/node_pb2.py +0 -0
  216. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/node_pb2.pyi +0 -0
  217. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/node_pb2_grpc.py +0 -0
  218. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  219. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/recorddict_pb2.py +0 -0
  220. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  221. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  222. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  223. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/run_pb2.py +0 -0
  224. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/run_pb2.pyi +0 -0
  225. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/run_pb2_grpc.py +0 -0
  226. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  227. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  228. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  229. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/simulationio_pb2.py +0 -0
  230. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  231. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  232. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  233. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/transport_pb2.py +0 -0
  234. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/transport_pb2.pyi +0 -0
  235. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  236. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  237. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/py.typed +0 -0
  238. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/__init__.py +0 -0
  239. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/client_manager.py +0 -0
  240. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/client_proxy.py +0 -0
  241. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/compat/__init__.py +0 -0
  242. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/compat/app.py +0 -0
  243. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/compat/app_utils.py +0 -0
  244. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  245. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/compat/legacy_context.py +0 -0
  246. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/criterion.py +0 -0
  247. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  248. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/grid/__init__.py +0 -0
  249. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/grid/grid.py +0 -0
  250. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/grid/grpc_grid.py +0 -0
  251. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/grid/inmemory_grid.py +0 -0
  252. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/history.py +0 -0
  253. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/run_serverapp.py +0 -0
  254. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/server.py +0 -0
  255. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/server_app.py +0 -0
  256. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/server_config.py +0 -0
  257. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/serverapp/__init__.py +0 -0
  258. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/serverapp/app.py +0 -0
  259. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/serverapp_components.py +0 -0
  260. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/__init__.py +0 -0
  261. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/aggregate.py +0 -0
  262. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/bulyan.py +0 -0
  263. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  264. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  265. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  266. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  267. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  268. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/fedadagrad.py +0 -0
  269. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/fedadam.py +0 -0
  270. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/fedavg.py +0 -0
  271. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/fedavg_android.py +0 -0
  272. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/fedavgm.py +0 -0
  273. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/fedmedian.py +0 -0
  274. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/fedopt.py +0 -0
  275. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/fedprox.py +0 -0
  276. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  277. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  278. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  279. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  280. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/fedyogi.py +0 -0
  281. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/krum.py +0 -0
  282. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/qfedavg.py +0 -0
  283. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/strategy/strategy.py +0 -0
  284. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/__init__.py +0 -0
  285. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/ffs/__init__.py +0 -0
  286. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  287. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/ffs/ffs.py +0 -0
  288. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  289. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  290. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  291. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  292. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  293. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  294. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  295. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  296. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  297. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  298. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  299. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  300. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  301. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  302. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  303. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  304. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  305. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  306. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  307. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  308. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  309. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  310. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
  311. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/linkstate/utils.py +0 -0
  312. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  313. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  314. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  315. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  316. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  317. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/typing.py +0 -0
  318. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/utils/__init__.py +0 -0
  319. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/utils/tensorboard.py +0 -0
  320. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/utils/validator.py +0 -0
  321. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/workflow/__init__.py +0 -0
  322. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/workflow/constant.py +0 -0
  323. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/workflow/default_workflows.py +0 -0
  324. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  325. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  326. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  327. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/serverapp/__init__.py +0 -0
  328. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/simulation/__init__.py +0 -0
  329. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/simulation/app.py +0 -0
  330. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/simulation/legacy_app.py +0 -0
  331. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  332. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  333. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  334. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/simulation/ray_transport/utils.py +0 -0
  335. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/simulation/run_simulation.py +0 -0
  336. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/simulation/simulationio_connection.py +0 -0
  337. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/supercore/__init__.py +0 -0
  338. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/supercore/object_store/__init__.py +0 -0
  339. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  340. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/supercore/object_store/object_store.py +0 -0
  341. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
  342. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/superexec/__init__.py +0 -0
  343. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/superexec/app.py +0 -0
  344. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/superexec/deployment.py +0 -0
  345. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/superexec/exec_event_log_interceptor.py +0 -0
  346. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/superexec/exec_grpc.py +0 -0
  347. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/superexec/exec_servicer.py +0 -0
  348. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/superexec/exec_user_auth_interceptor.py +0 -0
  349. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/superexec/executor.py +0 -0
  350. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/superexec/simulation.py +0 -0
  351. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/superlink/__init__.py +0 -0
  352. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/supernode/__init__.py +0 -0
  353. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/supernode/cli/__init__.py +0 -0
  354. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  355. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/supernode/nodestate/__init__.py +0 -0
  356. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  357. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  358. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  359. {flwr_nightly-1.19.0.dev20250528 → flwr_nightly-1.19.0.dev20250529}/py/flwr/supernode/start_client_internal.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.19.0.dev20250528
3
+ Version: 1.19.0.dev20250529
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  License: Apache-2.0
6
6
  Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
@@ -32,14 +32,17 @@ def message_size_mod(
32
32
 
33
33
  This mod logs the size in bytes of the message being transmited.
34
34
  """
35
- message_size_in_bytes = 0
35
+ # Log the size of the incoming message in bytes
36
+ total_bytes = sum(record.count_bytes() for record in msg.content.values())
37
+ log(INFO, "Incoming message size: %i bytes", total_bytes)
36
38
 
37
- for record in msg.content.values():
38
- message_size_in_bytes += record.count_bytes()
39
+ # Call the next layer
40
+ msg = call_next(msg, ctxt)
39
41
 
40
- log(INFO, "Message size: %i bytes", message_size_in_bytes)
41
-
42
- return call_next(msg, ctxt)
42
+ # Log the size of the outgoing message in bytes
43
+ total_bytes = sum(record.count_bytes() for record in msg.content.values())
44
+ log(INFO, "Outgoing message size: %i bytes", total_bytes)
45
+ return msg
43
46
 
44
47
 
45
48
  def arrays_size_mod(
@@ -50,25 +53,41 @@ def arrays_size_mod(
50
53
  This mod logs the number of array elements transmitted in ``ArrayRecord`` objects
51
54
  of the message as well as their sizes in bytes.
52
55
  """
53
- model_size_stats = {}
54
- arrays_size_in_bytes = 0
56
+ # Log the ArrayRecord size statistics and the total size in the incoming message
57
+ array_record_size_stats = _get_array_record_size_stats(msg)
58
+ total_bytes = sum(stat["bytes"] for stat in array_record_size_stats.values())
59
+ if array_record_size_stats:
60
+ log(INFO, "Incoming `ArrayRecord` size statistics:")
61
+ log(INFO, array_record_size_stats)
62
+ log(INFO, "Total array elements received: %i bytes", total_bytes)
63
+
64
+ msg = call_next(msg, ctxt)
65
+
66
+ # Log the ArrayRecord size statistics and the total size in the outgoing message
67
+ array_record_size_stats = _get_array_record_size_stats(msg)
68
+ total_bytes = sum(stat["bytes"] for stat in array_record_size_stats.values())
69
+ if array_record_size_stats:
70
+ log(INFO, "Outgoing `ArrayRecord` size statistics:")
71
+ log(INFO, array_record_size_stats)
72
+ log(INFO, "Total array elements sent: %i bytes", total_bytes)
73
+ return msg
74
+
75
+
76
+ def _get_array_record_size_stats(
77
+ msg: Message,
78
+ ) -> dict[str, dict[str, int]]:
79
+ """Get `ArrayRecord` size statistics from the message."""
80
+ array_record_size_stats = {}
55
81
  for record_name, arr_record in msg.content.array_records.items():
56
82
  arr_record_bytes = arr_record.count_bytes()
57
- arrays_size_in_bytes += arr_record_bytes
58
83
  element_count = 0
59
84
  for array in arr_record.values():
60
85
  element_count += (
61
86
  int(np.prod(array.shape)) if array.shape else array.numpy().size
62
87
  )
63
88
 
64
- model_size_stats[f"{record_name}"] = {
89
+ array_record_size_stats[record_name] = {
65
90
  "elements": element_count,
66
91
  "bytes": arr_record_bytes,
67
92
  }
68
-
69
- if model_size_stats:
70
- log(INFO, model_size_stats)
71
-
72
- log(INFO, "Total array elements transmitted: %i bytes", arrays_size_in_bytes)
73
-
74
- return call_next(msg, ctxt)
93
+ return array_record_size_stats
@@ -33,6 +33,9 @@ class ExecAuthPlugin(ABC):
33
33
  ----------
34
34
  user_auth_config_path : Path
35
35
  Path to the YAML file containing the authentication configuration.
36
+ verify_tls_cert : bool
37
+ Boolean indicating whether to verify the TLS certificate
38
+ when making requests to the server.
36
39
  """
37
40
 
38
41
  @abstractmethod
@@ -69,12 +72,15 @@ class ExecAuthzPlugin(ABC): # pylint: disable=too-few-public-methods
69
72
 
70
73
  Parameters
71
74
  ----------
72
- user_authz_config_path : Path
75
+ user_auth_config_path : Path
73
76
  Path to the YAML file containing the authorization configuration.
77
+ verify_tls_cert : bool
78
+ Boolean indicating whether to verify the TLS certificate
79
+ when making requests to the server.
74
80
  """
75
81
 
76
82
  @abstractmethod
77
- def __init__(self, user_authz_config_path: Path, verify_tls_cert: bool):
83
+ def __init__(self, user_auth_config_path: Path, verify_tls_cert: bool):
78
84
  """Abstract constructor."""
79
85
 
80
86
  @abstractmethod
@@ -24,6 +24,7 @@ from flwr.common.date import now
24
24
  from flwr.common.logger import warn_deprecated_feature
25
25
  from flwr.proto.message_pb2 import Message as ProtoMessage # pylint: disable=E0611
26
26
  from flwr.proto.message_pb2 import Metadata as ProtoMetadata # pylint: disable=E0611
27
+ from flwr.proto.message_pb2 import ObjectIDs # pylint: disable=E0611
27
28
 
28
29
  from ..app.error import Error
29
30
  from ..app.metadata import Metadata
@@ -31,6 +32,7 @@ from .constant import MESSAGE_TTL_TOLERANCE
31
32
  from .inflatable import (
32
33
  InflatableObject,
33
34
  add_header_to_object_body,
35
+ get_desdendant_object_ids,
34
36
  get_object_body,
35
37
  get_object_children_ids_from_object_content,
36
38
  )
@@ -505,3 +507,12 @@ def _check_arg_types( # pylint: disable=too-many-arguments, R0917
505
507
  ):
506
508
  return
507
509
  raise MessageInitializationError()
510
+
511
+
512
+ def get_message_to_descendant_id_mapping(message: Message) -> dict[str, ObjectIDs]:
513
+ """Construct a mapping between message object_id and that of its descendants."""
514
+ return {
515
+ message.object_id: ObjectIDs(
516
+ object_ids=list(get_desdendant_object_ids(message))
517
+ )
518
+ }
@@ -19,7 +19,7 @@ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
19
19
  from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
20
20
 
21
21
 
22
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.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\x1a\n\x12heartbeat_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\"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\"\x87\x02\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\x12L\n\x0fobjects_to_pull\x18\x03 \x03(\x0b\x32\x33.flwr.proto.PullMessagesResponse.ObjectsToPullEntry\x1aK\n\x12ObjectsToPullEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"\x91\x02\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\x12Z\n\x17msg_to_children_mapping\x18\x03 \x03(\x0b\x32\x39.flwr.proto.PushMessagesRequest.MsgToChildrenMappingEntry\x1aR\n\x19MsgToChildrenMappingEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"\xcb\x02\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\x12L\n\x0fobjects_to_push\x18\x03 \x03(\x0b\x32\x33.flwr.proto.PushMessagesResponse.ObjectsToPushEntry\x1a.\n\x0cResultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1aK\n\x12ObjectsToPushEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"\x1e\n\tReconnect\x12\x11\n\treconnect\x18\x01 \x01(\x04\x32\xd7\x05\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\x62\n\x11SendNodeHeartbeat\x12$.flwr.proto.SendNodeHeartbeatRequest\x1a%.flwr.proto.SendNodeHeartbeatResponse\"\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\x12M\n\nPushObject\x12\x1d.flwr.proto.PushObjectRequest\x1a\x1e.flwr.proto.PushObjectResponse\"\x00\x12M\n\nPullObject\x12\x1d.flwr.proto.PullObjectRequest\x1a\x1e.flwr.proto.PullObjectResponse\"\x00\x62\x06proto3')
22
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.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\x1a\n\x12heartbeat_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\"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\"\x87\x02\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\x12L\n\x0fobjects_to_pull\x18\x03 \x03(\x0b\x32\x33.flwr.proto.PullMessagesResponse.ObjectsToPullEntry\x1aK\n\x12ObjectsToPullEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"\x97\x02\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\x12^\n\x19msg_to_descendant_mapping\x18\x03 \x03(\x0b\x32;.flwr.proto.PushMessagesRequest.MsgToDescendantMappingEntry\x1aT\n\x1bMsgToDescendantMappingEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"\xcb\x02\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\x12L\n\x0fobjects_to_push\x18\x03 \x03(\x0b\x32\x33.flwr.proto.PushMessagesResponse.ObjectsToPushEntry\x1a.\n\x0cResultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1aK\n\x12ObjectsToPushEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"\x1e\n\tReconnect\x12\x11\n\treconnect\x18\x01 \x01(\x04\x32\xd7\x05\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\x62\n\x11SendNodeHeartbeat\x12$.flwr.proto.SendNodeHeartbeatRequest\x1a%.flwr.proto.SendNodeHeartbeatResponse\"\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\x12M\n\nPushObject\x12\x1d.flwr.proto.PushObjectRequest\x1a\x1e.flwr.proto.PushObjectResponse\"\x00\x12M\n\nPullObject\x12\x1d.flwr.proto.PullObjectRequest\x1a\x1e.flwr.proto.PullObjectResponse\"\x00\x62\x06proto3')
23
23
 
24
24
  _globals = globals()
25
25
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -28,8 +28,8 @@ if _descriptor._USE_C_DESCRIPTORS == False:
28
28
  DESCRIPTOR._options = None
29
29
  _globals['_PULLMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._options = None
30
30
  _globals['_PULLMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._serialized_options = b'8\001'
31
- _globals['_PUSHMESSAGESREQUEST_MSGTOCHILDRENMAPPINGENTRY']._options = None
32
- _globals['_PUSHMESSAGESREQUEST_MSGTOCHILDRENMAPPINGENTRY']._serialized_options = b'8\001'
31
+ _globals['_PUSHMESSAGESREQUEST_MSGTODESCENDANTMAPPINGENTRY']._options = None
32
+ _globals['_PUSHMESSAGESREQUEST_MSGTODESCENDANTMAPPINGENTRY']._serialized_options = b'8\001'
33
33
  _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._options = None
34
34
  _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_options = b'8\001'
35
35
  _globals['_PUSHMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._options = None
@@ -49,17 +49,17 @@ if _descriptor._USE_C_DESCRIPTORS == False:
49
49
  _globals['_PULLMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._serialized_start=602
50
50
  _globals['_PULLMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._serialized_end=677
51
51
  _globals['_PUSHMESSAGESREQUEST']._serialized_start=680
52
- _globals['_PUSHMESSAGESREQUEST']._serialized_end=953
53
- _globals['_PUSHMESSAGESREQUEST_MSGTOCHILDRENMAPPINGENTRY']._serialized_start=871
54
- _globals['_PUSHMESSAGESREQUEST_MSGTOCHILDRENMAPPINGENTRY']._serialized_end=953
55
- _globals['_PUSHMESSAGESRESPONSE']._serialized_start=956
56
- _globals['_PUSHMESSAGESRESPONSE']._serialized_end=1287
57
- _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_start=1164
58
- _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_end=1210
59
- _globals['_PUSHMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_start=1212
60
- _globals['_PUSHMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_end=1287
61
- _globals['_RECONNECT']._serialized_start=1289
62
- _globals['_RECONNECT']._serialized_end=1319
63
- _globals['_FLEET']._serialized_start=1322
64
- _globals['_FLEET']._serialized_end=2049
52
+ _globals['_PUSHMESSAGESREQUEST']._serialized_end=959
53
+ _globals['_PUSHMESSAGESREQUEST_MSGTODESCENDANTMAPPINGENTRY']._serialized_start=875
54
+ _globals['_PUSHMESSAGESREQUEST_MSGTODESCENDANTMAPPINGENTRY']._serialized_end=959
55
+ _globals['_PUSHMESSAGESRESPONSE']._serialized_start=962
56
+ _globals['_PUSHMESSAGESRESPONSE']._serialized_end=1293
57
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_start=1170
58
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_end=1216
59
+ _globals['_PUSHMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_start=1218
60
+ _globals['_PUSHMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_end=1293
61
+ _globals['_RECONNECT']._serialized_start=1295
62
+ _globals['_RECONNECT']._serialized_end=1325
63
+ _globals['_FLEET']._serialized_start=1328
64
+ _globals['_FLEET']._serialized_end=2055
65
65
  # @@protoc_insertion_point(module_scope)
@@ -115,7 +115,7 @@ global___PullMessagesResponse = PullMessagesResponse
115
115
  class PushMessagesRequest(google.protobuf.message.Message):
116
116
  """PushMessages messages"""
117
117
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
118
- class MsgToChildrenMappingEntry(google.protobuf.message.Message):
118
+ class MsgToDescendantMappingEntry(google.protobuf.message.Message):
119
119
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
120
120
  KEY_FIELD_NUMBER: builtins.int
121
121
  VALUE_FIELD_NUMBER: builtins.int
@@ -132,21 +132,21 @@ class PushMessagesRequest(google.protobuf.message.Message):
132
132
 
133
133
  NODE_FIELD_NUMBER: builtins.int
134
134
  MESSAGES_LIST_FIELD_NUMBER: builtins.int
135
- MSG_TO_CHILDREN_MAPPING_FIELD_NUMBER: builtins.int
135
+ MSG_TO_DESCENDANT_MAPPING_FIELD_NUMBER: builtins.int
136
136
  @property
137
137
  def node(self) -> flwr.proto.node_pb2.Node: ...
138
138
  @property
139
139
  def messages_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.Message]: ...
140
140
  @property
141
- def msg_to_children_mapping(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.message_pb2.ObjectIDs]: ...
141
+ def msg_to_descendant_mapping(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.message_pb2.ObjectIDs]: ...
142
142
  def __init__(self,
143
143
  *,
144
144
  node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
145
145
  messages_list: typing.Optional[typing.Iterable[flwr.proto.message_pb2.Message]] = ...,
146
- msg_to_children_mapping: typing.Optional[typing.Mapping[typing.Text, flwr.proto.message_pb2.ObjectIDs]] = ...,
146
+ msg_to_descendant_mapping: typing.Optional[typing.Mapping[typing.Text, flwr.proto.message_pb2.ObjectIDs]] = ...,
147
147
  ) -> None: ...
148
148
  def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
149
- def ClearField(self, field_name: typing_extensions.Literal["messages_list",b"messages_list","msg_to_children_mapping",b"msg_to_children_mapping","node",b"node"]) -> None: ...
149
+ def ClearField(self, field_name: typing_extensions.Literal["messages_list",b"messages_list","msg_to_descendant_mapping",b"msg_to_descendant_mapping","node",b"node"]) -> None: ...
150
150
  global___PushMessagesRequest = PushMessagesRequest
151
151
 
152
152
  class PushMessagesResponse(google.protobuf.message.Message):
@@ -18,7 +18,7 @@ from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
18
18
  from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
19
19
 
20
20
 
21
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/message.proto\x12\nflwr.proto\x1a\x16\x66lwr/proto/error.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x15\x66lwr/proto/node.proto\"|\n\x07Message\x12&\n\x08metadata\x18\x01 \x01(\x0b\x32\x14.flwr.proto.Metadata\x12\'\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x16.flwr.proto.RecordDict\x12 \n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.flwr.proto.Error\"\xd0\x02\n\x07\x43ontext\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0f\n\x07node_id\x18\x02 \x01(\x04\x12\x38\n\x0bnode_config\x18\x03 \x03(\x0b\x32#.flwr.proto.Context.NodeConfigEntry\x12%\n\x05state\x18\x04 \x01(\x0b\x32\x16.flwr.proto.RecordDict\x12\x36\n\nrun_config\x18\x05 \x03(\x0b\x32\".flwr.proto.Context.RunConfigEntry\x1a\x45\n\x0fNodeConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\x44\n\x0eRunConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\xbe\x01\n\x08Metadata\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x12\n\nmessage_id\x18\x02 \x01(\t\x12\x13\n\x0bsrc_node_id\x18\x03 \x01(\x04\x12\x13\n\x0b\x64st_node_id\x18\x04 \x01(\x04\x12\x1b\n\x13reply_to_message_id\x18\x05 \x01(\t\x12\x10\n\x08group_id\x18\x06 \x01(\t\x12\x0b\n\x03ttl\x18\x07 \x01(\x01\x12\x14\n\x0cmessage_type\x18\x08 \x01(\t\x12\x12\n\ncreated_at\x18\t \x01(\x01\"\x1e\n\tObjectIDs\x12\x11\n\tobject_id\x18\x01 \x03(\t\"^\n\x11PushObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x11\n\tobject_id\x18\x02 \x01(\t\x12\x16\n\x0eobject_content\x18\x03 \x01(\x0c\"\x14\n\x12PushObjectResponse\"F\n\x11PullObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x11\n\tobject_id\x18\x02 \x01(\t\",\n\x12PullObjectResponse\x12\x16\n\x0eobject_content\x18\x01 \x01(\x0c\x62\x06proto3')
21
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/message.proto\x12\nflwr.proto\x1a\x16\x66lwr/proto/error.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x15\x66lwr/proto/node.proto\"|\n\x07Message\x12&\n\x08metadata\x18\x01 \x01(\x0b\x32\x14.flwr.proto.Metadata\x12\'\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x16.flwr.proto.RecordDict\x12 \n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.flwr.proto.Error\"\xd0\x02\n\x07\x43ontext\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0f\n\x07node_id\x18\x02 \x01(\x04\x12\x38\n\x0bnode_config\x18\x03 \x03(\x0b\x32#.flwr.proto.Context.NodeConfigEntry\x12%\n\x05state\x18\x04 \x01(\x0b\x32\x16.flwr.proto.RecordDict\x12\x36\n\nrun_config\x18\x05 \x03(\x0b\x32\".flwr.proto.Context.RunConfigEntry\x1a\x45\n\x0fNodeConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\x44\n\x0eRunConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\xbe\x01\n\x08Metadata\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x12\n\nmessage_id\x18\x02 \x01(\t\x12\x13\n\x0bsrc_node_id\x18\x03 \x01(\x04\x12\x13\n\x0b\x64st_node_id\x18\x04 \x01(\x04\x12\x1b\n\x13reply_to_message_id\x18\x05 \x01(\t\x12\x10\n\x08group_id\x18\x06 \x01(\t\x12\x0b\n\x03ttl\x18\x07 \x01(\x01\x12\x14\n\x0cmessage_type\x18\x08 \x01(\t\x12\x12\n\ncreated_at\x18\t \x01(\x01\"\x1f\n\tObjectIDs\x12\x12\n\nobject_ids\x18\x01 \x03(\t\"^\n\x11PushObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x11\n\tobject_id\x18\x02 \x01(\t\x12\x16\n\x0eobject_content\x18\x03 \x01(\x0c\"\x14\n\x12PushObjectResponse\"F\n\x11PullObjectRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x11\n\tobject_id\x18\x02 \x01(\t\",\n\x12PullObjectResponse\x12\x16\n\x0eobject_content\x18\x01 \x01(\x0c\x62\x06proto3')
22
22
 
23
23
  _globals = globals()
24
24
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -40,13 +40,13 @@ if _descriptor._USE_C_DESCRIPTORS == False:
40
40
  _globals['_METADATA']._serialized_start=610
41
41
  _globals['_METADATA']._serialized_end=800
42
42
  _globals['_OBJECTIDS']._serialized_start=802
43
- _globals['_OBJECTIDS']._serialized_end=832
44
- _globals['_PUSHOBJECTREQUEST']._serialized_start=834
45
- _globals['_PUSHOBJECTREQUEST']._serialized_end=928
46
- _globals['_PUSHOBJECTRESPONSE']._serialized_start=930
47
- _globals['_PUSHOBJECTRESPONSE']._serialized_end=950
48
- _globals['_PULLOBJECTREQUEST']._serialized_start=952
49
- _globals['_PULLOBJECTREQUEST']._serialized_end=1022
50
- _globals['_PULLOBJECTRESPONSE']._serialized_start=1024
51
- _globals['_PULLOBJECTRESPONSE']._serialized_end=1068
43
+ _globals['_OBJECTIDS']._serialized_end=833
44
+ _globals['_PUSHOBJECTREQUEST']._serialized_start=835
45
+ _globals['_PUSHOBJECTREQUEST']._serialized_end=929
46
+ _globals['_PUSHOBJECTRESPONSE']._serialized_start=931
47
+ _globals['_PUSHOBJECTRESPONSE']._serialized_end=951
48
+ _globals['_PULLOBJECTREQUEST']._serialized_start=953
49
+ _globals['_PULLOBJECTREQUEST']._serialized_end=1023
50
+ _globals['_PULLOBJECTRESPONSE']._serialized_start=1025
51
+ _globals['_PULLOBJECTRESPONSE']._serialized_end=1069
52
52
  # @@protoc_insertion_point(module_scope)
@@ -130,14 +130,14 @@ global___Metadata = Metadata
130
130
 
131
131
  class ObjectIDs(google.protobuf.message.Message):
132
132
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
133
- OBJECT_ID_FIELD_NUMBER: builtins.int
133
+ OBJECT_IDS_FIELD_NUMBER: builtins.int
134
134
  @property
135
- def object_id(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
135
+ def object_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
136
136
  def __init__(self,
137
137
  *,
138
- object_id: typing.Optional[typing.Iterable[typing.Text]] = ...,
138
+ object_ids: typing.Optional[typing.Iterable[typing.Text]] = ...,
139
139
  ) -> None: ...
140
- def ClearField(self, field_name: typing_extensions.Literal["object_id",b"object_id"]) -> None: ...
140
+ def ClearField(self, field_name: typing_extensions.Literal["object_ids",b"object_ids"]) -> None: ...
141
141
  global___ObjectIDs = ObjectIDs
142
142
 
143
143
  class PushObjectRequest(google.protobuf.message.Message):
@@ -0,0 +1,64 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: flwr/proto/serverappio.proto
4
+ # Protobuf Python Version: 4.25.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from flwr.proto import heartbeat_pb2 as flwr_dot_proto_dot_heartbeat__pb2
16
+ from flwr.proto import log_pb2 as flwr_dot_proto_dot_log__pb2
17
+ from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
18
+ from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
19
+ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
20
+ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
21
+
22
+
23
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lwr/proto/serverappio.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x14\x66lwr/proto/log.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x18\x66lwr/proto/message.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\"!\n\x0fGetNodesRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"3\n\x10GetNodesResponse\x12\x1f\n\x05nodes\x18\x01 \x03(\x0b\x32\x10.flwr.proto.Node\"\x8d\x02\n\x16PushInsMessagesRequest\x12*\n\rmessages_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.Message\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x61\n\x19msg_to_descendant_mapping\x18\x03 \x03(\x0b\x32>.flwr.proto.PushInsMessagesRequest.MsgToDescendantMappingEntry\x1aT\n\x1bMsgToDescendantMappingEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"\xcc\x01\n\x17PushInsMessagesResponse\x12\x13\n\x0bmessage_ids\x18\x01 \x03(\t\x12O\n\x0fobjects_to_push\x18\x02 \x03(\x0b\x32\x36.flwr.proto.PushInsMessagesResponse.ObjectsToPushEntry\x1aK\n\x12ObjectsToPushEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"=\n\x16PullResMessagesRequest\x12\x13\n\x0bmessage_ids\x18\x01 \x03(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\"\xe3\x01\n\x17PullResMessagesResponse\x12*\n\rmessages_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.Message\x12O\n\x0fobjects_to_pull\x18\x02 \x03(\x0b\x32\x36.flwr.proto.PullResMessagesResponse.ObjectsToPullEntry\x1aK\n\x12ObjectsToPullEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"\x1c\n\x1aPullServerAppInputsRequest\"\x7f\n\x1bPullServerAppInputsResponse\x12$\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x13.flwr.proto.Context\x12\x1c\n\x03run\x18\x02 \x01(\x0b\x32\x0f.flwr.proto.Run\x12\x1c\n\x03\x66\x61\x62\x18\x03 \x01(\x0b\x32\x0f.flwr.proto.Fab\"S\n\x1bPushServerAppOutputsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12$\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x13.flwr.proto.Context\"\x1e\n\x1cPushServerAppOutputsResponse2\xe4\x08\n\x0bServerAppIo\x12G\n\x08GetNodes\x12\x1b.flwr.proto.GetNodesRequest\x1a\x1c.flwr.proto.GetNodesResponse\"\x00\x12Y\n\x0cPushMessages\x12\".flwr.proto.PushInsMessagesRequest\x1a#.flwr.proto.PushInsMessagesResponse\"\x00\x12Y\n\x0cPullMessages\x12\".flwr.proto.PullResMessagesRequest\x1a#.flwr.proto.PullResMessagesResponse\"\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\x12h\n\x13PullServerAppInputs\x12&.flwr.proto.PullServerAppInputsRequest\x1a\'.flwr.proto.PullServerAppInputsResponse\"\x00\x12k\n\x14PushServerAppOutputs\x12\'.flwr.proto.PushServerAppOutputsRequest\x1a(.flwr.proto.PushServerAppOutputsResponse\"\x00\x12\\\n\x0fUpdateRunStatus\x12\".flwr.proto.UpdateRunStatusRequest\x1a#.flwr.proto.UpdateRunStatusResponse\"\x00\x12S\n\x0cGetRunStatus\x12\x1f.flwr.proto.GetRunStatusRequest\x1a .flwr.proto.GetRunStatusResponse\"\x00\x12G\n\x08PushLogs\x12\x1b.flwr.proto.PushLogsRequest\x1a\x1c.flwr.proto.PushLogsResponse\"\x00\x12_\n\x10SendAppHeartbeat\x12#.flwr.proto.SendAppHeartbeatRequest\x1a$.flwr.proto.SendAppHeartbeatResponse\"\x00\x12M\n\nPushObject\x12\x1d.flwr.proto.PushObjectRequest\x1a\x1e.flwr.proto.PushObjectResponse\"\x00\x12M\n\nPullObject\x12\x1d.flwr.proto.PullObjectRequest\x1a\x1e.flwr.proto.PullObjectResponse\"\x00\x62\x06proto3')
24
+
25
+ _globals = globals()
26
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
27
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.serverappio_pb2', _globals)
28
+ if _descriptor._USE_C_DESCRIPTORS == False:
29
+ DESCRIPTOR._options = None
30
+ _globals['_PUSHINSMESSAGESREQUEST_MSGTODESCENDANTMAPPINGENTRY']._options = None
31
+ _globals['_PUSHINSMESSAGESREQUEST_MSGTODESCENDANTMAPPINGENTRY']._serialized_options = b'8\001'
32
+ _globals['_PUSHINSMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._options = None
33
+ _globals['_PUSHINSMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_options = b'8\001'
34
+ _globals['_PULLRESMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._options = None
35
+ _globals['_PULLRESMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._serialized_options = b'8\001'
36
+ _globals['_GETNODESREQUEST']._serialized_start=187
37
+ _globals['_GETNODESREQUEST']._serialized_end=220
38
+ _globals['_GETNODESRESPONSE']._serialized_start=222
39
+ _globals['_GETNODESRESPONSE']._serialized_end=273
40
+ _globals['_PUSHINSMESSAGESREQUEST']._serialized_start=276
41
+ _globals['_PUSHINSMESSAGESREQUEST']._serialized_end=545
42
+ _globals['_PUSHINSMESSAGESREQUEST_MSGTODESCENDANTMAPPINGENTRY']._serialized_start=461
43
+ _globals['_PUSHINSMESSAGESREQUEST_MSGTODESCENDANTMAPPINGENTRY']._serialized_end=545
44
+ _globals['_PUSHINSMESSAGESRESPONSE']._serialized_start=548
45
+ _globals['_PUSHINSMESSAGESRESPONSE']._serialized_end=752
46
+ _globals['_PUSHINSMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_start=677
47
+ _globals['_PUSHINSMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_end=752
48
+ _globals['_PULLRESMESSAGESREQUEST']._serialized_start=754
49
+ _globals['_PULLRESMESSAGESREQUEST']._serialized_end=815
50
+ _globals['_PULLRESMESSAGESRESPONSE']._serialized_start=818
51
+ _globals['_PULLRESMESSAGESRESPONSE']._serialized_end=1045
52
+ _globals['_PULLRESMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._serialized_start=970
53
+ _globals['_PULLRESMESSAGESRESPONSE_OBJECTSTOPULLENTRY']._serialized_end=1045
54
+ _globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_start=1047
55
+ _globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_end=1075
56
+ _globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_start=1077
57
+ _globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_end=1204
58
+ _globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_start=1206
59
+ _globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_end=1289
60
+ _globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_start=1291
61
+ _globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_end=1321
62
+ _globals['_SERVERAPPIO']._serialized_start=1324
63
+ _globals['_SERVERAPPIO']._serialized_end=2448
64
+ # @@protoc_insertion_point(module_scope)
@@ -42,7 +42,7 @@ global___GetNodesResponse = GetNodesResponse
42
42
  class PushInsMessagesRequest(google.protobuf.message.Message):
43
43
  """PushMessages messages"""
44
44
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
45
- class MsgToChildrenMappingEntry(google.protobuf.message.Message):
45
+ class MsgToDescendantMappingEntry(google.protobuf.message.Message):
46
46
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
47
47
  KEY_FIELD_NUMBER: builtins.int
48
48
  VALUE_FIELD_NUMBER: builtins.int
@@ -59,19 +59,19 @@ class PushInsMessagesRequest(google.protobuf.message.Message):
59
59
 
60
60
  MESSAGES_LIST_FIELD_NUMBER: builtins.int
61
61
  RUN_ID_FIELD_NUMBER: builtins.int
62
- MSG_TO_CHILDREN_MAPPING_FIELD_NUMBER: builtins.int
62
+ MSG_TO_DESCENDANT_MAPPING_FIELD_NUMBER: builtins.int
63
63
  @property
64
64
  def messages_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.Message]: ...
65
65
  run_id: builtins.int
66
66
  @property
67
- def msg_to_children_mapping(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.message_pb2.ObjectIDs]: ...
67
+ def msg_to_descendant_mapping(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.message_pb2.ObjectIDs]: ...
68
68
  def __init__(self,
69
69
  *,
70
70
  messages_list: typing.Optional[typing.Iterable[flwr.proto.message_pb2.Message]] = ...,
71
71
  run_id: builtins.int = ...,
72
- msg_to_children_mapping: typing.Optional[typing.Mapping[typing.Text, flwr.proto.message_pb2.ObjectIDs]] = ...,
72
+ msg_to_descendant_mapping: typing.Optional[typing.Mapping[typing.Text, flwr.proto.message_pb2.ObjectIDs]] = ...,
73
73
  ) -> None: ...
74
- def ClearField(self, field_name: typing_extensions.Literal["messages_list",b"messages_list","msg_to_children_mapping",b"msg_to_children_mapping","run_id",b"run_id"]) -> None: ...
74
+ def ClearField(self, field_name: typing_extensions.Literal["messages_list",b"messages_list","msg_to_descendant_mapping",b"msg_to_descendant_mapping","run_id",b"run_id"]) -> None: ...
75
75
  global___PushInsMessagesRequest = PushInsMessagesRequest
76
76
 
77
77
  class PushInsMessagesResponse(google.protobuf.message.Message):
@@ -27,7 +27,7 @@ from collections.abc import Sequence
27
27
  from logging import DEBUG, INFO, WARN
28
28
  from pathlib import Path
29
29
  from time import sleep
30
- from typing import Any, Optional
30
+ from typing import Any, Callable, Optional, Union, cast
31
31
 
32
32
  import grpc
33
33
  import yaml
@@ -155,17 +155,14 @@ def run_superlink() -> None:
155
155
  event_log_plugin: Optional[EventLogWriterPlugin] = None
156
156
  # Load the auth plugin if the args.user_auth_config is provided
157
157
  if cfg_path := getattr(args, "user_auth_config", None):
158
- auth_plugin = _try_obtain_exec_auth_plugin(Path(cfg_path), verify_tls_cert)
158
+ # pylint: disable=unused-variable
159
+ auth_plugin, authz_plugin = _try_obtain_exec_auth_plugins( # noqa: F841
160
+ Path(cfg_path), verify_tls_cert
161
+ )
162
+ # pylint: enable=unused-variable
159
163
  # Enable event logging if the args.enable_event_log is True
160
164
  if args.enable_event_log:
161
165
  event_log_plugin = _try_obtain_exec_event_log_writer_plugin()
162
- # Enable authorization if the args.enable_authorization is True
163
- if args.enable_authorization:
164
- # pylint: disable=unused-variable
165
- authz_plugin = _try_obtain_exec_authz_plugin( # noqa: F841
166
- Path(cfg_path), verify_tls_cert
167
- )
168
- # pylint: enable=unused-variable
169
166
 
170
167
  # Initialize StateFactory
171
168
  state_factory = LinkStateFactory(args.database)
@@ -258,6 +255,7 @@ def run_superlink() -> None:
258
255
  args.ssl_certfile,
259
256
  state_factory,
260
257
  ffs_factory,
258
+ objectstore_factory,
261
259
  num_workers,
262
260
  ),
263
261
  daemon=True,
@@ -483,62 +481,58 @@ def _try_load_public_keys_node_authentication(
483
481
  return node_public_keys
484
482
 
485
483
 
486
- def _try_obtain_exec_auth_plugin(
484
+ def _try_obtain_exec_auth_plugins(
487
485
  config_path: Path, verify_tls_cert: bool
488
- ) -> Optional[ExecAuthPlugin]:
486
+ ) -> tuple[ExecAuthPlugin, ExecAuthzPlugin]:
487
+ """Obtain Exec API authentication and authorization plugins."""
489
488
  # Load YAML file
490
489
  with config_path.open("r", encoding="utf-8") as file:
491
490
  config: dict[str, Any] = yaml.safe_load(file)
492
491
 
493
- # Load authentication configuration
494
- auth_config: dict[str, Any] = config.get("authentication", {})
495
- auth_type: str = auth_config.get(AUTH_TYPE_YAML_KEY, "")
496
-
497
- # Load authentication plugin
498
- try:
499
- all_plugins: dict[str, type[ExecAuthPlugin]] = get_exec_auth_plugins()
500
- auth_plugin_class = all_plugins[auth_type]
501
- return auth_plugin_class(
502
- user_auth_config_path=config_path, verify_tls_cert=verify_tls_cert
503
- )
504
- except KeyError:
505
- if auth_type != "":
506
- sys.exit(
507
- f'Authentication type "{auth_type}" is not supported. '
508
- "Please provide a valid authentication type in the configuration."
492
+ def _load_plugin(
493
+ section: str,
494
+ yaml_key: str,
495
+ loader: Callable[[], dict[str, type[Union[ExecAuthPlugin, ExecAuthzPlugin]]]],
496
+ ) -> Union[ExecAuthPlugin, ExecAuthzPlugin]:
497
+ section_cfg = config.get(section, {})
498
+ auth_plugin_name = section_cfg.get(yaml_key, "")
499
+ try:
500
+ plugins = loader()
501
+ plugin_cls = plugins[auth_plugin_name]
502
+ return plugin_cls(
503
+ user_auth_config_path=config_path, verify_tls_cert=verify_tls_cert
509
504
  )
510
- sys.exit("No authentication type is provided in the configuration.")
511
- except NotImplementedError:
512
- sys.exit("No authentication plugins are currently supported.")
513
-
514
-
515
- def _try_obtain_exec_authz_plugin(
516
- config_path: Path, verify_tls_cert: bool
517
- ) -> Optional[ExecAuthzPlugin]:
518
- # Load YAML file
519
- with config_path.open("r", encoding="utf-8") as file:
520
- config: dict[str, Any] = yaml.safe_load(file)
505
+ except KeyError:
506
+ if auth_plugin_name:
507
+ sys.exit(
508
+ f"{yaml_key}: {auth_plugin_name} is not supported. "
509
+ f"Please provide a valid {section} type in the configuration."
510
+ )
511
+ sys.exit(f"No {section} type is provided in the configuration.")
512
+ except NotImplementedError:
513
+ sys.exit(f"No {section} plugins are currently supported.")
521
514
 
522
- # Load authentication configuration
523
- authz_config: dict[str, Any] = config.get("authorization", {})
524
- authz_type: str = authz_config.get(AUTHZ_TYPE_YAML_KEY, "")
515
+ # Load authentication plugin
516
+ auth_plugin = cast(
517
+ ExecAuthPlugin,
518
+ _load_plugin(
519
+ section="authentication",
520
+ yaml_key=AUTH_TYPE_YAML_KEY,
521
+ loader=get_exec_auth_plugins,
522
+ ),
523
+ )
525
524
 
526
525
  # Load authorization plugin
527
- try:
528
- all_plugins: dict[str, type[ExecAuthzPlugin]] = get_exec_authz_plugins()
529
- authz_plugin_class = all_plugins[authz_type]
530
- return authz_plugin_class(
531
- user_authz_config_path=config_path, verify_tls_cert=verify_tls_cert
532
- )
533
- except KeyError:
534
- if authz_type != "":
535
- sys.exit(
536
- f'Authentication type "{authz_type}" is not supported. '
537
- "Please provide a valid authorization type in the configuration."
538
- )
539
- sys.exit("No authorization type is provided in the configuration.")
540
- except NotImplementedError:
541
- sys.exit("No authorization plugins are currently supported.")
526
+ authz_plugin = cast(
527
+ ExecAuthzPlugin,
528
+ _load_plugin(
529
+ section="authorization",
530
+ yaml_key=AUTHZ_TYPE_YAML_KEY,
531
+ loader=get_exec_authz_plugins,
532
+ ),
533
+ )
534
+
535
+ return auth_plugin, authz_plugin
542
536
 
543
537
 
544
538
  def _try_obtain_exec_event_log_writer_plugin() -> Optional[EventLogWriterPlugin]:
@@ -636,6 +630,7 @@ def _run_fleet_api_rest(
636
630
  ssl_certfile: Optional[str],
637
631
  state_factory: LinkStateFactory,
638
632
  ffs_factory: FfsFactory,
633
+ objectstore_factory: ObjectStoreFactory,
639
634
  num_workers: int,
640
635
  ) -> None:
641
636
  """Run ServerAppIo API (REST-based)."""
@@ -651,6 +646,7 @@ def _run_fleet_api_rest(
651
646
  # See: https://www.starlette.io/applications/#accessing-the-app-instance
652
647
  fast_api_app.state.STATE_FACTORY = state_factory
653
648
  fast_api_app.state.FFS_FACTORY = ffs_factory
649
+ fast_api_app.state.OBJECTSTORE_FACTORY = objectstore_factory
654
650
 
655
651
  uvicorn.run(
656
652
  app="flwr.server.superlink.fleet.rest_rere.rest_api:app",
@@ -133,6 +133,7 @@ class FleetServicer(fleet_pb2_grpc.FleetServicer):
133
133
  res = message_handler.push_messages(
134
134
  request=request,
135
135
  state=self.state_factory.state(),
136
+ store=self.objectstore_factory.store(),
136
137
  )
137
138
  except InvalidRunStatusException as e:
138
139
  abort_grpc_context(e.message, context)
@@ -51,6 +51,9 @@ from flwr.proto.run_pb2 import ( # pylint: disable=E0611
51
51
  from flwr.server.superlink.ffs.ffs import Ffs
52
52
  from flwr.server.superlink.linkstate import LinkState
53
53
  from flwr.server.superlink.utils import check_abort
54
+ from flwr.supercore.object_store import ObjectStore
55
+
56
+ from ...utils import store_mapping_and_register_objects
54
57
 
55
58
 
56
59
  def create_node(
@@ -105,7 +108,9 @@ def pull_messages(
105
108
 
106
109
 
107
110
  def push_messages(
108
- request: PushMessagesRequest, state: LinkState
111
+ request: PushMessagesRequest,
112
+ state: LinkState,
113
+ store: ObjectStore,
109
114
  ) -> PushMessagesResponse:
110
115
  """Push Messages handler."""
111
116
  # Convert Message from proto
@@ -123,10 +128,14 @@ def push_messages(
123
128
  # Store Message in State
124
129
  message_id: Optional[str] = state.store_message_res(message=msg)
125
130
 
131
+ # Store Message object to descendants mapping and preregister objects
132
+ objects_to_push = store_mapping_and_register_objects(store, request=request)
133
+
126
134
  # Build response
127
135
  response = PushMessagesResponse(
128
136
  reconnect=Reconnect(reconnect=5),
129
137
  results={str(message_id): 0},
138
+ objects_to_push=objects_to_push,
130
139
  )
131
140
  return response
132
141
 
@@ -43,6 +43,7 @@ from flwr.server.superlink.ffs.ffs import Ffs
43
43
  from flwr.server.superlink.ffs.ffs_factory import FfsFactory
44
44
  from flwr.server.superlink.fleet.message_handler import message_handler
45
45
  from flwr.server.superlink.linkstate import LinkState, LinkStateFactory
46
+ from flwr.supercore.object_store import ObjectStore, ObjectStoreFactory
46
47
 
47
48
  try:
48
49
  from starlette.applications import Starlette
@@ -123,9 +124,10 @@ async def push_message(request: PushMessagesRequest) -> PushMessagesResponse:
123
124
  """Pull PushMessages."""
124
125
  # Get state from app
125
126
  state: LinkState = cast(LinkStateFactory, app.state.STATE_FACTORY).state()
127
+ store: ObjectStore = cast(ObjectStoreFactory, app.state.STATE_FACTORY).store()
126
128
 
127
129
  # Handle message
128
- return message_handler.push_messages(request=request, state=state)
130
+ return message_handler.push_messages(request=request, state=state, store=store)
129
131
 
130
132
 
131
133
  @rest_request_response(SendNodeHeartbeatRequest)