flwr-nightly 1.19.0.dev20250605__tar.gz → 1.19.0.dev20250606__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 (363) hide show
  1. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/PKG-INFO +1 -1
  2. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/grpc_rere_client/connection.py +12 -6
  3. flwr_nightly-1.19.0.dev20250606/py/flwr/common/inflatable_grpc_utils.py +227 -0
  4. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/grid/grpc_grid.py +12 -6
  5. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/pyproject.toml +1 -1
  6. flwr_nightly-1.19.0.dev20250605/py/flwr/common/inflatable_grpc_utils.py +0 -122
  7. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/README.md +0 -0
  8. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/__init__.py +0 -0
  9. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/app/__init__.py +0 -0
  10. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/app/error.py +0 -0
  11. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/app/metadata.py +0 -0
  12. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/__init__.py +0 -0
  13. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/app.py +0 -0
  14. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  15. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
  16. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/build.py +0 -0
  17. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
  18. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/config_utils.py +0 -0
  19. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/constant.py +0 -0
  20. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/example.py +0 -0
  21. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/install.py +0 -0
  22. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/log.py +0 -0
  23. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/login/__init__.py +0 -0
  24. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/login/login.py +0 -0
  25. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/ls.py +0 -0
  26. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/__init__.py +0 -0
  27. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/new.py +0 -0
  28. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/__init__.py +0 -0
  29. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  30. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  31. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  32. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  33. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  34. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/__init__.py +0 -0
  35. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  36. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  37. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  38. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  39. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  40. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  41. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  42. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  43. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  44. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  45. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  46. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  47. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  48. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  49. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  50. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  51. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  52. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  53. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  54. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  55. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  56. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  57. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  58. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  59. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  60. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  61. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  62. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  63. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  64. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  65. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  66. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  67. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  68. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  69. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  70. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  71. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  72. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  73. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  74. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  75. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  76. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  77. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  78. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  79. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  80. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/run/__init__.py +0 -0
  81. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/run/run.py +0 -0
  82. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/stop.py +0 -0
  83. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/utils.py +0 -0
  84. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/__init__.py +0 -0
  85. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/client.py +0 -0
  86. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/client_app.py +0 -0
  87. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/clientapp/__init__.py +0 -0
  88. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/clientapp/utils.py +0 -0
  89. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  90. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  91. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  92. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  93. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  94. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  95. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/message_handler/__init__.py +0 -0
  96. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/message_handler/message_handler.py +0 -0
  97. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/mod/__init__.py +0 -0
  98. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/mod/centraldp_mods.py +0 -0
  99. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/mod/comms_mods.py +0 -0
  100. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/mod/localdp_mod.py +0 -0
  101. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  102. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  103. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  104. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/mod/utils.py +0 -0
  105. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/numpy_client.py +0 -0
  106. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/rest_client/__init__.py +0 -0
  107. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/rest_client/connection.py +0 -0
  108. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/run_info_store.py +0 -0
  109. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/typing.py +0 -0
  110. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/clientapp/__init__.py +0 -0
  111. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/__init__.py +0 -0
  112. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/address.py +0 -0
  113. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/args.py +0 -0
  114. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/auth_plugin/__init__.py +0 -0
  115. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/auth_plugin/auth_plugin.py +0 -0
  116. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/config.py +0 -0
  117. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/constant.py +0 -0
  118. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/context.py +0 -0
  119. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/date.py +0 -0
  120. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/differential_privacy.py +0 -0
  121. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/differential_privacy_constants.py +0 -0
  122. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/dp.py +0 -0
  123. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  124. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  125. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/exit/__init__.py +0 -0
  126. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/exit/exit.py +0 -0
  127. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/exit/exit_code.py +0 -0
  128. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/exit_handlers.py +0 -0
  129. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/grpc.py +0 -0
  130. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/heartbeat.py +0 -0
  131. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/inflatable.py +0 -0
  132. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/logger.py +0 -0
  133. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/message.py +0 -0
  134. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/object_ref.py +0 -0
  135. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/parameter.py +0 -0
  136. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/pyproject.py +0 -0
  137. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/record/__init__.py +0 -0
  138. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/record/array.py +0 -0
  139. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/record/arrayrecord.py +0 -0
  140. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/record/configrecord.py +0 -0
  141. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/record/conversion_utils.py +0 -0
  142. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/record/metricrecord.py +0 -0
  143. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/record/recorddict.py +0 -0
  144. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/record/typeddict.py +0 -0
  145. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/recorddict_compat.py +0 -0
  146. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/retry_invoker.py +0 -0
  147. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  148. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  149. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  150. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  151. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  152. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  153. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  154. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  155. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/serde.py +0 -0
  156. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/serde_utils.py +0 -0
  157. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/telemetry.py +0 -0
  158. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/typing.py +0 -0
  159. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/version.py +0 -0
  160. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/__init__.py +0 -0
  161. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/client/__init__.py +0 -0
  162. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/client/app.py +0 -0
  163. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  164. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  165. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/common/__init__.py +0 -0
  166. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/server/__init__.py +0 -0
  167. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/server/app.py +0 -0
  168. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/simulation/__init__.py +0 -0
  169. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/__init__.py +0 -0
  170. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/clientappio_pb2.py +0 -0
  171. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  172. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  173. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  174. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/error_pb2.py +0 -0
  175. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/error_pb2.pyi +0 -0
  176. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/error_pb2_grpc.py +0 -0
  177. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  178. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/exec_pb2.py +0 -0
  179. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/exec_pb2.pyi +0 -0
  180. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/exec_pb2_grpc.py +0 -0
  181. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  182. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/fab_pb2.py +0 -0
  183. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/fab_pb2.pyi +0 -0
  184. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  185. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  186. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/fleet_pb2.py +0 -0
  187. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/fleet_pb2.pyi +0 -0
  188. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  189. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  190. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  191. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  192. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  193. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  194. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/heartbeat_pb2.py +0 -0
  195. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  196. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  197. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  198. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/log_pb2.py +0 -0
  199. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/log_pb2.pyi +0 -0
  200. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/log_pb2_grpc.py +0 -0
  201. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  202. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/message_pb2.py +0 -0
  203. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/message_pb2.pyi +0 -0
  204. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/message_pb2_grpc.py +0 -0
  205. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  206. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/node_pb2.py +0 -0
  207. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/node_pb2.pyi +0 -0
  208. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/node_pb2_grpc.py +0 -0
  209. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  210. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/recorddict_pb2.py +0 -0
  211. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  212. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  213. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  214. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/run_pb2.py +0 -0
  215. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/run_pb2.pyi +0 -0
  216. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/run_pb2_grpc.py +0 -0
  217. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  218. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/serverappio_pb2.py +0 -0
  219. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/serverappio_pb2.pyi +0 -0
  220. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  221. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  222. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/simulationio_pb2.py +0 -0
  223. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  224. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  225. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  226. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/transport_pb2.py +0 -0
  227. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/transport_pb2.pyi +0 -0
  228. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  229. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  230. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/py.typed +0 -0
  231. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/__init__.py +0 -0
  232. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/app.py +0 -0
  233. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/client_manager.py +0 -0
  234. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/client_proxy.py +0 -0
  235. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/compat/__init__.py +0 -0
  236. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/compat/app.py +0 -0
  237. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/compat/app_utils.py +0 -0
  238. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  239. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/compat/legacy_context.py +0 -0
  240. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/criterion.py +0 -0
  241. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  242. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/grid/__init__.py +0 -0
  243. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/grid/grid.py +0 -0
  244. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/grid/inmemory_grid.py +0 -0
  245. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/history.py +0 -0
  246. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/run_serverapp.py +0 -0
  247. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/server.py +0 -0
  248. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/server_app.py +0 -0
  249. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/server_config.py +0 -0
  250. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/serverapp/__init__.py +0 -0
  251. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/serverapp/app.py +0 -0
  252. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/serverapp_components.py +0 -0
  253. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/__init__.py +0 -0
  254. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/aggregate.py +0 -0
  255. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/bulyan.py +0 -0
  256. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  257. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  258. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  259. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  260. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  261. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedadagrad.py +0 -0
  262. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedadam.py +0 -0
  263. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedavg.py +0 -0
  264. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedavg_android.py +0 -0
  265. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedavgm.py +0 -0
  266. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedmedian.py +0 -0
  267. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedopt.py +0 -0
  268. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedprox.py +0 -0
  269. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  270. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  271. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  272. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  273. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedyogi.py +0 -0
  274. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/krum.py +0 -0
  275. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/qfedavg.py +0 -0
  276. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/strategy.py +0 -0
  277. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/__init__.py +0 -0
  278. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/ffs/__init__.py +0 -0
  279. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  280. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/ffs/ffs.py +0 -0
  281. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  282. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  283. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  284. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  285. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  286. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  287. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  288. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  289. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  290. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  291. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  292. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  293. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  294. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  295. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  296. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  297. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  298. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  299. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  300. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  301. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  302. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  303. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  304. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  305. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  306. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
  307. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/linkstate/utils.py +0 -0
  308. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  309. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  310. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
  311. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  312. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  313. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  314. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/utils.py +0 -0
  315. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/typing.py +0 -0
  316. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/utils/__init__.py +0 -0
  317. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/utils/tensorboard.py +0 -0
  318. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/utils/validator.py +0 -0
  319. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/workflow/__init__.py +0 -0
  320. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/workflow/constant.py +0 -0
  321. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/workflow/default_workflows.py +0 -0
  322. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  323. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  324. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  325. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/serverapp/__init__.py +0 -0
  326. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/__init__.py +0 -0
  327. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/app.py +0 -0
  328. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/legacy_app.py +0 -0
  329. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  330. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  331. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  332. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/ray_transport/utils.py +0 -0
  333. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/run_simulation.py +0 -0
  334. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/simulationio_connection.py +0 -0
  335. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supercore/__init__.py +0 -0
  336. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supercore/object_store/__init__.py +0 -0
  337. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  338. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supercore/object_store/object_store.py +0 -0
  339. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
  340. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/__init__.py +0 -0
  341. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/app.py +0 -0
  342. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/deployment.py +0 -0
  343. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/exec_event_log_interceptor.py +0 -0
  344. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/exec_grpc.py +0 -0
  345. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/exec_servicer.py +0 -0
  346. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/exec_user_auth_interceptor.py +0 -0
  347. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/executor.py +0 -0
  348. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/simulation.py +0 -0
  349. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superlink/__init__.py +0 -0
  350. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/__init__.py +0 -0
  351. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/cli/__init__.py +0 -0
  352. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  353. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
  354. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/nodestate/__init__.py +0 -0
  355. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  356. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  357. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  358. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/runtime/__init__.py +0 -0
  359. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
  360. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/servicer/__init__.py +0 -0
  361. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
  362. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
  363. {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/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.dev20250605
3
+ Version: 1.19.0.dev20250606
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
@@ -31,6 +31,8 @@ from flwr.common.constant import HEARTBEAT_CALL_TIMEOUT, HEARTBEAT_DEFAULT_INTER
31
31
  from flwr.common.grpc import create_channel, on_channel_state_change
32
32
  from flwr.common.heartbeat import HeartbeatSender
33
33
  from flwr.common.inflatable_grpc_utils import (
34
+ make_pull_object_fn_grpc,
35
+ make_push_object_fn_grpc,
34
36
  pull_object_from_servicer,
35
37
  push_object_to_servicer,
36
38
  )
@@ -269,9 +271,11 @@ def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
269
271
  Message,
270
272
  pull_object_from_servicer(
271
273
  object_id=message_proto.metadata.message_id,
272
- stub=stub,
273
- node=node,
274
- run_id=message_proto.metadata.run_id,
274
+ pull_object_fn=make_pull_object_fn_grpc(
275
+ pull_object_grpc=stub.PullObject,
276
+ node=node,
277
+ run_id=message_proto.metadata.run_id,
278
+ ),
275
279
  ),
276
280
  )
