flwr-nightly 1.14.0.dev20241214__tar.gz → 1.15.0.dev20250107__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/PKG-INFO +2 -2
  2. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/README.md +1 -1
  3. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/pyproject.toml +11 -9
  4. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/log.py +9 -7
  5. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/login/login.py +1 -3
  6. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/ls.py +25 -22
  7. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +3 -0
  8. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +1 -1
  9. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
  10. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +1 -1
  11. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
  12. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -1
  13. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
  14. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +3 -3
  15. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
  16. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
  17. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/run/run.py +11 -18
  18. flwr_nightly-1.15.0.dev20250107/src/py/flwr/cli/stop.py +130 -0
  19. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/utils.py +81 -25
  20. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/app.py +11 -1
  21. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/client.py +0 -32
  22. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/clientapp/app.py +3 -1
  23. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/grpc_rere_client/connection.py +10 -4
  24. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/message_handler/message_handler.py +0 -2
  25. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/numpy_client.py +0 -44
  26. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/supernode/app.py +1 -2
  27. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/logger.py +16 -1
  28. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/record/recordset.py +1 -1
  29. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/retry_invoker.py +3 -1
  30. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +45 -0
  31. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/telemetry.py +13 -3
  32. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/app.py +8 -8
  33. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/run_serverapp.py +8 -9
  34. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/serverapp/app.py +17 -2
  35. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +9 -0
  36. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +1 -3
  37. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +2 -2
  38. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +10 -2
  39. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/linkstate/linkstate.py +4 -0
  40. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +6 -2
  41. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +13 -0
  42. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/simulation/app.py +15 -4
  43. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/simulation/run_simulation.py +35 -22
  44. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/simulation/simulationio_connection.py +3 -0
  45. flwr_nightly-1.14.0.dev20241214/src/py/flwr/cli/stop.py +0 -91
  46. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/LICENSE +0 -0
  47. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/__init__.py +0 -0
  48. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/__init__.py +0 -0
  49. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/app.py +0 -0
  50. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/build.py +0 -0
  51. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
  52. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/config_utils.py +0 -0
  53. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/example.py +0 -0
  54. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/install.py +0 -0
  55. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/login/__init__.py +0 -0
  56. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/__init__.py +0 -0
  57. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/new.py +0 -0
  58. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  59. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  60. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  61. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  62. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  63. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  64. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  65. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  66. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  67. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  68. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  69. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  70. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  71. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  72. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  73. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  74. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  75. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  76. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  77. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  78. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  79. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  80. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  81. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  82. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  83. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  84. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  85. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  86. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  87. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  88. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  89. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  90. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  91. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  92. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  93. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  94. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  95. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  96. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  97. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  98. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  99. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  100. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/cli/run/__init__.py +0 -0
  101. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/__init__.py +0 -0
  102. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/client_app.py +0 -0
  103. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/clientapp/__init__.py +0 -0
  104. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  105. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/clientapp/utils.py +0 -0
  106. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  107. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  108. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  109. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  110. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/grpc_client/connection.py +0 -0
  111. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  112. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  113. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  114. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/heartbeat.py +0 -0
  115. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/message_handler/__init__.py +0 -0
  116. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  117. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/mod/__init__.py +0 -0
  118. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  119. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/mod/comms_mods.py +0 -0
  120. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  121. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  122. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  123. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  124. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/mod/utils.py +0 -0
  125. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/nodestate/__init__.py +0 -0
  126. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
  127. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/nodestate/nodestate.py +0 -0
  128. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/nodestate/nodestate_factory.py +0 -0
  129. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/rest_client/__init__.py +0 -0
  130. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/rest_client/connection.py +0 -0
  131. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/run_info_store.py +0 -0
  132. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/supernode/__init__.py +0 -0
  133. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/client/typing.py +0 -0
  134. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/__init__.py +0 -0
  135. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/address.py +0 -0
  136. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/args.py +0 -0
  137. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/auth_plugin/__init__.py +0 -0
  138. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/auth_plugin/auth_plugin.py +0 -0
  139. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/config.py +0 -0
  140. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/constant.py +0 -0
  141. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/context.py +0 -0
  142. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/date.py +0 -0
  143. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/differential_privacy.py +0 -0
  144. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  145. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/dp.py +0 -0
  146. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/exit_handlers.py +0 -0
  147. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/grpc.py +0 -0
  148. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/message.py +0 -0
  149. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/object_ref.py +0 -0
  150. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/parameter.py +0 -0
  151. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/pyproject.py +0 -0
  152. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/record/__init__.py +0 -0
  153. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/record/configsrecord.py +0 -0
  154. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/record/conversion_utils.py +0 -0
  155. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/record/metricsrecord.py +0 -0
  156. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/record/parametersrecord.py +0 -0
  157. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/record/typeddict.py +0 -0
  158. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/recordset_compat.py +0 -0
  159. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  160. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  161. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  162. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  163. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  164. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  165. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  166. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/serde.py +0 -0
  167. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/typing.py +0 -0
  168. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/common/version.py +0 -0
  169. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/__init__.py +0 -0
  170. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  171. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  172. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  173. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  174. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/error_pb2.py +0 -0
  175. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/error_pb2.pyi +0 -0
  176. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  177. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  178. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/exec_pb2.py +0 -0
  179. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  180. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  181. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  182. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/fab_pb2.py +0 -0
  183. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  184. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  185. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  186. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/fleet_pb2.py +0 -0
  187. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  188. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  189. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  190. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  191. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  192. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  193. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  194. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/log_pb2.py +0 -0
  195. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/log_pb2.pyi +0 -0
  196. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
  197. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  198. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/message_pb2.py +0 -0
  199. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/message_pb2.pyi +0 -0
  200. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  201. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  202. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/node_pb2.py +0 -0
  203. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/node_pb2.pyi +0 -0
  204. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  205. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  206. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/recordset_pb2.py +0 -0
  207. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  208. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  209. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  210. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/run_pb2.py +0 -0
  211. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/run_pb2.pyi +0 -0
  212. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  213. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  214. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/serverappio_pb2.py +0 -0
  215. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
  216. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  217. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  218. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/simulationio_pb2.py +0 -0
  219. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
  220. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  221. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  222. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/task_pb2.py +0 -0
  223. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/task_pb2.pyi +0 -0
  224. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  225. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  226. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/transport_pb2.py +0 -0
  227. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  228. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  229. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  230. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/py.typed +0 -0
  231. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/__init__.py +0 -0
  232. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/client_manager.py +0 -0
  233. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/client_proxy.py +0 -0
  234. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/compat/__init__.py +0 -0
  235. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/compat/app.py +0 -0
  236. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/compat/app_utils.py +0 -0
  237. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  238. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/compat/legacy_context.py +0 -0
  239. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/criterion.py +0 -0
  240. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/driver/__init__.py +0 -0
  241. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/driver/driver.py +0 -0
  242. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  243. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  244. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/history.py +0 -0
  245. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/server.py +0 -0
  246. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/server_app.py +0 -0
  247. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/server_config.py +0 -0
  248. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/serverapp/__init__.py +0 -0
  249. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/serverapp_components.py +0 -0
  250. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/__init__.py +0 -0
  251. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/aggregate.py +0 -0
  252. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/bulyan.py +0 -0
  253. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  254. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  255. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  256. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  257. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  258. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  259. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/fedadam.py +0 -0
  260. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/fedavg.py +0 -0
  261. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  262. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  263. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  264. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/fedopt.py +0 -0
  265. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/fedprox.py +0 -0
  266. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  267. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  268. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  269. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  270. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  271. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/krum.py +0 -0
  272. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  273. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/strategy/strategy.py +0 -0
  274. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/__init__.py +0 -0
  275. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  276. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +0 -0
  277. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  278. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  279. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  280. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  281. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  282. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  283. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  284. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  285. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  286. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  287. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  288. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  289. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  290. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  291. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  292. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  293. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  294. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  295. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  296. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  297. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  298. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  299. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  300. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  301. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/linkstate/utils.py +0 -0
  302. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
  303. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  304. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/superlink/utils.py +0 -0
  305. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/typing.py +0 -0
  306. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/utils/__init__.py +0 -0
  307. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/utils/tensorboard.py +0 -0
  308. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/utils/validator.py +0 -0
  309. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/workflow/__init__.py +0 -0
  310. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/workflow/constant.py +0 -0
  311. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  312. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  313. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  314. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  315. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/simulation/__init__.py +0 -0
  316. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/simulation/legacy_app.py +0 -0
  317. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  318. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  319. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  320. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  321. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/superexec/__init__.py +0 -0
  322. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/superexec/app.py +0 -0
  323. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/superexec/deployment.py +0 -0
  324. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/superexec/exec_grpc.py +0 -0
  325. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/superexec/exec_servicer.py +0 -0
  326. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/superexec/exec_user_auth_interceptor.py +0 -0
  327. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/src/py/flwr/superexec/executor.py +0 -0
  328. {flwr_nightly-1.14.0.dev20241214 → flwr_nightly-1.15.0.dev20250107}/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.14.0.dev20241214
