flwr-nightly 1.23.0.dev20251024__tar.gz → 1.23.0.dev20251028__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of flwr-nightly might be problematic. Click here for more details.

Files changed (439) hide show
  1. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/PKG-INFO +1 -1
  2. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/build.py +118 -47
  3. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/run/run.py +8 -4
  4. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/constant.py +11 -1
  5. flwr_nightly-1.23.0.dev20251028/py/flwr/proto/control_pb2.py +79 -0
  6. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/control_pb2.pyi +4 -1
  7. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +3 -1
  8. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +9 -5
  9. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +29 -19
  10. flwr_nightly-1.23.0.dev20251028/py/flwr/supercore/primitives/asymmetric_ed25519.py +165 -0
  11. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/servicer/control/control_servicer.py +1 -1
  12. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/pyproject.toml +1 -1
  13. flwr_nightly-1.23.0.dev20251024/py/flwr/proto/control_pb2.py +0 -79
  14. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/README.md +0 -0
  15. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/__init__.py +0 -0
  16. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/app/__init__.py +0 -0
  17. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/app/error.py +0 -0
  18. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/app/exception.py +0 -0
  19. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/app/metadata.py +0 -0
  20. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/__init__.py +0 -0
  21. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/app.py +0 -0
  22. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  23. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/auth_plugin/auth_plugin.py +0 -0
  24. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +0 -0
  25. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
  26. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
  27. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/config_utils.py +0 -0
  28. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/constant.py +0 -0
  29. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/example.py +0 -0
  30. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/install.py +0 -0
  31. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/log.py +0 -0
  32. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/login/__init__.py +0 -0
  33. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/login/login.py +0 -0
  34. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/ls.py +0 -0
  35. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/__init__.py +0 -0
  36. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/new.py +0 -0
  37. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/__init__.py +0 -0
  38. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  39. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  40. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  41. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  42. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  43. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/__init__.py +0 -0
  44. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  45. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  46. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  47. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/__init__.pytorch_legacy_api.py.tpl +0 -0
  48. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  49. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  50. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  51. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  52. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  53. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  54. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.pytorch_legacy_api.py.tpl +0 -0
  55. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  56. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  57. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.xgboost.py.tpl +0 -0
  58. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  59. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  60. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  61. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  62. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  63. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  64. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  65. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  66. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  67. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  68. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  69. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  70. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  71. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  72. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.pytorch_legacy_api.py.tpl +0 -0
  73. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  74. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  75. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.xgboost.py.tpl +0 -0
  76. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  77. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  78. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  79. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  80. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  81. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  82. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.pytorch_legacy_api.py.tpl +0 -0
  83. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  84. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  85. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.xgboost.py.tpl +0 -0
  86. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  87. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  88. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  89. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  90. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  91. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  92. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  93. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  94. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.pytorch_legacy_api.toml.tpl +0 -0
  95. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  96. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  97. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.xgboost.toml.tpl +0 -0
  98. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/pull.py +0 -0
  99. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/run/__init__.py +0 -0
  100. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/stop.py +0 -0
  101. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/supernode/__init__.py +0 -0
  102. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/supernode/ls.py +0 -0
  103. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/supernode/register.py +0 -0
  104. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/supernode/unregister.py +0 -0
  105. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/utils.py +0 -0
  106. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/__init__.py +0 -0
  107. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/client.py +0 -0
  108. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  109. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  110. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  111. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  112. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  113. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  114. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/grpc_rere_client/node_auth_client_interceptor.py +0 -0
  115. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/message_handler/__init__.py +0 -0
  116. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/message_handler/message_handler.py +0 -0
  117. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/mod/__init__.py +0 -0
  118. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/mod/centraldp_mods.py +0 -0
  119. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/mod/comms_mods.py +0 -0
  120. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/mod/localdp_mod.py +0 -0
  121. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  122. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  123. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  124. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/mod/utils.py +0 -0
  125. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/numpy_client.py +0 -0
  126. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/rest_client/__init__.py +0 -0
  127. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/rest_client/connection.py +0 -0
  128. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/run_info_store.py +0 -0
  129. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/typing.py +0 -0
  130. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/clientapp/__init__.py +0 -0
  131. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/clientapp/client_app.py +0 -0
  132. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/clientapp/mod/__init__.py +0 -0
  133. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
  134. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
  135. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/clientapp/typing.py +0 -0
  136. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/clientapp/utils.py +0 -0
  137. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/__init__.py +0 -0
  138. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/address.py +0 -0
  139. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/args.py +0 -0
  140. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/config.py +0 -0
  141. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/context.py +0 -0
  142. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/date.py +0 -0
  143. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/differential_privacy.py +0 -0
  144. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/differential_privacy_constants.py +0 -0
  145. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/dp.py +0 -0
  146. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  147. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  148. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/exit/__init__.py +0 -0
  149. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/exit/exit.py +0 -0
  150. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/exit/exit_code.py +0 -0
  151. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/exit/exit_handler.py +0 -0
  152. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/exit/signal_handler.py +0 -0
  153. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/grpc.py +0 -0
  154. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/heartbeat.py +0 -0
  155. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/inflatable.py +0 -0
  156. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
  157. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/inflatable_utils.py +0 -0
  158. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/logger.py +0 -0
  159. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/message.py +0 -0
  160. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/object_ref.py +0 -0
  161. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/parameter.py +0 -0
  162. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/pyproject.py +0 -0
  163. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/__init__.py +0 -0
  164. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/array.py +0 -0
  165. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/arraychunk.py +0 -0
  166. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/arrayrecord.py +0 -0
  167. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/configrecord.py +0 -0
  168. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/conversion_utils.py +0 -0
  169. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/metricrecord.py +0 -0
  170. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/recorddict.py +0 -0
  171. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/typeddict.py +0 -0
  172. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/recorddict_compat.py +0 -0
  173. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/retry_invoker.py +0 -0
  174. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  175. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  176. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  177. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  178. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  179. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  180. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  181. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  182. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/serde.py +0 -0
  183. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/serde_utils.py +0 -0
  184. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/telemetry.py +0 -0
  185. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/typing.py +0 -0
  186. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/version.py +0 -0
  187. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/__init__.py +0 -0
  188. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/client/__init__.py +0 -0
  189. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/client/app.py +0 -0
  190. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  191. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  192. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/common/__init__.py +0 -0
  193. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/server/__init__.py +0 -0
  194. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/server/app.py +0 -0
  195. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/simulation/__init__.py +0 -0
  196. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/__init__.py +0 -0
  197. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/appio_pb2.py +0 -0
  198. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/appio_pb2.pyi +0 -0
  199. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/appio_pb2_grpc.py +0 -0
  200. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
  201. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/clientappio_pb2.py +0 -0
  202. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  203. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  204. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  205. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/control_pb2_grpc.py +0 -0
  206. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  207. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/error_pb2.py +0 -0
  208. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/error_pb2.pyi +0 -0
  209. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/error_pb2_grpc.py +0 -0
  210. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  211. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/fab_pb2.py +0 -0
  212. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/fab_pb2.pyi +0 -0
  213. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  214. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  215. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/fleet_pb2.py +0 -0
  216. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/fleet_pb2.pyi +0 -0
  217. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  218. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  219. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  220. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  221. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  222. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  223. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/heartbeat_pb2.py +0 -0
  224. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  225. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  226. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  227. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/log_pb2.py +0 -0
  228. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/log_pb2.pyi +0 -0
  229. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/log_pb2_grpc.py +0 -0
  230. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  231. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/message_pb2.py +0 -0
  232. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/message_pb2.pyi +0 -0
  233. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/message_pb2_grpc.py +0 -0
  234. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  235. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/node_pb2.py +0 -0
  236. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/node_pb2.pyi +0 -0
  237. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/node_pb2_grpc.py +0 -0
  238. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  239. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/recorddict_pb2.py +0 -0
  240. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  241. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  242. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  243. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/run_pb2.py +0 -0
  244. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/run_pb2.pyi +0 -0
  245. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/run_pb2_grpc.py +0 -0
  246. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  247. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/serverappio_pb2.py +0 -0
  248. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/serverappio_pb2.pyi +0 -0
  249. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  250. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  251. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/simulationio_pb2.py +0 -0
  252. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  253. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  254. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  255. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/transport_pb2.py +0 -0
  256. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/transport_pb2.pyi +0 -0
  257. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  258. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  259. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/py.typed +0 -0
  260. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/__init__.py +0 -0
  261. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/app.py +0 -0
  262. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/client_manager.py +0 -0
  263. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/client_proxy.py +0 -0
  264. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/compat/__init__.py +0 -0
  265. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/compat/app.py +0 -0
  266. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/compat/app_utils.py +0 -0
  267. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  268. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/compat/legacy_context.py +0 -0
  269. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/criterion.py +0 -0
  270. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  271. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/grid/__init__.py +0 -0
  272. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/grid/grid.py +0 -0
  273. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/grid/grpc_grid.py +0 -0
  274. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/grid/inmemory_grid.py +0 -0
  275. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/history.py +0 -0
  276. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/run_serverapp.py +0 -0
  277. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/server.py +0 -0
  278. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/server_app.py +0 -0
  279. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/server_config.py +0 -0
  280. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/serverapp/__init__.py +0 -0
  281. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/serverapp/app.py +0 -0
  282. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/serverapp_components.py +0 -0
  283. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/__init__.py +0 -0
  284. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/aggregate.py +0 -0
  285. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/bulyan.py +0 -0
  286. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  287. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  288. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  289. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  290. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  291. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedadagrad.py +0 -0
  292. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedadam.py +0 -0
  293. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedavg.py +0 -0
  294. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedavg_android.py +0 -0
  295. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedavgm.py +0 -0
  296. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedmedian.py +0 -0
  297. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedopt.py +0 -0
  298. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedprox.py +0 -0
  299. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  300. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  301. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  302. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  303. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedyogi.py +0 -0
  304. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/krum.py +0 -0
  305. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/qfedavg.py +0 -0
  306. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/strategy.py +0 -0
  307. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/__init__.py +0 -0
  308. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  309. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  310. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  311. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  312. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  313. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  314. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  315. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  316. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  317. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +0 -0
  318. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  319. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  320. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  321. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  322. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  323. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  324. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  325. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  326. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  327. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  328. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  329. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  330. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/linkstate/utils.py +0 -0
  331. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  332. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  333. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
  334. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  335. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  336. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  337. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/utils.py +0 -0
  338. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/typing.py +0 -0
  339. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/utils/__init__.py +0 -0
  340. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/utils/tensorboard.py +0 -0
  341. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/utils/validator.py +0 -0
  342. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/workflow/__init__.py +0 -0
  343. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/workflow/constant.py +0 -0
  344. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/workflow/default_workflows.py +0 -0
  345. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  346. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  347. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  348. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/__init__.py +0 -0
  349. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/exception.py +0 -0
  350. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/__init__.py +0 -0
  351. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/bulyan.py +0 -0
  352. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
  353. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
  354. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
  355. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedadam.py +0 -0
  356. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedavg.py +0 -0
  357. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
  358. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
  359. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedopt.py +0 -0
  360. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedprox.py +0 -0
  361. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
  362. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
  363. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
  364. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
  365. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/krum.py +0 -0
  366. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/multikrum.py +0 -0
  367. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
  368. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/result.py +0 -0
  369. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/strategy.py +0 -0
  370. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
  371. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/__init__.py +0 -0
  372. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/app.py +0 -0
  373. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/legacy_app.py +0 -0
  374. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  375. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  376. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  377. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/ray_transport/utils.py +0 -0
  378. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/run_simulation.py +0 -0
  379. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/simulationio_connection.py +0 -0
  380. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/__init__.py +0 -0
  381. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/app_utils.py +0 -0
  382. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/cli/__init__.py +0 -0
  383. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/cli/flower_superexec.py +0 -0
  384. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/constant.py +0 -0
  385. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/corestate/__init__.py +0 -0
  386. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/corestate/corestate.py +0 -0
  387. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/ffs/__init__.py +0 -0
  388. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
  389. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/ffs/ffs.py +0 -0
  390. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
  391. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/grpc_health/__init__.py +0 -0
  392. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/grpc_health/health_server.py +0 -0
  393. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
  394. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/license_plugin/__init__.py +0 -0
  395. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
  396. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/object_store/__init__.py +0 -0
  397. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  398. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/object_store/object_store.py +0 -0
  399. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
  400. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/object_store/sqlite_object_store.py +0 -0
  401. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/object_store/utils.py +0 -0
  402. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/primitives/__init__.py +0 -0
  403. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/primitives/asymmetric.py +0 -0
  404. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/sqlite_mixin.py +0 -0
  405. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/superexec/__init__.py +0 -0
  406. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
  407. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
  408. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
  409. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
  410. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
  411. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
  412. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/superexec/run_superexec.py +0 -0
  413. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/utils.py +0 -0
  414. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/__init__.py +0 -0
  415. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
  416. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
  417. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/auth_plugin/__init__.py +0 -0
  418. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
  419. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +0 -0
  420. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/servicer/__init__.py +0 -0
  421. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/servicer/control/__init__.py +0 -0
  422. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +0 -0
  423. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
  424. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/servicer/control/control_grpc.py +0 -0
  425. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
  426. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/__init__.py +0 -0
  427. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/cli/__init__.py +0 -0
  428. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  429. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
  430. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/nodestate/__init__.py +0 -0
  431. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  432. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  433. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  434. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/runtime/__init__.py +0 -0
  435. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
  436. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/servicer/__init__.py +0 -0
  437. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
  438. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
  439. {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/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.23.0.dev20251024
3
+ Version: 1.23.0.dev20251028
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
@@ -17,22 +17,25 @@
17
17
 
18
18
  import hashlib
19
19
  import zipfile
20
+ from collections.abc import Iterable
20
21
  from io import BytesIO
21
22
  from pathlib import Path
22
23
  from typing import Annotated, Any, Optional, Union
23
24
 
24
25
  import pathspec
26
+ import tomli
25
27
  import tomli_w
26
28
  import typer
27
29
 
28
30
  from flwr.common.constant import (
29
- FAB_ALLOWED_EXTENSIONS,
31
+ FAB_CONFIG_FILE,
30
32
  FAB_DATE,
33
+ FAB_EXCLUDE_PATTERNS,
31
34
  FAB_HASH_TRUNCATION,
35
+ FAB_INCLUDE_PATTERNS,
32
36
  FAB_MAX_SIZE,
33
37
  )
34
38
 
35
- from .config_utils import load as load_toml
36
39
  from .config_utils import load_and_validate
37
40
  from .utils import is_valid_project_name
38
41
 
@@ -112,7 +115,10 @@ def build(
112
115
  )
113
116
 
114
117
  # Build FAB
115
- fab_bytes, fab_hash, _ = build_fab(app)
118
+ fab_bytes = build_fab_from_disk(app)
119
+
120
+ # Calculate hash for filename
121
+ fab_hash = hashlib.sha256(fab_bytes).hexdigest()
116
122
 
117
123
  # Get the name of the zip file
118
124
  fab_filename = get_fab_filename(config, fab_hash)
@@ -125,11 +131,10 @@ def build(
125
131
  )
126
132
 
127
133
 
128
- def build_fab(app: Path) -> tuple[bytes, str, dict[str, Any]]:
129
- """Build a FAB in memory and return the bytes, hash, and config.
134
+ def build_fab_from_disk(app: Path) -> bytes:
135
+ """Build a FAB from files on disk and return the FAB as bytes.
130
136
 
131
- This function assumes that the provided path points to a valid Flower app and
132
- bundles it into a FAB without performing additional validation.
137
+ This function reads files from disk and bundles them into a FAB.
133
138
 
134
139
  Parameters
135
140
  ----------
@@ -138,18 +143,67 @@ def build_fab(app: Path) -> tuple[bytes, str, dict[str, Any]]:
138
143
 
139
144
  Returns
140
145
  -------
141
- tuple[bytes, str, dict[str, Any]]
142
- A tuple containing:
143
- - the FAB as bytes
144
- - the SHA256 hash of the FAB
145
- - the project configuration (with the 'federations' field removed)
146
+ bytes
147
+ The FAB as bytes.
146
148
  """
147
149
  app = app.resolve()
148
150
 
149
- # Load the pyproject.toml file
150
- config = load_toml(app / "pyproject.toml")
151
- if config is None:
152
- raise ValueError("Project configuration could not be loaded.")
151
+ # Collect all files recursively (including pyproject.toml and .gitignore)
152
+ all_files = [f for f in app.rglob("*") if f.is_file()]
153
+
154
+ # Create dict mapping relative paths to Path objects
155
+ files_dict: dict[str, Union[bytes, Path]] = {
156
+ # Ensure consistent path separators across platforms
157
+ str(file_path.relative_to(app)).replace("\\", "/"): file_path
158
+ for file_path in all_files
159
+ }
160
+
161
+ # Build FAB from the files dict
162
+ return build_fab_from_files(files_dict)
163
+
164
+
165
+ def build_fab_from_files(files: dict[str, Union[bytes, Path]]) -> bytes:
166
+ r"""Build a FAB from in-memory files and return the FAB as bytes.
167
+
168
+ This is the core FAB building function that works with in-memory data.
169
+ It accepts either bytes or Path objects as file contents, applies filtering
170
+ rules (include/exclude patterns), and builds the FAB.
171
+
172
+ Parameters
173
+ ----------
174
+ files : dict[str, Union[bytes, Path]]
175
+ Dictionary mapping relative file paths to their contents.
176
+ - Keys: Relative paths (strings)
177
+ - Values: Either bytes (file contents) or Path (will be read)
178
+ Must include "pyproject.toml" and optionally ".gitignore".
179
+
180
+ Returns
181
+ -------
182
+ bytes
183
+ The FAB as bytes.
184
+
185
+ Examples
186
+ --------
187
+ Build a FAB from in-memory files::
188
+
189
+ files = {
190
+ "pyproject.toml": b"[project]\nname = 'myapp'\n...",
191
+ ".gitignore": b"*.pyc\n__pycache__/\n",
192
+ "src/client.py": Path("/path/to/client.py"),
193
+ "src/server.py": b"print('hello')",
194
+ "README.md": b"# My App\n",
195
+ }
196
+ fab_bytes = build_fab_from_files(files)
197
+ """
198
+
199
+ def to_bytes(content: Union[bytes, Path]) -> bytes:
200
+ return content.read_bytes() if isinstance(content, Path) else content
201
+
202
+ # Extract, load, and parse pyproject.toml
203
+ if FAB_CONFIG_FILE not in files:
204
+ raise ValueError(f"{FAB_CONFIG_FILE} not found in files")
205
+ pyproject_content = to_bytes(files[FAB_CONFIG_FILE])
206
+ config = tomli.loads(pyproject_content.decode("utf-8"))
153
207
 
154
208
  # Remove the 'federations' field if it exists
155
209
  if (
@@ -159,18 +213,22 @@ def build_fab(app: Path) -> tuple[bytes, str, dict[str, Any]]:
159
213
  ):
160
214
  del config["tool"]["flwr"]["federations"]
161
215
 
162
- # Load .gitignore rules if present
163
- ignore_spec = _load_gitignore(app)
216
+ # Extract and load .gitignore if present
217
+ gitignore_content = None
218
+ if ".gitignore" in files:
219
+ gitignore_content = to_bytes(files[".gitignore"])
220
+
221
+ # Get exclude and include specs
222
+ exclude_spec = get_fab_exclude_pathspec(gitignore_content)
223
+ include_spec = get_fab_include_pathspec()
164
224
 
165
- # Search for all files in the app directory
166
- all_files = [
167
- f
168
- for f in app.rglob("*")
169
- if not ignore_spec.match_file(f)
170
- and f.suffix in FAB_ALLOWED_EXTENSIONS
171
- and f.name != "pyproject.toml" # Exclude the original pyproject.toml
225
+ # Filter files based on include/exclude specs
226
+ filtered_paths = [
227
+ path.replace("\\", "/") # Ensure consistent path separators across platforms
228
+ for path in files.keys()
229
+ if include_spec.match_file(path) and not exclude_spec.match_file(path)
172
230
  ]
173
- all_files.sort()
231
+ filtered_paths.sort() # Sort for deterministic output
174
232
 
175
233
  # Create a zip file in memory
176
234
  list_file_content = ""
@@ -178,41 +236,54 @@ def build_fab(app: Path) -> tuple[bytes, str, dict[str, Any]]:
178
236
  fab_buffer = BytesIO()
179
237
  with zipfile.ZipFile(fab_buffer, "w", zipfile.ZIP_DEFLATED) as fab_file:
180
238
  # Add pyproject.toml
181
- write_to_zip(fab_file, "pyproject.toml", tomli_w.dumps(config))
239
+ write_to_zip(fab_file, FAB_CONFIG_FILE, tomli_w.dumps(config))
182
240
 
183
- for file_path in all_files:
184
- # Read the file content manually
185
- file_contents = file_path.read_bytes()
241
+ for file_path in filtered_paths:
186
242
 
187
- archive_path = str(file_path.relative_to(app)).replace("\\", "/")
188
- write_to_zip(fab_file, archive_path, file_contents)
243
+ # Get file contents as bytes
244
+ file_content = to_bytes(files[file_path])
189
245
 
190
- # Calculate file info
191
- sha256_hash = hashlib.sha256(file_contents).hexdigest()
192
- file_size_bits = len(file_contents) * 8 # size in bits
193
- list_file_content += f"{archive_path},{sha256_hash},{file_size_bits}\n"
246
+ # Write file to FAB
247
+ write_to_zip(fab_file, file_path, file_content)
194
248
 
195
- # Add CONTENT and CONTENT.jwt to the zip file
249
+ # Calculate file info for CONTENT manifest
250
+ sha256_hash = hashlib.sha256(file_content).hexdigest()
251
+ file_size_bits = len(file_content) * 8 # size in bits
252
+ list_file_content += f"{file_path},{sha256_hash},{file_size_bits}\n"
253
+
254
+ # Add CONTENT manifest to the zip file
196
255
  write_to_zip(fab_file, ".info/CONTENT", list_file_content)
197
256
 
198
257
  fab_bytes = fab_buffer.getvalue()
258
+
259
+ # Validate FAB size
199
260
  if len(fab_bytes) > FAB_MAX_SIZE:
200
261
  raise ValueError(
201
- f"FAB size exceeds maximum allowed size of {FAB_MAX_SIZE:,} bytes."
262
+ f"FAB size exceeds maximum allowed size of {FAB_MAX_SIZE:,} bytes. "
202
263
  "To reduce the package size, consider ignoring unnecessary files "
203
264
  "via your `.gitignore` file or excluding them from the build."
204
265
  )
205
266
 
206
- fab_hash = hashlib.sha256(fab_bytes).hexdigest()
267
+ return fab_bytes
207
268
 
208
- return fab_bytes, fab_hash, config
209
269
 
270
+ def build_pathspec(patterns: Iterable[str]) -> pathspec.PathSpec:
271
+ """Build a PathSpec from a list of patterns."""
272
+ return pathspec.PathSpec.from_lines("gitwildmatch", patterns)
273
+
274
+
275
+ def get_fab_include_pathspec() -> pathspec.PathSpec:
276
+ """Get the PathSpec for files to include in a FAB."""
277
+ return build_pathspec(FAB_INCLUDE_PATTERNS)
210
278
 
211
- def _load_gitignore(app: Path) -> pathspec.PathSpec:
212
- """Load and parse .gitignore file, returning a pathspec."""
213
- gitignore_path = app / ".gitignore"
214
- patterns = ["__pycache__/"] # Default pattern
215
- if gitignore_path.exists():
216
- with open(gitignore_path, encoding="UTF-8") as file:
217
- patterns.extend(file.readlines())
279
+
280
+ def get_fab_exclude_pathspec(gitignore_content: Optional[bytes]) -> pathspec.PathSpec:
281
+ """Get the PathSpec for files to exclude from a FAB.
282
+
283
+ If gitignore_content is provided, its patterns will be combined with the default
284
+ exclude patterns.
285
+ """
286
+ patterns = list(FAB_EXCLUDE_PATTERNS)
287
+ if gitignore_content:
288
+ patterns += gitignore_content.decode("UTF-8").splitlines()
218
289
  return pathspec.PathSpec.from_lines("gitwildmatch", patterns)
@@ -15,16 +15,18 @@
15
15
  """Flower command line interface `run` command."""
16
16
 
17
17
 
18
+ import hashlib
18
19
  import io
19
20
  import json
20
21
  import subprocess
21
22
  from pathlib import Path
22
- from typing import Annotated, Any, Optional
23
+ from typing import Annotated, Any, Optional, cast
23
24
 
24
25
  import typer
25
26
  from rich.console import Console
26
27
 
27
- from flwr.cli.build import build_fab, get_fab_filename
28
+ from flwr.cli.build import build_fab_from_disk, get_fab_filename
29
+ from flwr.cli.config_utils import load as load_toml
28
30
  from flwr.cli.config_utils import (
29
31
  load_and_validate,
30
32
  process_loaded_project_config,
@@ -37,7 +39,7 @@ from flwr.common.config import (
37
39
  parse_config_args,
38
40
  user_config_to_configrecord,
39
41
  )
40
- from flwr.common.constant import CliOutputFormat
42
+ from flwr.common.constant import FAB_CONFIG_FILE, CliOutputFormat
41
43
  from flwr.common.logger import print_json_error, redirect_output, restore_output
42
44
  from flwr.common.serde import config_record_to_proto, fab_to_proto, user_config_to_proto
43
45
  from flwr.common.typing import Fab
@@ -152,7 +154,9 @@ def _run_with_control_api(
152
154
  channel = init_channel(app, federation_config, auth_plugin)
153
155
  stub = ControlStub(channel)
154
156
 
155
- fab_bytes, fab_hash, config = build_fab(app)
157
+ fab_bytes = build_fab_from_disk(app)
158
+ fab_hash = hashlib.sha256(fab_bytes).hexdigest()
159
+ config = cast(dict[str, Any], load_toml(app / FAB_CONFIG_FILE))
156
160
  fab_id, fab_version = get_metadata_from_config(config)
157
161
 
158
162
  fab = Fab(fab_hash, fab_bytes, {})
@@ -72,13 +72,23 @@ NODE_ID_NUM_BYTES = 8
72
72
 
73
73
  # Constants for FAB
74
74
  APP_DIR = "apps"
75
- FAB_ALLOWED_EXTENSIONS = {".py", ".toml", ".md"}
76
75
  FAB_CONFIG_FILE = "pyproject.toml"
77
76
  FAB_DATE = (2024, 10, 1, 0, 0, 0)
78
77
  FAB_HASH_TRUNCATION = 8
79
78
  FAB_MAX_SIZE = 10 * 1024 * 1024 # 10 MB
80
79
  FLWR_DIR = ".flwr" # The default Flower directory: ~/.flwr/
81
80
  FLWR_HOME = "FLWR_HOME" # If set, override the default Flower directory
81
+ # FAB file include patterns (gitignore-style patterns)
82
+ FAB_INCLUDE_PATTERNS = (
83
+ "**/*.py",
84
+ "**/*.toml",
85
+ "**/*.md",
86
+ )
87
+ # FAB file exclude patterns (gitignore-style patterns)
88
+ FAB_EXCLUDE_PATTERNS = (
89
+ "**/__pycache__/**",
90
+ FAB_CONFIG_FILE, # Exclude the original pyproject.toml
91
+ )
82
92
 
83
93
  # Constant for SuperLink
84
94
  SUPERLINK_NODE_ID = 1
@@ -0,0 +1,79 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: flwr/proto/control.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 fab_pb2 as flwr_dot_proto_dot_fab__pb2
16
+ from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
17
+ from flwr.proto import recorddict_pb2 as flwr_dot_proto_dot_recorddict__pb2
18
+ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
19
+ from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
20
+
21
+
22
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/control.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x15\x66lwr/proto/node.proto\"\x8a\x02\n\x0fStartRunRequest\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fab\x12H\n\x0foverride_config\x18\x02 \x03(\x0b\x32/.flwr.proto.StartRunRequest.OverrideConfigEntry\x12\x34\n\x12\x66\x65\x64\x65ration_options\x18\x03 \x01(\x0b\x32\x18.flwr.proto.ConfigRecord\x12\x0e\n\x06\x61pp_id\x18\x04 \x01(\t\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"2\n\x10StartRunResponse\x12\x13\n\x06run_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\t\n\x07_run_id\"<\n\x11StreamLogsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x17\n\x0f\x61\x66ter_timestamp\x18\x02 \x01(\x01\"B\n\x12StreamLogsResponse\x12\x12\n\nlog_output\x18\x01 \x01(\t\x12\x18\n\x10latest_timestamp\x18\x02 \x01(\x01\"1\n\x0fListRunsRequest\x12\x13\n\x06run_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\t\n\x07_run_id\"\x9d\x01\n\x10ListRunsResponse\x12;\n\x08run_dict\x18\x01 \x03(\x0b\x32).flwr.proto.ListRunsResponse.RunDictEntry\x12\x0b\n\x03now\x18\x02 \x01(\t\x1a?\n\x0cRunDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\x1e\n\x05value\x18\x02 \x01(\x0b\x32\x0f.flwr.proto.Run:\x02\x38\x01\"\x18\n\x16GetLoginDetailsRequest\"\x8b\x01\n\x17GetLoginDetailsResponse\x12\x12\n\nauthn_type\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65vice_code\x18\x02 \x01(\t\x12!\n\x19verification_uri_complete\x18\x03 \x01(\t\x12\x12\n\nexpires_in\x18\x04 \x01(\x03\x12\x10\n\x08interval\x18\x05 \x01(\x03\"+\n\x14GetAuthTokensRequest\x12\x13\n\x0b\x64\x65vice_code\x18\x01 \x01(\t\"D\n\x15GetAuthTokensResponse\x12\x14\n\x0c\x61\x63\x63\x65ss_token\x18\x01 \x01(\t\x12\x15\n\rrefresh_token\x18\x02 \x01(\t\" \n\x0eStopRunRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"\"\n\x0fStopRunResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"&\n\x14PullArtifactsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"1\n\x15PullArtifactsResponse\x12\x10\n\x03url\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x06\n\x04_url\")\n\x13RegisterNodeRequest\x12\x12\n\npublic_key\x18\x01 \x01(\x0c\"8\n\x14RegisterNodeResponse\x12\x14\n\x07node_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\n\n\x08_node_id\"(\n\x15UnregisterNodeRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\"\x18\n\x16UnregisterNodeResponse\"\x12\n\x10ListNodesRequest\"J\n\x11ListNodesResponse\x12(\n\nnodes_info\x18\x01 \x03(\x0b\x32\x14.flwr.proto.NodeInfo\x12\x0b\n\x03now\x18\x02 \x01(\t2\xbc\x06\n\x07\x43ontrol\x12G\n\x08StartRun\x12\x1b.flwr.proto.StartRunRequest\x1a\x1c.flwr.proto.StartRunResponse\"\x00\x12\x44\n\x07StopRun\x12\x1a.flwr.proto.StopRunRequest\x1a\x1b.flwr.proto.StopRunResponse\"\x00\x12O\n\nStreamLogs\x12\x1d.flwr.proto.StreamLogsRequest\x1a\x1e.flwr.proto.StreamLogsResponse\"\x00\x30\x01\x12G\n\x08ListRuns\x12\x1b.flwr.proto.ListRunsRequest\x1a\x1c.flwr.proto.ListRunsResponse\"\x00\x12\\\n\x0fGetLoginDetails\x12\".flwr.proto.GetLoginDetailsRequest\x1a#.flwr.proto.GetLoginDetailsResponse\"\x00\x12V\n\rGetAuthTokens\x12 .flwr.proto.GetAuthTokensRequest\x1a!.flwr.proto.GetAuthTokensResponse\"\x00\x12V\n\rPullArtifacts\x12 .flwr.proto.PullArtifactsRequest\x1a!.flwr.proto.PullArtifactsResponse\"\x00\x12S\n\x0cRegisterNode\x12\x1f.flwr.proto.RegisterNodeRequest\x1a .flwr.proto.RegisterNodeResponse\"\x00\x12Y\n\x0eUnregisterNode\x12!.flwr.proto.UnregisterNodeRequest\x1a\".flwr.proto.UnregisterNodeResponse\"\x00\x12J\n\tListNodes\x12\x1c.flwr.proto.ListNodesRequest\x1a\x1d.flwr.proto.ListNodesResponse\"\x00\x62\x06proto3')
23
+
24
+ _globals = globals()
25
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
26
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.control_pb2', _globals)
27
+ if _descriptor._USE_C_DESCRIPTORS == False:
28
+ DESCRIPTOR._options = None
29
+ _globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._options = None
30
+ _globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
31
+ _globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._options = None
32
+ _globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_options = b'8\001'
33
+ _globals['_STARTRUNREQUEST']._serialized_start=165
34
+ _globals['_STARTRUNREQUEST']._serialized_end=431
35
+ _globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=358
36
+ _globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=431
37
+ _globals['_STARTRUNRESPONSE']._serialized_start=433
38
+ _globals['_STARTRUNRESPONSE']._serialized_end=483
39
+ _globals['_STREAMLOGSREQUEST']._serialized_start=485
40
+ _globals['_STREAMLOGSREQUEST']._serialized_end=545
41
+ _globals['_STREAMLOGSRESPONSE']._serialized_start=547
42
+ _globals['_STREAMLOGSRESPONSE']._serialized_end=613
43
+ _globals['_LISTRUNSREQUEST']._serialized_start=615
44
+ _globals['_LISTRUNSREQUEST']._serialized_end=664
45
+ _globals['_LISTRUNSRESPONSE']._serialized_start=667
46
+ _globals['_LISTRUNSRESPONSE']._serialized_end=824
47
+ _globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_start=761
48
+ _globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_end=824
49
+ _globals['_GETLOGINDETAILSREQUEST']._serialized_start=826
50
+ _globals['_GETLOGINDETAILSREQUEST']._serialized_end=850
51
+ _globals['_GETLOGINDETAILSRESPONSE']._serialized_start=853
52
+ _globals['_GETLOGINDETAILSRESPONSE']._serialized_end=992
53
+ _globals['_GETAUTHTOKENSREQUEST']._serialized_start=994
54
+ _globals['_GETAUTHTOKENSREQUEST']._serialized_end=1037
55
+ _globals['_GETAUTHTOKENSRESPONSE']._serialized_start=1039
56
+ _globals['_GETAUTHTOKENSRESPONSE']._serialized_end=1107
57
+ _globals['_STOPRUNREQUEST']._serialized_start=1109
58
+ _globals['_STOPRUNREQUEST']._serialized_end=1141
59
+ _globals['_STOPRUNRESPONSE']._serialized_start=1143
60
+ _globals['_STOPRUNRESPONSE']._serialized_end=1177
61
+ _globals['_PULLARTIFACTSREQUEST']._serialized_start=1179
62
+ _globals['_PULLARTIFACTSREQUEST']._serialized_end=1217
63
+ _globals['_PULLARTIFACTSRESPONSE']._serialized_start=1219
64
+ _globals['_PULLARTIFACTSRESPONSE']._serialized_end=1268
65
+ _globals['_REGISTERNODEREQUEST']._serialized_start=1270
66
+ _globals['_REGISTERNODEREQUEST']._serialized_end=1311
67
+ _globals['_REGISTERNODERESPONSE']._serialized_start=1313
68
+ _globals['_REGISTERNODERESPONSE']._serialized_end=1369
69
+ _globals['_UNREGISTERNODEREQUEST']._serialized_start=1371
70
+ _globals['_UNREGISTERNODEREQUEST']._serialized_end=1411
71
+ _globals['_UNREGISTERNODERESPONSE']._serialized_start=1413
72
+ _globals['_UNREGISTERNODERESPONSE']._serialized_end=1437
73
+ _globals['_LISTNODESREQUEST']._serialized_start=1439
74
+ _globals['_LISTNODESREQUEST']._serialized_end=1457
75
+ _globals['_LISTNODESRESPONSE']._serialized_start=1459
76
+ _globals['_LISTNODESRESPONSE']._serialized_end=1533
77
+ _globals['_CONTROL']._serialized_start=1536
78
+ _globals['_CONTROL']._serialized_end=2364
79
+ # @@protoc_insertion_point(module_scope)
@@ -36,20 +36,23 @@ class StartRunRequest(google.protobuf.message.Message):
36
36
  FAB_FIELD_NUMBER: builtins.int
37
37
  OVERRIDE_CONFIG_FIELD_NUMBER: builtins.int
38
38
  FEDERATION_OPTIONS_FIELD_NUMBER: builtins.int
39
+ APP_ID_FIELD_NUMBER: builtins.int
39
40
  @property
40
41
  def fab(self) -> flwr.proto.fab_pb2.Fab: ...
41
42
  @property
42
43
  def override_config(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.transport_pb2.Scalar]: ...
43
44
  @property
44
45
  def federation_options(self) -> flwr.proto.recorddict_pb2.ConfigRecord: ...
46
+ app_id: typing.Text
45
47
  def __init__(self,
46
48
  *,
47
49
  fab: typing.Optional[flwr.proto.fab_pb2.Fab] = ...,
48
50
  override_config: typing.Optional[typing.Mapping[typing.Text, flwr.proto.transport_pb2.Scalar]] = ...,
49
51
  federation_options: typing.Optional[flwr.proto.recorddict_pb2.ConfigRecord] = ...,
52
+ app_id: typing.Text = ...,
50
53
  ) -> None: ...
51
54
  def HasField(self, field_name: typing_extensions.Literal["fab",b"fab","federation_options",b"federation_options"]) -> builtins.bool: ...
52
- def ClearField(self, field_name: typing_extensions.Literal["fab",b"fab","federation_options",b"federation_options","override_config",b"override_config"]) -> None: ...
55
+ def ClearField(self, field_name: typing_extensions.Literal["app_id",b"app_id","fab",b"fab","federation_options",b"federation_options","override_config",b"override_config"]) -> None: ...
53
56
  global___StartRunRequest = StartRunRequest
54
57
 
55
58
  class StartRunResponse(google.protobuf.message.Message):
@@ -130,11 +130,13 @@ class FleetServicer(fleet_pb2_grpc.FleetServicer):
130
130
  request=request,
131
131
  state=state,
132
132
  )
133
+ log(
134
+ INFO, "[Fleet.CreateNode] Created node_id=%s", response.node.node_id
135
+ )
133
136
 
134
137
  except ValueError as e:
135
138
  # Public key already in use
136
139
  context.abort(grpc.StatusCode.FAILED_PRECONDITION, str(e))
137
- log(INFO, "[Fleet.CreateNode] Created node_id=%s", response.node.node_id)
138
140
  log(DEBUG, "[Fleet.CreateNode] Response: %s", MessageToDict(response))
139
141
  return response
140
142
 
@@ -411,10 +411,10 @@ class InMemoryLinkState(LinkState): # pylint: disable=R0902,R0904
411
411
  ) -> Sequence[NodeInfo]:
412
412
  """Retrieve information about nodes based on the specified filters."""
413
413
  with self.lock:
414
- self._check_and_tag_deactivated_nodes()
414
+ self._check_and_tag_offline_nodes()
415
415
  result = []
416
- for node in self.nodes.values():
417
- if node_ids is not None and node.node_id not in node_ids:
416
+ for node_id in self.nodes.keys() if node_ids is None else node_ids:
417
+ if (node := self.nodes.get(node_id)) is None:
418
418
  continue
419
419
  if owner_aids is not None and node.owner_aid not in owner_aids:
420
420
  continue
@@ -423,11 +423,15 @@ class InMemoryLinkState(LinkState): # pylint: disable=R0902,R0904
423
423
  result.append(node)
424
424
  return result
425
425
 
426
- def _check_and_tag_deactivated_nodes(self) -> None:
426
+ def _check_and_tag_offline_nodes(
427
+ self, node_ids: Optional[list[int]] = None
428
+ ) -> None:
427
429
  with self.lock:
428
430
  # Set all nodes of "online" status to "offline" if they've offline
429
431
  current_ts = now().timestamp()
430
- for node in self.nodes.values():
432
+ for node_id in node_ids or self.nodes.keys():
433
+ if (node := self.nodes.get(node_id)) is None:
434
+ continue
431
435
  if node.status == NodeStatus.ONLINE:
432
436
  if node.online_until <= current_ts:
433
437
  node.status = NodeStatus.OFFLINE
@@ -99,6 +99,10 @@ SQL_CREATE_INDEX_OWNER_AID = """
99
99
  CREATE INDEX IF NOT EXISTS idx_node_owner_aid ON node(owner_aid);
100
100
  """
101
101
 
102
+ SQL_CREATE_INDEX_NODE_STATUS = """
103
+ CREATE INDEX IF NOT EXISTS idx_node_status ON node(status);
104
+ """
105
+
102
106
  SQL_CREATE_TABLE_RUN = """
103
107
  CREATE TABLE IF NOT EXISTS run(
104
108
  run_id INTEGER UNIQUE,
@@ -199,6 +203,7 @@ class SqliteLinkState(LinkState, SqliteMixin): # pylint: disable=R0904
199
203
  SQL_CREATE_TABLE_TOKEN_STORE,
200
204
  SQL_CREATE_INDEX_ONLINE_UNTIL,
201
205
  SQL_CREATE_INDEX_OWNER_AID,
206
+ SQL_CREATE_INDEX_NODE_STATUS,
202
207
  log_queries=log_queries,
203
208
  )
204
209
 
@@ -638,6 +643,28 @@ class SqliteLinkState(LinkState, SqliteMixin): # pylint: disable=R0904
638
643
  node.node_id for node in self.get_node_info(statuses=[NodeStatus.ONLINE])
639
644
  }