277
281
 
@@ -322,9 +326,11 @@ def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
322
326
  objs_to_push = set(response.objects_to_push[message.object_id].object_ids)
323
327
  push_object_to_servicer(
324
328
  message,
325
- stub,
326
- node,
327
- run_id=message.metadata.run_id,
329
+ push_object_fn=make_push_object_fn_grpc(
330
+ push_object_grpc=stub.PushObject,
331
+ node=node,
332
+ run_id=message.metadata.run_id,
333
+ ),
328
334
  object_ids_to_push=objs_to_push,
329
335
  )
330
336
  log(DEBUG, "Pushed %s objects to servicer.", len(objs_to_push))
@@ -0,0 +1,227 @@
1
+ # Copyright 2025 Flower Labs GmbH. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # ==============================================================================
15
+ """InflatableObject utils."""
16
+
17
+
18
+ from time import sleep
19
+ from typing import Callable, Optional
20
+
21
+ from flwr.proto.message_pb2 import ( # pylint: disable=E0611
22
+ PullObjectRequest,
23
+ PullObjectResponse,
24
+ PushObjectRequest,
25
+ PushObjectResponse,
26
+ )
27
+ from flwr.proto.node_pb2 import Node # pylint: disable=E0611
28
+
29
+ from .inflatable import (
30
+ InflatableObject,
31
+ get_object_head_values_from_object_content,
32
+ get_object_id,
33
+ )
34
+ from .message import Message
35
+ from .record import Array, ArrayRecord, ConfigRecord, MetricRecord, RecordDict
36
+
37
+ # Helper registry that maps names of classes to their type
38
+ inflatable_class_registry: dict[str, type[InflatableObject]] = {
39
+ Array.__qualname__: Array,
40
+ ArrayRecord.__qualname__: ArrayRecord,
41
+ ConfigRecord.__qualname__: ConfigRecord,
42
+ Message.__qualname__: Message,
43
+ MetricRecord.__qualname__: MetricRecord,
44
+ RecordDict.__qualname__: RecordDict,
45
+ }
46
+
47
+
48
+ class ObjectUnavailableError(Exception):
49
+ """Exception raised when an object has been pre-registered but is not yet
50
+ available."""
51
+
52
+ def __init__(self, object_id: str):
53
+ super().__init__(f"Object with ID '{object_id}' is not yet available.")
54
+
55
+
56
+ class ObjectIdNotPreregisteredError(Exception):
57
+ """Exception raised when an object ID is not pre-registered."""
58
+
59
+ def __init__(self, object_id: str):
60
+ super().__init__(f"Object with ID '{object_id}' could not be found.")
61
+
62
+
63
+ def push_object_to_servicer(
64
+ obj: InflatableObject,
65
+ push_object_fn: Callable[[str, bytes], None],
66
+ object_ids_to_push: Optional[set[str]] = None,
67
+ ) -> set[str]:
68
+ """Recursively deflate an object and push it to the servicer.
69
+
70
+ Objects with the same ID are not pushed twice. If `object_ids_to_push` is set,
71
+ only objects with those IDs are pushed. It returns the set of pushed object
72
+ IDs.
73
+
74
+ Parameters
75
+ ----------
76
+ obj : InflatableObject
77
+ The object to push.
78
+ push_object_fn : Callable[[str, bytes], None]
79
+ A function that takes an object ID and its content as bytes, and pushes
80
+ it to the servicer. This function should raise `ObjectIdNotPreregisteredError`
81
+ if the object ID is not pre-registered.
82
+ object_ids_to_push : Optional[set[str]] (default: None)
83
+ A set of object IDs to push. If object ID of the given object is not in this
84
+ set, the object will not be pushed.
85
+
86
+ Returns
87
+ -------
88
+ set[str]
89
+ A set of object IDs that were pushed to the servicer.
90
+ """
91
+ pushed_object_ids: set[str] = set()
92
+ # Push children if it has any
93
+ if children := obj.children:
94
+ for child in children.values():
95
+ pushed_object_ids |= push_object_to_servicer(
96
+ child, push_object_fn, object_ids_to_push
97
+ )
98
+
99
+ # Deflate object and push
100
+ object_content = obj.deflate()
101
+ object_id = get_object_id(object_content)
102
+ # Push always if no object set is specified, or if the object is in the set
103
+ if object_ids_to_push is None or object_id in object_ids_to_push:
104
+ # The function may raise an error if the object ID is not pre-registered
105
+ push_object_fn(object_id, object_content)
106
+ pushed_object_ids.add(object_id)
107
+
108
+ return pushed_object_ids
109
+
110
+
111
+ def pull_object_from_servicer(
112
+ object_id: str,
113
+ pull_object_fn: Callable[[str], bytes],
114
+ ) -> InflatableObject:
115
+ """Recursively inflate an object by pulling it from the servicer.
116
+
117
+ Parameters
118
+ ----------
119
+ object_id : str
120
+ The ID of the object to pull.
121
+ pull_object_fn : Callable[[str], bytes]
122
+ A function that takes an object ID and returns the object content as bytes.
123
+ The function should raise `ObjectUnavailableError` if the object is not yet
124
+ available, or `ObjectIdNotPreregisteredError` if the object ID is not
125
+ pre-registered.
126
+
127
+ Returns
128
+ -------
129
+ InflatableObject
130
+ The pulled object.
131
+ """
132
+ # Pull object
133
+ while True:
134
+ try:
135
+ # The function may raise an error if the object ID is not pre-registered
136
+ object_content: bytes = pull_object_fn(object_id)
137
+ break # Exit loop if object is successfully pulled
138
+ except ObjectUnavailableError:
139
+ sleep(0.1) # Retry after a short delay
140
+
141
+ # Extract object class and object_ids of children
142
+ obj_type, children_obj_ids, _ = get_object_head_values_from_object_content(
143
+ object_content=object_content
144
+ )
145
+ # Resolve object class
146
+ cls_type = inflatable_class_registry[obj_type]
147
+
148
+ # Pull all children objects
149
+ children: dict[str, InflatableObject] = {}
150
+ for child_object_id in children_obj_ids:
151
+ children[child_object_id] = pull_object_from_servicer(
152
+ child_object_id, pull_object_fn
153
+ )
154
+
155
+ # Inflate object passing its children
156
+ return cls_type.inflate(object_content, children=children)
157
+
158
+
159
+ def make_pull_object_fn_grpc(
160
+ pull_object_grpc: Callable[[PullObjectRequest], PullObjectResponse],
161
+ node: Node,
162
+ run_id: int,
163
+ ) -> Callable[[str], bytes]:
164
+ """Create a pull object function that uses gRPC to pull objects.
165
+
166
+ Parameters
167
+ ----------
168
+ pull_object_grpc : Callable[[PullObjectRequest], PullObjectResponse]
169
+ The gRPC function to pull objects, e.g., `FleetStub.PullObject`.
170
+ node : Node
171
+ The node making the request.
172
+ run_id : int
173
+ The run ID for the current operation.
174
+
175
+ Returns
176
+ -------
177
+ Callable[[str], bytes]
178
+ A function that takes an object ID and returns the object content as bytes.
179
+ The function raises `ObjectIdNotPreregisteredError` if the object ID is not
180
+ pre-registered, or `ObjectUnavailableError` if the object is not yet available.
181
+ """
182
+
183
+ def pull_object_fn(object_id: str) -> bytes:
184
+ request = PullObjectRequest(node=node, run_id=run_id, object_id=object_id)
185
+ response: PullObjectResponse = pull_object_grpc(request)
186
+ if not response.object_found:
187
+ raise ObjectIdNotPreregisteredError(object_id)
188
+ if not response.object_available:
189
+ raise ObjectUnavailableError(object_id)
190
+ return response.object_content
191
+
192
+ return pull_object_fn
193
+
194
+
195
+ def make_push_object_fn_grpc(
196
+ push_object_grpc: Callable[[PushObjectRequest], PushObjectResponse],
197
+ node: Node,
198
+ run_id: int,
199
+ ) -> Callable[[str, bytes], None]:
200
+ """Create a push object function that uses gRPC to push objects.
201
+
202
+ Parameters
203
+ ----------
204
+ push_object_grpc : Callable[[PushObjectRequest], PushObjectResponse]
205
+ The gRPC function to push objects, e.g., `FleetStub.PushObject`.
206
+ node : Node
207
+ The node making the request.
208
+ run_id : int
209
+ The run ID for the current operation.
210
+
211
+ Returns
212
+ -------
213
+ Callable[[str, bytes], None]
214
+ A function that takes an object ID and its content as bytes, and pushes it
215
+ to the servicer. The function raises `ObjectIdNotPreregisteredError` if
216
+ the object ID is not pre-registered.
217
+ """
218
+
219
+ def push_object_fn(object_id: str, object_content: bytes) -> None:
220
+ request = PushObjectRequest(
221
+ node=node, run_id=run_id, object_id=object_id, object_content=object_content
222
+ )
223
+ response: PushObjectResponse = push_object_grpc(request)
224
+ if not response.stored:
225
+ raise ObjectIdNotPreregisteredError(object_id)
226
+
227
+ return push_object_fn
@@ -29,6 +29,8 @@ from flwr.common.constant import (
29
29
  )