3
+ Version: 1.15.0.dev20250107
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -118,7 +118,7 @@ Flower's goal is to make federated learning accessible to everyone. This series
118
118
 
119
119
  4. **Custom Clients for Federated Learning**
120
120
 
121
- [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adap/flower/blob/main/doc/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb))
121
+ [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb))
122
122
 
123
123
  Stay tuned, more tutorials are coming soon. Topics include **Privacy and Security in Federated Learning**, and **Scaling Federated Learning**.
124
124
 
@@ -64,7 +64,7 @@ Flower's goal is to make federated learning accessible to everyone. This series
64
64
 
65
65
  4. **Custom Clients for Federated Learning**
66
66
 
67
- [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adap/flower/blob/main/doc/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb))
67
+ [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb))
68
68
 
69
69
  Stay tuned, more tutorials are coming soon. Topics include **Privacy and Security in Federated Learning**, and **Scaling Federated Learning**.
70
70
 
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr-nightly"
7
- version = "1.14.0.dev20241214"
7
+ version = "1.15.0.dev20250107"
8
8
  description = "Flower: A Friendly Federated AI Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -106,11 +106,11 @@ flake8 = "==5.0.4"
106
106
  parameterized = "==0.9.0"
107
107
  pytest = "==7.4.4"
108
108
  pytest-cov = "==4.1.0"