640
645
 
646
+ def _check_and_tag_offline_nodes(
647
+ self, node_ids: Optional[list[int]] = None
648
+ ) -> None:
649
+ """Check and tag offline nodes."""
650
+ # strftime will convert POSIX timestamp to ISO format
651
+ query = """
652
+ UPDATE node SET status = ?,
653
+ last_deactivated_at =
654
+ strftime("%Y-%m-%dT%H:%M:%f+00:00", online_until, "unixepoch")
655
+ WHERE online_until <= ? AND status == ?
656
+ """
657
+ params = [
658
+ NodeStatus.OFFLINE,
659
+ now().timestamp(),
660
+ NodeStatus.ONLINE,
661
+ ]
662
+ if node_ids is not None:
663
+ placeholders = ",".join(["?"] * len(node_ids))
664
+ query += f" AND node_id IN ({placeholders})"
665
+ params.extend(uint64_to_int64(node_id) for node_id in node_ids)
666
+ self.conn.execute(query, params)
667
+
641
668
  def get_node_info(
642
669
  self,
643
670
  *,
@@ -646,29 +673,12 @@ class SqliteLinkState(LinkState, SqliteMixin): # pylint: disable=R0904
646
673
  statuses: Optional[Sequence[str]] = None,
647
674
  ) -> Sequence[NodeInfo]:
648
675
  """Retrieve information about nodes based on the specified filters."""
649
- if self.conn is None:
650
- raise AttributeError("LinkState is not initialized.")
651
-
652
676
  with self.conn:
653
- # Check and tag offline nodes
654
- current_dt = now()
655
- # strftime will convert POSIX timestamp to ISO format
656
- query = """
657
- UPDATE node SET status = ?,
658
- last_deactivated_at =
659
- strftime("%Y-%m-%dT%H:%M:%f+00:00", online_until, "unixepoch")
660
- WHERE online_until <= ? AND status == ?
661
- """
662
- params: list[Any] = [
663
- NodeStatus.OFFLINE,
664
- current_dt.timestamp(),
665
- NodeStatus.ONLINE,
666
- ]
667
- self.conn.execute(query, params)
677
+ self._check_and_tag_offline_nodes()
668
678
 
669
679
  # Build the WHERE clause based on provided filters
670
680
  conditions = []
671
- params = []
681
+ params: list[Any] = []
672
682
  if node_ids is not None:
673
683
  sint64_node_ids = [uint64_to_int64(node_id) for node_id in node_ids]
674
684
  placeholders = ",".join(["?"] * len(sint64_node_ids))