30
30
  from flwr.common.grpc import create_channel, on_channel_state_change
31
31
  from flwr.common.inflatable_grpc_utils import (
32
+ make_pull_object_fn_grpc,
33
+ make_push_object_fn_grpc,
32
34
  pull_object_from_servicer,
33
35
  push_object_to_servicer,
34
36
  )
@@ -227,9 +229,11 @@ class GrpcGrid(Grid):
227
229
  # Push only object that are not in the store
228
230
  push_object_to_servicer(
229
231
  message,
230
- self._stub,
231
- node=self.node,
232
- run_id=run_id,
232
+ push_object_fn=make_push_object_fn_grpc(
233
+ push_object_grpc=self._stub.PushObject,
234
+ node=self.node,
235
+ run_id=run_id,
236
+ ),
233
237
  object_ids_to_push=obj_ids_to_push,
234
238
  )
235
239
  return msg_id
@@ -292,9 +296,11 @@ class GrpcGrid(Grid):
292
296
 
293
297
  message = pull_object_from_servicer(
294
298
  msg_proto.metadata.message_id,
295
- self._stub,
296
- node=self.node,
297
- run_id=run_id,
299
+ pull_object_fn=make_pull_object_fn_grpc(
300
+ pull_object_grpc=self._stub.PullObject,
301
+ node=self.node,
302
+ run_id=run_id,
303
+ ),
298
304
  )