109
- pytest-watcher = "==0.4.1"
109
+ pytest-watcher = "==0.4.3"
110
110
  grpcio-tools = "==1.60.0"
111
111
  mypy-protobuf = "==3.2.0"
112
112
  jupyterlab = "==4.0.12"
113
- rope = "==1.11.0"
113
+ rope = "==1.13.0"
114
114
  semver = "==3.0.2"
115
115
  sphinx = "==7.4.7"
116
116
  sphinx-intl = "==2.2.0"
@@ -124,7 +124,7 @@ furo = "==2024.8.6"
124
124
  sphinx-reredirects = "==0.1.5"
125
125
  nbsphinx = "==0.9.5"
126
126
  nbstripout = "==0.6.1"
127
- ruff = "==0.1.9"
127
+ ruff = "==0.4.5"
128
128
  sphinx-argparse = "==0.4.0"
129
129
  pipreqs = "==0.4.13"
130
130
  mdformat = "==0.7.18"
@@ -201,9 +201,6 @@ wrap-descriptions = 88
201
201
  [tool.ruff]
202
202
  target-version = "py39"
203
203
  line-length = 88
204
- select = ["D", "E", "F", "W", "B", "ISC", "C4", "UP"]
205
- fixable = ["D", "E", "F", "W", "B", "ISC", "C4", "UP"]
206
- ignore = ["B024", "B027", "D205", "D209"]
207
204
  exclude = [
208
205
  ".bzr",
209
206
  ".direnv",
@@ -228,10 +225,15 @@ exclude = [
228
225
  "proto",
229
226
  ]
230
227
 
231
- [tool.ruff.pydocstyle]
228
+ [tool.ruff.lint]
229
+ select = ["D", "E", "F", "W", "B", "ISC", "C4", "UP"]
230
+ fixable = ["D", "E", "F", "W", "B", "ISC", "C4", "UP"]
231
+ ignore = ["B024", "B027", "D205", "D209"]
232
+
233
+ [tool.ruff.lint.pydocstyle]
232
234
  convention = "numpy"
233
235
 
234
- [tool.ruff.per-file-ignores]
236
+ [tool.ruff.lint.per-file-ignores]
235
237
  "src/py/flwr/server/strategy/*.py" = ["E501"]
236
238
 
237
239
  [tool.docsig]
@@ -34,7 +34,7 @@ from flwr.common.logger import log as logger
34
34
  from flwr.proto.exec_pb2 import StreamLogsRequest # pylint: disable=E0611
35
35
  from flwr.proto.exec_pb2_grpc import ExecStub
36
36
 
37
- from .utils import init_channel, try_obtain_cli_auth_plugin
37
+ from .utils import init_channel, try_obtain_cli_auth_plugin, unauthenticated_exc_handler
38
38
 
39
39
 
40
40
  def start_stream(
@@ -88,8 +88,9 @@ def stream_logs(
88
88
  latest_timestamp = 0.0
89
89
  res = None
90
90
  try:
91
- for res in stub.StreamLogs(req, timeout=duration):
92
- print(res.log_output, end="")
91
+ with unauthenticated_exc_handler():
92
+ for res in stub.StreamLogs(req, timeout=duration):
93
+ print(res.log_output, end="")
93
94
  except grpc.RpcError as e:
94
95
  # pylint: disable=E1101
95
96
  if e.code() != grpc.StatusCode.DEADLINE_EXCEEDED:
@@ -109,9 +110,10 @@ def print_logs(run_id: int, channel: grpc.Channel, timeout: int) -> None:
109
110
  try:
110
111
  while True:
111
112
  try:
112
- # Enforce timeout for graceful exit
113
- for res in stub.StreamLogs(req, timeout=timeout):
114
- print(res.log_output)
113
+ with unauthenticated_exc_handler():
114
+ # Enforce timeout for graceful exit
115
+ for res in stub.StreamLogs(req, timeout=timeout):
116
+ print(res.log_output)
115
117
  except grpc.RpcError as e:
116
118
  # pylint: disable=E1101
117
119
  if e.code() == grpc.StatusCode.DEADLINE_EXCEEDED:
@@ -170,7 +172,7 @@ def _log_with_exec_api(
170
172
  run_id: int,
171
173
  stream: bool,
172
174
  ) -> None:
173
- auth_plugin = try_obtain_cli_auth_plugin(app, federation, federation_config)
175
+ auth_plugin = try_obtain_cli_auth_plugin(app, federation)
174
176
  channel = init_channel(app, federation_config, auth_plugin)
175
177
 
176
178
  if stream:
@@ -65,9 +65,7 @@ def login( # pylint: disable=R0914
65
65
 
66
66
  # Get the auth plugin
67
67
  auth_type = login_response.login_details.get(AUTH_TYPE)
68
- auth_plugin = try_obtain_cli_auth_plugin(
69
- app, federation, federation_config, auth_type
70
- )
68
+ auth_plugin = try_obtain_cli_auth_plugin(app, federation, auth_type)
71
69
  if auth_plugin is None:
72
70
  typer.secho(
73
71
  f'❌ Authentication type "{auth_type}" not found',
@@ -19,13 +19,12 @@ import io
19
19
  import json
20
20
  from datetime import datetime, timedelta
21
21
  from pathlib import Path
22
- from typing import Annotated, Optional, Union
22
+ from typing import Annotated, Optional
23
23
 
24
24
  import typer
25
25
  from rich.console import Console
26
26
  from rich.table import Table
27
27
  from rich.text import Text
28
- from typer import Exit
29
28
 
30
29
  from flwr.cli.config_utils import (
31
30
  exit_if_no_address,
@@ -35,7 +34,7 @@ from flwr.cli.config_utils import (
35
34
  )
36
35
  from flwr.common.constant import FAB_CONFIG_FILE, CliOutputFormat, SubStatus
37
36
  from flwr.common.date import format_timedelta, isoformat8601_utc
38
- from flwr.common.logger import redirect_output, remove_emojis, restore_output
37
+ from flwr.common.logger import print_json_error, redirect_output, restore_output
39
38
  from flwr.common.serde import run_from_proto
40
39
  from flwr.common.typing import Run
41
40
  from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
@@ -44,7 +43,7 @@ from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
44
43
  )
45
44
  from flwr.proto.exec_pb2_grpc import ExecStub
46
45
 
47
- from .utils import init_channel, try_obtain_cli_auth_plugin
46
+ from .utils import init_channel, try_obtain_cli_auth_plugin, unauthenticated_exc_handler
48
47
 
49
48
  _RunListType = tuple[int, str, str, str, str, str, str, str, str]
50
49
 
@@ -81,13 +80,25 @@ def ls( # pylint: disable=too-many-locals, too-many-branches
81
80
  ),
82
81
  ] = CliOutputFormat.DEFAULT,
83
82
  ) -> None:
84
- """List runs."""
83
+ """List the details of one provided run ID or all runs in a Flower federation.
84
+
85
+ The following details are displayed:
86
+
87
+ - **Run ID:** Unique identifier for the run.
88
+ - **FAB:** Name of the FAB associated with the run (``{FAB_ID} (v{FAB_VERSION})``).
89
+ - **Status:** Current status of the run (pending, starting, running, finished).
90
+ - **Elapsed:** Time elapsed since the run started (``HH:MM:SS``).
91
+ - **Created At:** Timestamp when the run was created.
92
+ - **Running At:** Timestamp when the run started running.
93
+ - **Finished At:** Timestamp when the run finished.
94
+
95
+ All timestamps follow ISO 8601, UTC and are formatted as ``YYYY-MM-DD HH:MM:SSZ``.
96
+ """
85
97
  suppress_output = output_format == CliOutputFormat.JSON
86
98
  captured_output = io.StringIO()
87
99
  try:
88
100
  if suppress_output:
89
101
  redirect_output(captured_output)
90
-
91
102
  # Load and validate federation config
92
103
  typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
93
104
 
@@ -104,7 +115,7 @@ def ls( # pylint: disable=too-many-locals, too-many-branches
104
115
  raise ValueError(
105
116
  "The options '--runs' and '--run-id' are mutually exclusive."
106
117
  )
107
- auth_plugin = try_obtain_cli_auth_plugin(app, federation, federation_config)
118
+ auth_plugin = try_obtain_cli_auth_plugin(app, federation)
108
119
  channel = init_channel(app, federation_config, auth_plugin)
109
120
  stub = ExecStub(channel)
110
121
 
@@ -120,6 +131,8 @@ def ls( # pylint: disable=too-many-locals, too-many-branches
120
131
  _list_runs(stub, output_format)
121
132
 
122
133
  except ValueError as err:
134
+ if suppress_output:
135
+ redirect_output(captured_output)
123
136
  typer.secho(
124
137
  f"❌ {err}",
125
138
  fg=typer.colors.RED,
@@ -132,7 +145,7 @@ def ls( # pylint: disable=too-many-locals, too-many-branches
132
145
  if suppress_output:
133
146
  restore_output()
134
147
  e_message = captured_output.getvalue()
135
- _print_json_error(e_message, err)
148
+ print_json_error(e_message, err)
136
149
  else:
137
150
  typer.secho(
138
151
  f"{err}",
@@ -283,7 +296,8 @@ def _list_runs(
283
296
  output_format: str = CliOutputFormat.DEFAULT,
284
297
  ) -> None:
285
298
  """List all runs."""
286
- res: ListRunsResponse = stub.ListRuns(ListRunsRequest())
299
+ with unauthenticated_exc_handler():
300
+ res: ListRunsResponse = stub.ListRuns(ListRunsRequest())
287
301
  run_dict = {run_id: run_from_proto(proto) for run_id, proto in res.run_dict.items()}
288
302
 
289
303
  formatted_runs = _format_runs(run_dict, res.now)
@@ -299,7 +313,8 @@ def _display_one_run(
299
313
  output_format: str = CliOutputFormat.DEFAULT,
300
314
  ) -> None:
301
315
  """Display information about a specific run."""
302
- res: ListRunsResponse = stub.ListRuns(ListRunsRequest(run_id=run_id))
316
+ with unauthenticated_exc_handler():
317
+ res: ListRunsResponse = stub.ListRuns(ListRunsRequest(run_id=run_id))
303
318
  if not res.run_dict:
304
319
  raise ValueError(f"Run ID {run_id} not found")
305
320
 
@@ -310,15 +325,3 @@ def _display_one_run(
310
325
  Console().print_json(_to_json(formatted_runs))
311
326
  else:
312
327
  Console().print(_to_table(formatted_runs))
313
-
314
-
315
- def _print_json_error(msg: str, e: Union[Exit, Exception]) -> None:
316
- """Print error message as JSON."""
317
- Console().print_json(
318
- json.dumps(
319
- {
320
- "success": False,
321
- "error-message": remove_emojis(str(msg) + "\n" + str(e)),
322
- }
323
- )
324
- )
@@ -3,6 +3,9 @@ __pycache__/
3
3
  *.py[cod]
4
4
  *$py.class
5
5
 
6
+ # Flower directory
7
+ .flwr
8
+
6
9
  # C extensions
7
10
  *.so
8
11
 
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "flwr-datasets[vision]>=0.3.0",
13
13
  "torch==2.2.1",
14
14
  "torchvision==0.17.1",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "flwr-datasets>=0.3.0",
13
13
  "torch==2.3.1",
14
14
  "trl==0.8.1",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "flwr-datasets>=0.3.0",
13
13
  "torch==2.2.1",
14
14
  "transformers>=4.30.0,<5.0",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "jax==0.4.30",
13
13
  "jaxlib==0.4.30",
14
14
  "scikit-learn==1.3.2",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "flwr-datasets[vision]>=0.3.0",
13
13
  "mlx==0.21.1",
14
14
  ]
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "numpy>=1.21.0",
13
13
  ]
14
14
 
@@ -8,10 +8,10 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "flwr-datasets[vision]>=0.3.0",
13
- "torch==2.2.1",
14
- "torchvision==0.17.1",
13
+ "torch==2.5.1",
14
+ "torchvision==0.20.1",
15
15
  ]
16
16
 
17
17
  [tool.hatch.build.targets.wheel]
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "flwr-datasets[vision]>=0.3.0",
13
13
  "scikit-learn>=1.1.1",
14
14
  ]
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.13.1",
11
+ "flwr[simulation]>=1.14.0",
12
12
  "flwr-datasets[vision]>=0.3.0",
13
13
  "tensorflow>=2.11.1,<2.18.0",
14
14
  ]
@@ -19,7 +19,7 @@ import io
19
19
  import json
20
20
  import subprocess
21
21
  from pathlib import Path
22
- from typing import Annotated, Any, Optional, Union
22
+ from typing import Annotated, Any, Optional
23
23
 
24
24
  import typer
25
25
  from rich.console import Console
@@ -37,7 +37,7 @@ from flwr.common.config import (
37
37
  user_config_to_configsrecord,
38
38
  )
39
39
  from flwr.common.constant import CliOutputFormat
40
- from flwr.common.logger import redirect_output, remove_emojis, restore_output
40
+ from flwr.common.logger import print_json_error, redirect_output, restore_output
41
41
  from flwr.common.serde import (
42
42
  configs_record_to_proto,
43
43
  fab_to_proto,
@@ -48,7 +48,11 @@ from flwr.proto.exec_pb2 import StartRunRequest # pylint: disable=E0611
48
48
  from flwr.proto.exec_pb2_grpc import ExecStub
49
49
 
50
50
  from ..log import start_stream
51
- from ..utils import init_channel, try_obtain_cli_auth_plugin
51
+ from ..utils import (
52
+ init_channel,
53
+ try_obtain_cli_auth_plugin,
54
+ unauthenticated_exc_handler,
55
+ )
52
56
 
53
57
  CONN_REFRESH_PERIOD = 60 # Connection refresh period for log streaming (seconds)
54
58
 
@@ -122,7 +126,7 @@ def run(
122
126
  if suppress_output:
123
127
  restore_output()
124
128
  e_message = captured_output.getvalue()
125
- _print_json_error(e_message, err)
129
+ print_json_error(e_message, err)
126
130
  else:
127
131
  typer.secho(
128
132
  f"{err}",
@@ -144,7 +148,7 @@ def _run_with_exec_api(
144
148
  stream: bool,
145
149
  output_format: str,
146
150
  ) -> None:
147
- auth_plugin = try_obtain_cli_auth_plugin(app, federation, federation_config)
151
+ auth_plugin = try_obtain_cli_auth_plugin(app, federation)
148
152
  channel = init_channel(app, federation_config, auth_plugin)
149
153
  stub = ExecStub(channel)
150
154
 
@@ -166,7 +170,8 @@ def _run_with_exec_api(
166
170
  override_config=user_config_to_proto(parse_config_args(config_overrides)),
167
171
  federation_options=configs_record_to_proto(c_record),
168
172
  )
169
- res = stub.StartRun(req)
173
+ with unauthenticated_exc_handler():
174
+ res = stub.StartRun(req)
170
175
 
171
176
  if res.HasField("run_id"):
172
177
  typer.secho(f"🎊 Successfully started run {res.run_id}", fg=typer.colors.GREEN)
@@ -239,15 +244,3 @@ def _run_without_exec_api(
239
244
  check=True,
240
245
  text=True,
241
246
  )
242
-
243
-
244
- def _print_json_error(msg: str, e: Union[typer.Exit, Exception]) -> None:
245
- """Print error message as JSON."""
246
- Console().print_json(
247
- json.dumps(
248
- {
249
- "success": False,
250
- "error-message": remove_emojis(str(msg) + "\n" + str(e)),
251
- }
252
- )
253
- )
@@ -0,0 +1,130 @@
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
+ """Flower command line interface `stop` command."""
16
+
17
+
18
+ import io
19
+ import json
20
+ from pathlib import Path
21
+ from typing import Annotated, Optional
22
+
23
+ import typer
24
+ from rich.console import Console
25
+
26
+ from flwr.cli.config_utils import (
27
+ exit_if_no_address,
28
+ load_and_validate,
29
+ process_loaded_project_config,
30
+ validate_federation_in_project_config,
31
+ )
32
+ from flwr.common.constant import FAB_CONFIG_FILE, CliOutputFormat
33
+ from flwr.common.logger import print_json_error, redirect_output, restore_output
34
+ from flwr.proto.exec_pb2 import StopRunRequest, StopRunResponse # pylint: disable=E0611
35
+ from flwr.proto.exec_pb2_grpc import ExecStub
36
+
37
+ from .utils import init_channel, try_obtain_cli_auth_plugin, unauthenticated_exc_handler
38
+
39
+
40
+ def stop( # pylint: disable=R0914
41
+ run_id: Annotated[ # pylint: disable=unused-argument
42
+ int,
43
+ typer.Argument(help="The Flower run ID to stop"),
44
+ ],
45
+ app: Annotated[
46
+ Path,
47
+ typer.Argument(help="Path of the Flower project"),
48
+ ] = Path("."),
49
+ federation: Annotated[
50
+ Optional[str],
51
+ typer.Argument(help="Name of the federation"),
52
+ ] = None,
53
+ output_format: Annotated[
54
+ str,
55
+ typer.Option(
56
+ "--format",
57
+ case_sensitive=False,
58
+ help="Format output using 'default' view or 'json'",
59
+ ),
60
+ ] = CliOutputFormat.DEFAULT,
61
+ ) -> None:
62
+ """Stop a run."""
63
+ suppress_output = output_format == CliOutputFormat.JSON
64
+ captured_output = io.StringIO()
65
+ try:
66
+ if suppress_output:
67
+ redirect_output(captured_output)
68
+
69
+ # Load and validate federation config
70
+ typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
71
+
72
+ pyproject_path = app / FAB_CONFIG_FILE if app else None
73
+ config, errors, warnings = load_and_validate(path=pyproject_path)
74
+ config = process_loaded_project_config(config, errors, warnings)
75
+ federation, federation_config = validate_federation_in_project_config(
76
+ federation, config
77
+ )
78
+ exit_if_no_address(federation_config, "stop")
79
+
80
+ try:
81
+ auth_plugin = try_obtain_cli_auth_plugin(app, federation)
82
+ channel = init_channel(app, federation_config, auth_plugin)
83
+ stub = ExecStub(channel) # pylint: disable=unused-variable # noqa: F841
84
+
85
+ typer.secho(f"✋ Stopping run ID {run_id}...", fg=typer.colors.GREEN)
86
+ _stop_run(stub=stub, run_id=run_id, output_format=output_format)
87
+
88
+ except ValueError as err:
89
+ typer.secho(
90
+ f"❌ {err}",
91
+ fg=typer.colors.RED,
92
+ bold=True,
93
+ )
94
+ raise typer.Exit(code=1) from err
95
+ finally:
96
+ channel.close()
97
+ except (typer.Exit, Exception) as err: # pylint: disable=broad-except
98
+ if suppress_output:
99
+ restore_output()
100
+ e_message = captured_output.getvalue()
101
+ print_json_error(e_message, err)
102
+ else:
103
+ typer.secho(
104
+ f"{err}",
105
+ fg=typer.colors.RED,
106
+ bold=True,
107
+ )
108
+ finally:
109
+ if suppress_output:
110
+ restore_output()
111
+ captured_output.close()
112
+
113
+
114
+ def _stop_run(stub: ExecStub, run_id: int, output_format: str) -> None:
115
+ """Stop a run."""
116
+ with unauthenticated_exc_handler():
117
+ response: StopRunResponse = stub.StopRun(request=StopRunRequest(run_id=run_id))
118
+ if response.success:
119
+ typer.secho(f"✅ Run {run_id} successfully stopped.", fg=typer.colors.GREEN)
120
+ if output_format == CliOutputFormat.JSON:
121
+ run_output = json.dumps(
122
+ {
123
+ "success": True,
124
+ "run-id": run_id,
125
+ }
126
+ )
127
+ restore_output()
128
+ Console().print_json(run_output)
129
+ else:
130
+ typer.secho(f"❌ Run {run_id} couldn't be stopped.", fg=typer.colors.RED)