flwr-nightly 1.13.0.dev20241114__tar.gz → 1.13.0.dev20241115__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 (329) hide show
  1. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/PKG-INFO +2 -1
  2. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/pyproject.toml +2 -1
  3. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/app.py +39 -11
  4. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/clientapp/app.py +29 -22
  5. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/supernode/app.py +29 -17
  6. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/constant.py +21 -6
  7. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/app.py +37 -12
  8. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/driver/grpc_driver.py +2 -2
  9. flwr_nightly-1.13.0.dev20241115/src/py/flwr/server/run_serverapp.py +77 -0
  10. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/serverapp/app.py +33 -22
  11. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +55 -28
  12. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/linkstate/linkstate.py +19 -5
  13. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +70 -111
  14. flwr_nightly-1.13.0.dev20241115/src/py/flwr/server/superlink/linkstate/utils.py +389 -0
  15. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/app.py +3 -3
  16. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/legacy_app.py +21 -1
  17. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/simulationio_connection.py +2 -2
  18. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/superexec/deployment.py +9 -5
  19. flwr_nightly-1.13.0.dev20241114/src/py/flwr/server/run_serverapp.py +0 -307
  20. flwr_nightly-1.13.0.dev20241114/src/py/flwr/server/superlink/linkstate/utils.py +0 -210
  21. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/LICENSE +0 -0
  22. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/README.md +0 -0
  23. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/__init__.py +0 -0
  24. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/__init__.py +0 -0
  25. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/app.py +0 -0
  26. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/build.py +0 -0
  27. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/config_utils.py +0 -0
  28. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/example.py +0 -0
  29. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/install.py +0 -0
  30. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/log.py +0 -0
  31. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/ls.py +0 -0
  32. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/__init__.py +0 -0
  33. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/new.py +0 -0
  34. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  35. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  36. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  37. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  38. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  39. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  40. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  41. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  42. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  43. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  44. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  45. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  46. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  47. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  48. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  49. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  50. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  51. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  52. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  53. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  54. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  55. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  56. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  57. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  58. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  59. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  60. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  61. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  62. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  63. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  64. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  65. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  66. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  67. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  68. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  69. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  70. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  71. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  72. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  73. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  74. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  75. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  76. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  77. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  78. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  79. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  80. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  81. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  82. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  83. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  84. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  85. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  86. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/run/__init__.py +0 -0
  87. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/run/run.py +0 -0
  88. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/utils.py +0 -0
  89. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/__init__.py +0 -0
  90. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/client.py +0 -0
  91. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/client_app.py +0 -0
  92. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/clientapp/__init__.py +0 -0
  93. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  94. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/clientapp/utils.py +0 -0
  95. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  96. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  97. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  98. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  99. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/grpc_client/connection.py +0 -0
  100. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  101. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  102. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  103. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  104. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/heartbeat.py +0 -0
  105. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/message_handler/__init__.py +0 -0
  106. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  107. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  108. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/mod/__init__.py +0 -0
  109. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  110. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/mod/comms_mods.py +0 -0
  111. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  112. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  113. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  114. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  115. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/mod/utils.py +0 -0
  116. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/nodestate/__init__.py +0 -0
  117. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
  118. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/nodestate/nodestate.py +0 -0
  119. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/nodestate/nodestate_factory.py +0 -0
  120. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/numpy_client.py +0 -0
  121. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/rest_client/__init__.py +0 -0
  122. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/rest_client/connection.py +0 -0
  123. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/run_info_store.py +0 -0
  124. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/supernode/__init__.py +0 -0
  125. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/typing.py +0 -0
  126. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/__init__.py +0 -0
  127. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/address.py +0 -0
  128. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/args.py +0 -0
  129. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/config.py +0 -0
  130. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/context.py +0 -0
  131. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/date.py +0 -0
  132. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/differential_privacy.py +0 -0
  133. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  134. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/dp.py +0 -0
  135. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/exit_handlers.py +0 -0
  136. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/grpc.py +0 -0
  137. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/logger.py +0 -0
  138. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/message.py +0 -0
  139. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/object_ref.py +0 -0
  140. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/parameter.py +0 -0
  141. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/pyproject.py +0 -0
  142. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/record/__init__.py +0 -0
  143. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/record/configsrecord.py +0 -0
  144. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/record/conversion_utils.py +0 -0
  145. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/record/metricsrecord.py +0 -0
  146. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/record/parametersrecord.py +0 -0
  147. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/record/recordset.py +0 -0
  148. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/record/typeddict.py +0 -0
  149. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/recordset_compat.py +0 -0
  150. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/retry_invoker.py +0 -0
  151. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  152. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  153. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  154. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  155. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  156. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  157. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  158. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  159. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/serde.py +0 -0
  160. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/telemetry.py +0 -0
  161. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/typing.py +0 -0
  162. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/version.py +0 -0
  163. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/__init__.py +0 -0
  164. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  165. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  166. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  167. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  168. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/common_pb2.py +0 -0
  169. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/common_pb2.pyi +0 -0
  170. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  171. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  172. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/control_pb2.py +0 -0
  173. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/control_pb2.pyi +0 -0
  174. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
  175. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  176. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/error_pb2.py +0 -0
  177. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/error_pb2.pyi +0 -0
  178. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  179. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  180. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/exec_pb2.py +0 -0
  181. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  182. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  183. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  184. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/fab_pb2.py +0 -0
  185. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  186. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  187. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  188. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/fleet_pb2.py +0 -0
  189. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  190. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  191. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  192. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  193. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  194. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  195. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  196. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/log_pb2.py +0 -0
  197. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/log_pb2.pyi +0 -0
  198. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
  199. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  200. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/message_pb2.py +0 -0
  201. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/message_pb2.pyi +0 -0
  202. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  203. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  204. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/node_pb2.py +0 -0
  205. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/node_pb2.pyi +0 -0
  206. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  207. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  208. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/recordset_pb2.py +0 -0
  209. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  210. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  211. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  212. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/run_pb2.py +0 -0
  213. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/run_pb2.pyi +0 -0
  214. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  215. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  216. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/serverappio_pb2.py +0 -0
  217. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
  218. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  219. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  220. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/simulationio_pb2.py +0 -0
  221. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
  222. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  223. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  224. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/task_pb2.py +0 -0
  225. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/task_pb2.pyi +0 -0
  226. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  227. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  228. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/transport_pb2.py +0 -0
  229. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  230. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  231. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  232. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/py.typed +0 -0
  233. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/__init__.py +0 -0
  234. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/client_manager.py +0 -0
  235. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/client_proxy.py +0 -0
  236. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/compat/__init__.py +0 -0
  237. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/compat/app.py +0 -0
  238. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/compat/app_utils.py +0 -0
  239. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  240. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/compat/legacy_context.py +0 -0
  241. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/criterion.py +0 -0
  242. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/driver/__init__.py +0 -0
  243. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/driver/driver.py +0 -0
  244. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  245. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/history.py +0 -0
  246. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/server.py +0 -0
  247. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/server_app.py +0 -0
  248. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/server_config.py +0 -0
  249. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/serverapp/__init__.py +0 -0
  250. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/serverapp_components.py +0 -0
  251. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/__init__.py +0 -0
  252. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/aggregate.py +0 -0
  253. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/bulyan.py +0 -0
  254. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  255. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  256. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  257. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  258. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  259. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  260. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedadam.py +0 -0
  261. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedavg.py +0 -0
  262. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  263. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  264. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  265. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedopt.py +0 -0
  266. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedprox.py +0 -0
  267. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  268. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  269. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  270. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  271. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  272. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/krum.py +0 -0
  273. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  274. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/strategy.py +0 -0
  275. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/__init__.py +0 -0
  276. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  277. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +0 -0
  278. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +0 -0
  279. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  280. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  281. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  282. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  283. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  284. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  285. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  286. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  287. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  288. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  289. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  290. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  291. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  292. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  293. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  294. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  295. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  296. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  297. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  298. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  299. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  300. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  301. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  302. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  303. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  304. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  305. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
  306. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  307. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  308. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/typing.py +0 -0
  309. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/utils/__init__.py +0 -0
  310. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/utils/tensorboard.py +0 -0
  311. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/utils/validator.py +0 -0
  312. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/workflow/__init__.py +0 -0
  313. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/workflow/constant.py +0 -0
  314. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  315. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  316. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  317. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  318. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/__init__.py +0 -0
  319. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  320. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  321. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  322. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  323. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/run_simulation.py +0 -0
  324. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/superexec/__init__.py +0 -0
  325. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/superexec/app.py +0 -0
  326. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/superexec/exec_grpc.py +0 -0
  327. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/superexec/exec_servicer.py +0 -0
  328. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/superexec/executor.py +0 -0
  329. {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/superexec/simulation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.13.0.dev20241114
3
+ Version: 1.13.0.dev20241115
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -42,6 +42,7 @@ Requires-Dist: protobuf (>=4.25.2,<5.0.0)
42
42
  Requires-Dist: pycryptodome (>=3.18.0,<4.0.0)
43
43
  Requires-Dist: ray (==2.10.0) ; (python_version >= "3.9" and python_version < "3.12") and (extra == "simulation")
44
44
  Requires-Dist: requests (>=2.31.0,<3.0.0) ; extra == "rest"
45
+ Requires-Dist: rich (>=13.5.0,<14.0.0)
45
46
  Requires-Dist: starlette (>=0.31.0,<0.32.0) ; extra == "rest"
46
47
  Requires-Dist: tomli (>=2.0.1,<3.0.0)
47
48
  Requires-Dist: tomli-w (>=1.0.0,<2.0.0)
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr-nightly"
7
- version = "1.13.0.dev20241114"
7
+ version = "1.13.0.dev20241115"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -78,6 +78,7 @@ tomli = "^2.0.1"
78
78
  tomli-w = "^1.0.0"
79
79
  pathspec = "^0.12.1"
80
80
  hatchling = "^1.25.0"
81
+ rich = "^13.5.0"
81
82
  # Optional dependencies (Simulation Engine)
82
83
  ray = { version = "==2.10.0", optional = true, python = ">=3.9,<3.12" }
83
84
  # Optional dependencies (REST transport layer)
@@ -37,11 +37,13 @@ from flwr.client.typing import ClientFnExt
37
37
  from flwr.common import GRPC_MAX_MESSAGE_LENGTH, Context, EventType, Message, event
38
38
  from flwr.common.address import parse_address
39
39
  from flwr.common.constant import (
40
- CLIENTAPPIO_API_DEFAULT_ADDRESS,
40
+ CLIENT_OCTET,
41
+ CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS,
41
42
  ISOLATION_MODE_PROCESS,
42
43
  ISOLATION_MODE_SUBPROCESS,
43
44
  MISSING_EXTRA_REST,
44
45
  RUN_ID_NUM_BYTES,
46
+ SERVER_OCTET,
45
47
  TRANSPORT_TYPE_GRPC_ADAPTER,
46
48
  TRANSPORT_TYPE_GRPC_BIDI,
47
49
  TRANSPORT_TYPE_GRPC_RERE,
@@ -102,6 +104,11 @@ def start_client(
102
104
  ) -> None:
103
105
  """Start a Flower client node which connects to a Flower server.
104
106
 
107
+ Warning
108
+ -------
109
+ This function is deprecated since 1.13.0. Use :code:`flower-supernode` command
110
+ instead to start a SuperNode.
111
+
105
112
  Parameters
106
113
  ----------
107
114
  server_address : str
@@ -176,6 +183,17 @@ def start_client(
176
183
  >>> root_certificates=Path("/crts/root.pem").read_bytes(),
177
184
  >>> )
178
185
  """
186
+ msg = (
187
+ "flwr.client.start_client() is deprecated."
188
+ "\n\tInstead, use the `flower-supernode` CLI command to start a SuperNode "
189
+ "as shown below:"
190
+ "\n\n\t\t$ flower-supernode --insecure --superlink='<IP>:<PORT>'"
191
+ "\n\n\tTo view all available options, run:"
192
+ "\n\n\t\t$ flower-supernode --help"
193
+ "\n\n\tUsing `start_client()` is deprecated."
194
+ )
195
+ warn_deprecated_feature(name=msg)
196
+
179
197
  event(EventType.START_CLIENT_ENTER)
180
198
  start_client_internal(
181
199
  server_address=server_address,
@@ -216,7 +234,7 @@ def start_client_internal(
216
234
  max_wait_time: Optional[float] = None,
217
235
  flwr_path: Optional[Path] = None,
218
236
  isolation: Optional[str] = None,
219
- supernode_address: Optional[str] = CLIENTAPPIO_API_DEFAULT_ADDRESS,
237
+ clientappio_api_address: Optional[str] = CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS,
220
238
  certificates: Optional[tuple[bytes, bytes, bytes]] = None,
221
239
  ssl_ca_certfile: Optional[str] = None,
222
240
  ) -> None:
@@ -276,9 +294,11 @@ def start_client_internal(
276
294
  `process`. Defaults to `None`, which runs the `ClientApp` in the same process
277
295
  as the SuperNode. If `subprocess`, the `ClientApp` runs in a subprocess started
278
296
  by the SueprNode and communicates using gRPC at the address
279
- `supernode_address`. If `process`, the `ClientApp` runs in a separate isolated
280
- process and communicates using gRPC at the address `supernode_address`.
281
- supernode_address : Optional[str] (default: `CLIENTAPPIO_API_DEFAULT_ADDRESS`)
297
+ `clientappio_api_address`. If `process`, the `ClientApp` runs in a separate
298
+ isolated process and communicates using gRPC at the address
299
+ `clientappio_api_address`.
300
+ clientappio_api_address : Optional[str]
301
+ (default: `CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS`)
282
302
  The SuperNode gRPC server address.
283
303
  certificates : Optional[Tuple[bytes, bytes, bytes]] (default: None)
284
304
  Tuple containing the CA certificate, server certificate, and server private key.
@@ -310,16 +330,16 @@ def start_client_internal(
310
330
  load_client_app_fn = _load_client_app
311
331
 
312
332
  if isolation:
313
- if supernode_address is None:
333
+ if clientappio_api_address is None:
314
334
  raise ValueError(
315
- f"`supernode_address` required when `isolation` is "
335
+ f"`clientappio_api_address` required when `isolation` is "
316
336
  f"{ISOLATION_MODE_SUBPROCESS} or {ISOLATION_MODE_PROCESS}",
317
337
  )
318
338
  _clientappio_grpc_server, clientappio_servicer = run_clientappio_api_grpc(
319
- address=supernode_address,
339
+ address=clientappio_api_address,
320
340
  certificates=certificates,
321
341
  )
322
- supernode_address = cast(str, supernode_address)
342
+ clientappio_api_address = cast(str, clientappio_api_address)
323
343
 
324
344
  # At this point, only `load_client_app_fn` should be used
325
345
  # Both `client` and `client_fn` must not be used directly
@@ -515,11 +535,19 @@ def start_client_internal(
515
535
  )
516
536
 
517
537
  if start_subprocess:
538
+ _octet, _colon, _port = (
539
+ clientappio_api_address.rpartition(":")
540
+ )
541
+ io_address = (
542
+ f"{CLIENT_OCTET}:{_port}"
543
+ if _octet == SERVER_OCTET
544
+ else clientappio_api_address
545
+ )
518
546
  # Start ClientApp subprocess
519
547
  command = [
520
548
  "flwr-clientapp",
521
- "--supernode",
522
- supernode_address,
549
+ "--clientappio-api-address",
550
+ io_address,
523
551
  "--token",
524
552
  str(token),
525
553
  ]
@@ -26,7 +26,7 @@ from flwr.client.client_app import ClientApp, LoadClientAppError
26
26
  from flwr.common import Context, Message
27
27
  from flwr.common.args import add_args_flwr_app_common, try_obtain_root_certificates
28
28
  from flwr.common.config import get_flwr_dir
29
- from flwr.common.constant import ErrorCode
29
+ from flwr.common.constant import CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS, ErrorCode
30
30
  from flwr.common.grpc import create_channel
31
31
  from flwr.common.logger import log
32
32
  from flwr.common.message import Error
@@ -56,35 +56,20 @@ from .utils import get_load_client_app_fn
56
56
 
57
57
  def flwr_clientapp() -> None:
58
58
  """Run process-isolated Flower ClientApp."""
59
- parser = argparse.ArgumentParser(
60
- description="Run a Flower ClientApp",
61
- )
62
- parser.add_argument(
63
- "--supernode",
64
- type=str,
65
- help="Address of SuperNode's ClientAppIo API",
66
- )
67
- parser.add_argument(
68
- "--token",
69
- type=int,
70
- required=False,
71
- help="Unique token generated by SuperNode for each ClientApp execution",
72
- )
73
- add_args_flwr_app_common(parser=parser)
74
- args = parser.parse_args()
59
+ args = _parse_args_run_flwr_clientapp().parse_args()
75
60
 
76
61
  log(INFO, "Starting Flower ClientApp")
77
- certificates = try_obtain_root_certificates(args, args.supernode)
62
+ certificates = try_obtain_root_certificates(args, args.clientappio_api_address)
78
63
 
79
64
  log(
80
65
  DEBUG,
81
66
  "Starting isolated `ClientApp` connected to SuperNode's ClientAppIo API at %s "
82
67
  "with token %s",
83
- args.supernode,
68
+ args.clientappio_api_address,
84
69
  args.token,
85
70
  )
86
71
  run_clientapp(
87
- supernode=args.supernode,
72
+ clientappio_api_address=args.clientappio_api_address,
88
73
  run_once=(args.token is not None),
89
74
  token=args.token,
90
75
  flwr_dir=args.flwr_dir,
@@ -98,7 +83,7 @@ def on_channel_state_change(channel_connectivity: str) -> None:
98
83
 
99
84
 
100
85
  def run_clientapp( # pylint: disable=R0914
101
- supernode: str,
86
+ clientappio_api_address: str,
102
87
  run_once: bool,
103
88
  token: Optional[int] = None,
104
89
  flwr_dir: Optional[str] = None,
@@ -106,7 +91,7 @@ def run_clientapp( # pylint: disable=R0914
106
91
  ) -> None:
107
92
  """Run Flower ClientApp process."""
108
93
  channel = create_channel(
109
- server_address=supernode,
94
+ server_address=clientappio_api_address,
110
95
  insecure=(certificates is None),
111
96
  root_certificates=certificates,
112
97
  )
@@ -241,3 +226,25 @@ def push_message(
241
226
  except grpc.RpcError as e:
242
227
  log(ERROR, "[PushClientAppOutputs] gRPC error occurred: %s", str(e))
243
228
  raise e
229
+
230
+
231
+ def _parse_args_run_flwr_clientapp() -> argparse.ArgumentParser:
232
+ """Parse flwr-clientapp command line arguments."""
233
+ parser = argparse.ArgumentParser(
234
+ description="Run a Flower ClientApp",
235
+ )
236
+ parser.add_argument(
237
+ "--clientappio-api-address",
238
+ default=CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS,
239
+ type=str,
240
+ help="Address of SuperNode's ClientAppIo API (IPv4, IPv6, or a domain name)."
241
+ f"By default, it is set to {CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS}.",
242
+ )
243
+ parser.add_argument(
244
+ "--token",
245
+ type=int,
246
+ required=False,
247
+ help="Unique token generated by SuperNode for each ClientApp execution",
248
+ )
249
+ add_args_flwr_app_common(parser=parser)
250
+ return parser
@@ -34,6 +34,7 @@ from flwr.common.args import (
34
34
  )
35
35
  from flwr.common.config import parse_config_args
36
36
  from flwr.common.constant import (
37
+ CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS,
37
38
  FLEET_API_GRPC_RERE_DEFAULT_ADDRESS,
38
39
  ISOLATION_MODE_PROCESS,
39
40
  ISOLATION_MODE_SUBPROCESS,
@@ -65,12 +66,23 @@ def run_supernode() -> None:
65
66
  "Ignoring `--flwr-dir`.",
66
67
  )
67
68
 
69
+ # Exit if unsupported argument is passed by the user
70
+ if args.app is not None:
71
+ log(
72
+ ERROR,
73
+ "The `app` argument is deprecated. The SuperNode now automatically "
74
+ "uses the ClientApp delivered from the SuperLink. Providing the app "
75
+ "directory manually is no longer supported. Please remove the `app` "
76
+ "argument from your command.",
77
+ )
78
+ sys.exit(1)
79
+
68
80
  root_certificates = try_obtain_root_certificates(args, args.superlink)
69
81
  # Obtain certificates for ClientAppIo API server
70
82
  server_certificates = try_obtain_server_certificates(args, TRANSPORT_TYPE_GRPC_RERE)
71
83
  load_fn = get_load_client_app_fn(
72
84
  default_app_ref="",
73
- app_path=args.app,
85
+ app_path=None,
74
86
  flwr_dir=args.flwr_dir,
75
87
  multi_app=True,
76
88
  )
@@ -92,7 +104,7 @@ def run_supernode() -> None:
92
104
  ),
93
105
  flwr_path=args.flwr_dir,
94
106
  isolation=args.isolation,
95
- supernode_address=args.supernode_address,
107
+ clientappio_api_address=args.clientappio_api_address,
96
108
  certificates=server_certificates,
97
109
  ssl_ca_certfile=args.ssl_ca_certfile,
98
110
  )
@@ -144,12 +156,12 @@ def _parse_args_run_supernode() -> argparse.ArgumentParser:
144
156
  "app",
145
157
  nargs="?",
146
158
  default=None,
147
- help="Specify the path of the Flower App to load and run the `ClientApp`. "
148
- "The `pyproject.toml` file must be located in the root of this path. "
149
- "When this argument is provided, the SuperNode will exclusively respond to "
150
- "messages from the corresponding `ServerApp` by matching the FAB ID and FAB "
151
- "version. An error will be raised if a message is received from any other "
152
- "`ServerApp`.",
159
+ help=(
160
+ "(REMOVED) This argument is removed. The SuperNode now automatically "
161
+ "uses the ClientApp delivered from the SuperLink, so there is no need to "
162
+ "provide the app directory manually. This argument will be removed in a "
163
+ "future version."
164
+ ),
153
165
  )
154
166
  _parse_args_common(parser)
155
167
  parser.add_argument(
@@ -165,22 +177,22 @@ def _parse_args_run_supernode() -> argparse.ArgumentParser:
165
177
  )
166
178
  parser.add_argument(
167
179
  "--isolation",
168
- default=None,
180
+ default=ISOLATION_MODE_SUBPROCESS,
169
181
  required=False,
170
182
  choices=[
171
183
  ISOLATION_MODE_SUBPROCESS,
172
184
  ISOLATION_MODE_PROCESS,
173
185
  ],
174
- help="Isolation mode when running a `ClientApp` (optional, possible values: "
175
- "`subprocess`, `process`). By default, a `ClientApp` runs in the same process "
176
- "that executes the SuperNode. Use `subprocess` to configure SuperNode to run "
177
- "a `ClientApp` in a subprocess. Use `process` to indicate that a separate "
178
- "independent process gets created outside of SuperNode.",
186
+ help="Isolation mode when running a `ClientApp` (`subprocess` by default, "
187
+ "possible values: `subprocess`, `process`). Use `subprocess` to configure "
188
+ "SuperNode to run a `ClientApp` in a subprocess. Use `process` to indicate "
189
+ "that a separate independent process gets created outside of SuperNode.",
179
190
  )
180
191
  parser.add_argument(
181
- "--supernode-address",
182
- default="0.0.0.0:9094",
183
- help="Set the SuperNode gRPC server address. Defaults to `0.0.0.0:9094`.",
192
+ "--clientappio-api-address",
193
+ default=CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS,
194
+ help="ClientAppIo API (gRPC) server address (IPv4, IPv6, or a domain name). "
195
+ f"By default, it is set to {CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS}.",
184
196
  )
185
197
 
186
198
  return parser
@@ -38,17 +38,30 @@ TRANSPORT_TYPES = [
38
38
  ]
39
39
 
40
40
  # Addresses
41
+ # Ports
42
+ CLIENTAPPIO_PORT = "9094"
43
+ SERVERAPPIO_PORT = "9091"
44
+ FLEETAPI_GRPC_RERE_PORT = "9092"
45
+ FLEETAPI_PORT = "9095"
46
+ EXEC_API_PORT = "9093"
47
+ SIMULATIONIO_PORT = "9096"
48
+ # Octets
49
+ SERVER_OCTET = "0.0.0.0"
50
+ CLIENT_OCTET = "127.0.0.1"
41
51
  # SuperNode
42
- CLIENTAPPIO_API_DEFAULT_ADDRESS = "0.0.0.0:9094"
52
+ CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS = f"{SERVER_OCTET}:{CLIENTAPPIO_PORT}"
53
+ CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS = f"{CLIENT_OCTET}:{CLIENTAPPIO_PORT}"
43
54
  # SuperLink
44
- SERVERAPPIO_API_DEFAULT_ADDRESS = "0.0.0.0:9091"
45
- FLEET_API_GRPC_RERE_DEFAULT_ADDRESS = "0.0.0.0:9092"
55
+ SERVERAPPIO_API_DEFAULT_SERVER_ADDRESS = f"{SERVER_OCTET}:{SERVERAPPIO_PORT}"
56
+ SERVERAPPIO_API_DEFAULT_CLIENT_ADDRESS = f"{CLIENT_OCTET}:{SERVERAPPIO_PORT}"
57
+ FLEET_API_GRPC_RERE_DEFAULT_ADDRESS = f"{SERVER_OCTET}:{FLEETAPI_GRPC_RERE_PORT}"
46
58
  FLEET_API_GRPC_BIDI_DEFAULT_ADDRESS = (
47
59
  "[::]:8080" # IPv6 to keep start_server compatible
48
60
  )
49
- FLEET_API_REST_DEFAULT_ADDRESS = "0.0.0.0:9095"
50
- EXEC_API_DEFAULT_ADDRESS = "0.0.0.0:9093"
51
- SIMULATIONIO_API_DEFAULT_ADDRESS = "0.0.0.0:9096"
61
+ FLEET_API_REST_DEFAULT_ADDRESS = f"{SERVER_OCTET}:{FLEETAPI_PORT}"
62
+ EXEC_API_DEFAULT_SERVER_ADDRESS = f"{SERVER_OCTET}:{EXEC_API_PORT}"
63
+ SIMULATIONIO_API_DEFAULT_SERVER_ADDRESS = f"{SERVER_OCTET}:{SIMULATIONIO_PORT}"
64
+ SIMULATIONIO_API_DEFAULT_CLIENT_ADDRESS = f"{CLIENT_OCTET}:{SIMULATIONIO_PORT}"
52
65
 
53
66
  # Constants for ping
54
67
  PING_DEFAULT_INTERVAL = 30
@@ -134,6 +147,8 @@ class ErrorCode:
134
147
  UNKNOWN = 0
135
148
  LOAD_CLIENT_APP_EXCEPTION = 1
136
149
  CLIENT_APP_RAISED_EXCEPTION = 2
150
+ MESSAGE_UNAVAILABLE = 3
151
+ REPLY_MESSAGE_UNAVAILABLE = 4
137
152
 
138
153
  def __new__(cls) -> ErrorCode:
139
154
  """Prevent instantiation."""
@@ -39,21 +39,23 @@ from flwr.common.address import parse_address
39
39
  from flwr.common.args import try_obtain_server_certificates
40
40
  from flwr.common.config import get_flwr_dir, parse_config_args
41
41
  from flwr.common.constant import (
42
- EXEC_API_DEFAULT_ADDRESS,
42
+ CLIENT_OCTET,
43
+ EXEC_API_DEFAULT_SERVER_ADDRESS,
43
44
  FLEET_API_GRPC_BIDI_DEFAULT_ADDRESS,
44
45
  FLEET_API_GRPC_RERE_DEFAULT_ADDRESS,
45
46
  FLEET_API_REST_DEFAULT_ADDRESS,
46
47
  ISOLATION_MODE_PROCESS,
47
48
  ISOLATION_MODE_SUBPROCESS,
48
49
  MISSING_EXTRA_REST,
49
- SERVERAPPIO_API_DEFAULT_ADDRESS,
50
- SIMULATIONIO_API_DEFAULT_ADDRESS,
50
+ SERVER_OCTET,
51
+ SERVERAPPIO_API_DEFAULT_SERVER_ADDRESS,
52
+ SIMULATIONIO_API_DEFAULT_SERVER_ADDRESS,
51
53
  TRANSPORT_TYPE_GRPC_ADAPTER,
52
54
  TRANSPORT_TYPE_GRPC_RERE,
53
55
  TRANSPORT_TYPE_REST,
54
56
  )
55
57
  from flwr.common.exit_handlers import register_exit_handlers
56
- from flwr.common.logger import log
58
+ from flwr.common.logger import log, warn_deprecated_feature
57
59
  from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
58
60
  private_key_to_bytes,
59
61
  public_key_to_bytes,
@@ -99,6 +101,11 @@ def start_server( # pylint: disable=too-many-arguments,too-many-locals
99
101
  ) -> History:
100
102
  """Start a Flower server using the gRPC transport layer.
101
103
 
104
+ Warning
105
+ -------
106
+ This function is deprecated since 1.13.0. Use the :code:`flower-superlink` command
107
+ instead to start a SuperLink.
108
+
102
109
  Parameters
103
110
  ----------
104
111
  server_address : Optional[str]
@@ -156,6 +163,17 @@ def start_server( # pylint: disable=too-many-arguments,too-many-locals
156
163
  >>> )
157
164
  >>> )
158
165
  """
166
+ msg = (
167
+ "flwr.server.start_server() is deprecated."
168
+ "\n\tInstead, use the `flower-superlink` CLI command to start a SuperLink "
169
+ "as shown below:"
170
+ "\n\n\t\t$ flower-superlink --insecure"
171
+ "\n\n\tTo view usage and all available options, run:"
172
+ "\n\n\t\t$ flower-superlink --help"
173
+ "\n\n\tUsing `start_server()` is deprecated."
174
+ )
175
+ warn_deprecated_feature(name=msg)
176
+
159
177
  event(EventType.START_SERVER_ENTER)
160
178
 
161
179
  # Parse IP address
@@ -367,7 +385,11 @@ def run_superlink() -> None:
367
385
 
368
386
  if args.isolation == ISOLATION_MODE_SUBPROCESS:
369
387
 
370
- address = simulationio_address if sim_exec else serverappio_address
388
+ _octet, _colon, _port = serverappio_address.rpartition(":")
389
+ io_address = (
390
+ f"{CLIENT_OCTET}:{_port}" if _octet == SERVER_OCTET else serverappio_address
391
+ )
392
+ address = simulationio_address if sim_exec else io_address
371
393
  cmd = "flwr-simulation" if sim_exec else "flwr-serverapp"
372
394
 
373
395
  # Scheduler thread
@@ -426,7 +448,7 @@ def _flwr_scheduler(
426
448
  command = [
427
449
  cmd,
428
450
  "--run-once",
429
- "--superlink",
451
+ "--serverappio-api-address",
430
452
  io_api_address,
431
453
  ]
432
454
  if ssl_ca_certfile:
@@ -732,8 +754,9 @@ def _add_args_common(parser: argparse.ArgumentParser) -> None:
732
754
  def _add_args_serverappio_api(parser: argparse.ArgumentParser) -> None:
733
755
  parser.add_argument(
734
756
  "--serverappio-api-address",
735
- help="ServerAppIo API (gRPC) server address (IPv4, IPv6, or a domain name).",
736
- default=SERVERAPPIO_API_DEFAULT_ADDRESS,
757
+ default=SERVERAPPIO_API_DEFAULT_SERVER_ADDRESS,
758
+ help="ServerAppIo API (gRPC) server address (IPv4, IPv6, or a domain name). "
759
+ f"By default, it is set to {SERVERAPPIO_API_DEFAULT_SERVER_ADDRESS}.",
737
760
  )
738
761
 
739
762
 
@@ -766,8 +789,9 @@ def _add_args_exec_api(parser: argparse.ArgumentParser) -> None:
766
789
  """Add command line arguments for Exec API."""
767
790
  parser.add_argument(
768
791
  "--exec-api-address",
769
- help="Exec API server address (IPv4, IPv6, or a domain name)",
770
- default=EXEC_API_DEFAULT_ADDRESS,
792
+ help="Exec API server address (IPv4, IPv6, or a domain name) "
793
+ f"By default, it is set to {EXEC_API_DEFAULT_SERVER_ADDRESS}.",
794
+ default=EXEC_API_DEFAULT_SERVER_ADDRESS,
771
795
  )
772
796
  parser.add_argument(
773
797
  "--executor",
@@ -791,6 +815,7 @@ def _add_args_exec_api(parser: argparse.ArgumentParser) -> None:
791
815
  def _add_args_simulationio_api(parser: argparse.ArgumentParser) -> None:
792
816
  parser.add_argument(
793
817
  "--simulationio-api-address",
794
- help="SimulationIo API (gRPC) server address (IPv4, IPv6, or a domain name).",
795
- default=SIMULATIONIO_API_DEFAULT_ADDRESS,
818
+ default=SIMULATIONIO_API_DEFAULT_SERVER_ADDRESS,
819
+ help="SimulationIo API (gRPC) server address (IPv4, IPv6, or a domain name)."
820
+ f"By default, it is set to {SIMULATIONIO_API_DEFAULT_SERVER_ADDRESS}.",
796
821
  )
@@ -23,7 +23,7 @@ from typing import Optional, cast
23
23
  import grpc
24
24
 
25
25
  from flwr.common import DEFAULT_TTL, Message, Metadata, RecordSet
26
- from flwr.common.constant import SERVERAPPIO_API_DEFAULT_ADDRESS
26
+ from flwr.common.constant import SERVERAPPIO_API_DEFAULT_CLIENT_ADDRESS
27
27
  from flwr.common.grpc import create_channel
28
28
  from flwr.common.logger import log
29
29
  from flwr.common.serde import message_from_taskres, message_to_taskins, run_from_proto
@@ -66,7 +66,7 @@ class GrpcDriver(Driver):
66
66
 
67
67
  def __init__( # pylint: disable=too-many-arguments
68
68
  self,
69
- serverappio_service_address: str = SERVERAPPIO_API_DEFAULT_ADDRESS,
69
+ serverappio_service_address: str = SERVERAPPIO_API_DEFAULT_CLIENT_ADDRESS,
70
70
  root_certificates: Optional[bytes] = None,
71
71
  ) -> None:
72
72
  self._addr = serverappio_service_address
@@ -0,0 +1,77 @@
1
+ # Copyright 2024 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
+ """Run ServerApp."""
16
+
17
+
18
+ import sys
19
+ from logging import DEBUG, ERROR
20
+ from typing import Optional
21
+
22
+ from flwr.common import Context
23
+ from flwr.common.logger import log, warn_unsupported_feature
24
+ from flwr.common.object_ref import load_app
25
+
26
+ from .driver import Driver
27
+ from .server_app import LoadServerAppError, ServerApp
28
+
29
+
30
+ def run(
31
+ driver: Driver,
32
+ context: Context,
33
+ server_app_dir: str,
34
+ server_app_attr: Optional[str] = None,
35
+ loaded_server_app: Optional[ServerApp] = None,
36
+ ) -> Context:
37
+ """Run ServerApp with a given Driver."""
38
+ if not (server_app_attr is None) ^ (loaded_server_app is None):
39
+ raise ValueError(
40
+ "Either `server_app_attr` or `loaded_server_app` should be set "
41
+ "but not both."
42
+ )
43
+
44
+ # Load ServerApp if needed
45
+ def _load() -> ServerApp:
46
+ if server_app_attr:
47
+ server_app: ServerApp = load_app(
48
+ server_app_attr, LoadServerAppError, server_app_dir
49
+ )
50
+
51
+ if not isinstance(server_app, ServerApp):
52
+ raise LoadServerAppError(
53
+ f"Attribute {server_app_attr} is not of type {ServerApp}",
54
+ ) from None
55
+
56
+ if loaded_server_app:
57
+ server_app = loaded_server_app
58
+ return server_app
59
+
60
+ server_app = _load()
61
+
62
+ # Call ServerApp
63
+ server_app(driver=driver, context=context)
64
+
65
+ log(DEBUG, "ServerApp finished running.")
66
+ return context
67
+
68
+
69
+ # pylint: disable-next=too-many-branches,too-many-statements,too-many-locals
70
+ def run_server_app() -> None:
71
+ """Run Flower server app."""
72
+ warn_unsupported_feature(
73
+ "The command `flower-server-app` is deprecated and no longer in use. "
74
+ "Use the `flwr-serverapp` exclusively instead."
75
+ )
76
+ log(ERROR, "`flower-server-app` used.")
77
+ sys.exit()