299
305
  inflated_msgs.append(cast(Message, message))
300
306
 
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr-nightly"
7
- version = "1.19.0.dev20250605"
7
+ version = "1.19.0.dev20250606"
8
8
  description = "Flower: A Friendly Federated AI Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -1,122 +0,0 @@
1
- # Copyright 2025 Flower Labs GmbH. All Rights Reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
- # ==============================================================================
15
- """InflatableObject utils."""
16
-
17
-
18
- from time import sleep
19
- from typing import Optional, Union
20
-
21
- from flwr.client.grpc_rere_client.grpc_adapter import GrpcAdapter
22
- from flwr.proto.fleet_pb2_grpc import FleetStub # pylint: disable=E0611
23
- from flwr.proto.message_pb2 import ( # pylint: disable=E0611
24
- PullObjectRequest,
25
- PullObjectResponse,
26
- PushObjectRequest,
27
- PushObjectResponse,
28
- )
29
- from flwr.proto.node_pb2 import Node # pylint: disable=E0611
30
- from flwr.proto.serverappio_pb2_grpc import ServerAppIoStub # pylint: disable=E0611
31
-
32
- from .inflatable import (
33
- InflatableObject,
34
- get_object_head_values_from_object_content,
35
- get_object_id,
36
- )
37
- from .message import Message
38
- from .record import Array, ArrayRecord, ConfigRecord, MetricRecord, RecordDict
39
-
40
- # Helper registry that maps names of classes to their type
41
- inflatable_class_registry: dict[str, type[InflatableObject]] = {
42
- Array.__qualname__: Array,
43
- ArrayRecord.__qualname__: ArrayRecord,
44
- ConfigRecord.__qualname__: ConfigRecord,
45
- Message.__qualname__: Message,
46
- MetricRecord.__qualname__: MetricRecord,
47
- RecordDict.__qualname__: RecordDict,
48
- }
49
-
50
-
51
- def push_object_to_servicer(
52
- obj: InflatableObject,
53
- stub: Union[FleetStub, ServerAppIoStub, GrpcAdapter],
54
- node: Node,
55
- run_id: int,
56
- object_ids_to_push: Optional[set[str]] = None,
57
- ) -> set[str]:
58
- """Recursively deflate an object and push it to the servicer.
59
-
60
- Objects with the same ID are not pushed twice. If `object_ids_to_push` is set,
61
- only objects with those IDs are pushed. It returns the set of pushed object
62
- IDs.
63
- """
64
- pushed_object_ids: set[str] = set()
65
- # Push children if it has any
66
- if children := obj.children:
67
- for child in children.values():
68
- pushed_object_ids |= push_object_to_servicer(
69
- child, stub, node, run_id, object_ids_to_push
70
- )
71
-
72
- # Deflate object and push
73
- object_content = obj.deflate()
74
- object_id = get_object_id(object_content)
75
- # Push always if no object set is specified, or if the object is in the set
76
- if object_ids_to_push is None or object_id in object_ids_to_push:
77
- _: PushObjectResponse = stub.PushObject(
78
- PushObjectRequest(
79
- node=node,
80
- run_id=run_id,
81
- object_id=object_id,
82
- object_content=object_content,
83
- )
84
- )
85
- pushed_object_ids.add(object_id)
86
-
87
- return pushed_object_ids
88
-
89
-
90
- def pull_object_from_servicer(
91
- object_id: str,
92
- stub: Union[FleetStub, ServerAppIoStub, GrpcAdapter],
93
- node: Node,
94
- run_id: int,
95
- ) -> InflatableObject:
96
- """Recursively inflate an object by pulling it from the servicer."""
97
- # Pull object
98
- object_available = False
99
- while not object_available:
100
- object_proto: PullObjectResponse = stub.PullObject(
101
- PullObjectRequest(node=node, run_id=run_id, object_id=object_id)
102
- )
103
- object_available = object_proto.object_available
104
- object_content = object_proto.object_content
105
- sleep(0.1)
106
-
107
- # Extract object class and object_ids of children
108
- obj_type, children_obj_ids, _ = get_object_head_values_from_object_content(
109
- object_content=object_content
110
- )
111
- # Resolve object class
112
- cls_type = inflatable_class_registry[obj_type]
113
-
114
- # Pull all children objects
115
- children: dict[str, InflatableObject] = {}
116
- for child_object_id in children_obj_ids:
117
- children[child_object_id] = pull_object_from_servicer(
118
- child_object_id, stub, node, run_id
119
- )
120
-
121
- # Inflate object passing its children
122
- return cls_type.inflate(object_content, children=children)