flwr-nightly 1.14.0.dev20241202__tar.gz → 1.14.0.dev20241214__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 (338) hide show
  1. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/PKG-INFO +8 -7
  2. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/README.md +5 -5
  3. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/pyproject.toml +9 -7
  4. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/app.py +5 -0
  5. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/build.py +1 -0
  6. flwr_nightly-1.14.0.dev20241214/src/py/flwr/cli/cli_user_auth_interceptor.py +86 -0
  7. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/config_utils.py +19 -2
  8. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/example.py +1 -0
  9. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/install.py +1 -0
  10. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/log.py +11 -31
  11. flwr_nightly-1.14.0.dev20241214/src/py/flwr/cli/login/__init__.py +22 -0
  12. flwr_nightly-1.14.0.dev20241214/src/py/flwr/cli/login/login.py +83 -0
  13. flwr_nightly-1.14.0.dev20241214/src/py/flwr/cli/ls.py +324 -0
  14. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/__init__.py +1 -0
  15. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/new.py +2 -1
  16. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +2 -2
  17. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -2
  18. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/run/__init__.py +1 -0
  19. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/run/run.py +96 -39
  20. flwr_nightly-1.14.0.dev20241214/src/py/flwr/cli/stop.py +91 -0
  21. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/utils.py +109 -1
  22. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/app.py +3 -2
  23. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/client.py +1 -0
  24. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/clientapp/app.py +1 -0
  25. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/clientapp/utils.py +1 -0
  26. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/grpc_adapter_client/connection.py +1 -1
  27. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/grpc_client/connection.py +1 -1
  28. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/grpc_rere_client/connection.py +3 -3
  29. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/message_handler/message_handler.py +1 -0
  30. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/mod/comms_mods.py +1 -0
  31. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/mod/localdp_mod.py +1 -1
  32. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/nodestate/__init__.py +1 -0
  33. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/nodestate/nodestate.py +1 -0
  34. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/nodestate/nodestate_factory.py +1 -0
  35. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/rest_client/connection.py +3 -3
  36. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/supernode/app.py +1 -0
  37. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/address.py +1 -0
  38. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/args.py +1 -0
  39. flwr_nightly-1.14.0.dev20241214/src/py/flwr/common/auth_plugin/__init__.py +24 -0
  40. flwr_nightly-1.14.0.dev20241214/src/py/flwr/common/auth_plugin/auth_plugin.py +111 -0
  41. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/config.py +3 -1
  42. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/constant.py +17 -1
  43. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/logger.py +25 -0
  44. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/message.py +1 -0
  45. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/object_ref.py +57 -54
  46. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/pyproject.py +1 -0
  47. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/record/__init__.py +1 -0
  48. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/record/parametersrecord.py +1 -0
  49. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/retry_invoker.py +75 -0
  50. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +2 -2
  51. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/telemetry.py +2 -1
  52. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/typing.py +12 -0
  53. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/version.py +1 -0
  54. flwr_nightly-1.14.0.dev20241214/src/py/flwr/proto/exec_pb2.py +74 -0
  55. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/exec_pb2.pyi +107 -2
  56. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/exec_pb2_grpc.py +102 -0
  57. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/exec_pb2_grpc.pyi +39 -0
  58. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/fab_pb2.py +4 -4
  59. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/fab_pb2.pyi +4 -1
  60. flwr_nightly-1.14.0.dev20241214/src/py/flwr/proto/serverappio_pb2.py +52 -0
  61. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/serverappio_pb2.pyi +8 -2
  62. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/serverappio_pb2_grpc.py +34 -0
  63. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +13 -0
  64. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/simulationio_pb2.py +2 -2
  65. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/simulationio_pb2_grpc.py +34 -0
  66. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +13 -0
  67. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/app.py +53 -1
  68. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/compat/app_utils.py +7 -1
  69. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/driver/grpc_driver.py +11 -63
  70. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/driver/inmemory_driver.py +5 -1
  71. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/serverapp/app.py +9 -2
  72. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/dpfedavg_fixed.py +1 -0
  73. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +1 -0
  74. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +73 -23
  75. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/ffs/disk_ffs.py +1 -0
  76. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +1 -0
  77. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +1 -0
  78. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +32 -12
  79. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +31 -2
  80. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +4 -1
  81. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/vce/__init__.py +1 -0
  82. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +1 -0
  83. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +1 -0
  84. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +14 -30
  85. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/linkstate/linkstate.py +13 -2
  86. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +24 -44
  87. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +20 -0
  88. flwr_nightly-1.14.0.dev20241214/src/py/flwr/server/superlink/utils.py +65 -0
  89. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/app.py +1 -0
  90. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/ray_transport/ray_actor.py +1 -0
  91. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/ray_transport/utils.py +1 -0
  92. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/run_simulation.py +1 -0
  93. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/superexec/app.py +1 -0
  94. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/superexec/deployment.py +1 -0
  95. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/superexec/exec_grpc.py +19 -1
  96. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/superexec/exec_servicer.py +76 -2
  97. flwr_nightly-1.14.0.dev20241214/src/py/flwr/superexec/exec_user_auth_interceptor.py +101 -0
  98. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/superexec/executor.py +1 -0
  99. flwr_nightly-1.14.0.dev20241202/src/py/flwr/cli/ls.py +0 -228
  100. flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/common_pb2.py +0 -36
  101. flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/common_pb2.pyi +0 -121
  102. flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/common_pb2_grpc.py +0 -4
  103. flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/common_pb2_grpc.pyi +0 -4
  104. flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/control_pb2.py +0 -27
  105. flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/control_pb2.pyi +0 -7
  106. flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/control_pb2_grpc.py +0 -135
  107. flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/control_pb2_grpc.pyi +0 -53
  108. flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/exec_pb2.py +0 -50
  109. flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/serverappio_pb2.py +0 -52
  110. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/LICENSE +0 -0
  111. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/__init__.py +0 -0
  112. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/__init__.py +0 -0
  113. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  114. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  115. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  116. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  117. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  118. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  119. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  120. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  121. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  122. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  123. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  124. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  125. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  126. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  127. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  128. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  129. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  130. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  131. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  132. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  133. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  134. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  135. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  136. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  137. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  138. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  139. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  140. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  141. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  142. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  143. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  144. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  145. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  146. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  147. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  148. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  149. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  150. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  151. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  152. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  153. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  154. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  155. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  156. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  157. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  158. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  159. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  160. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  161. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  162. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  163. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/__init__.py +0 -0
  164. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/client_app.py +0 -0
  165. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/clientapp/__init__.py +0 -0
  166. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  167. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  168. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  169. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  170. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  171. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  172. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  173. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/heartbeat.py +0 -0
  174. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/message_handler/__init__.py +0 -0
  175. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  176. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/mod/__init__.py +0 -0
  177. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  178. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  179. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  180. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  181. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/mod/utils.py +0 -0
  182. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
  183. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/numpy_client.py +0 -0
  184. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/rest_client/__init__.py +0 -0
  185. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/run_info_store.py +0 -0
  186. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/supernode/__init__.py +0 -0
  187. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/typing.py +0 -0
  188. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/__init__.py +0 -0
  189. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/context.py +0 -0
  190. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/date.py +0 -0
  191. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/differential_privacy.py +0 -0
  192. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  193. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/dp.py +0 -0
  194. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/exit_handlers.py +0 -0
  195. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/grpc.py +0 -0
  196. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/parameter.py +0 -0
  197. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/record/configsrecord.py +0 -0
  198. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/record/conversion_utils.py +0 -0
  199. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/record/metricsrecord.py +0 -0
  200. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/record/recordset.py +0 -0
  201. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/record/typeddict.py +0 -0
  202. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/recordset_compat.py +0 -0
  203. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  204. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  205. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  206. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  207. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  208. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  209. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  210. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/serde.py +0 -0
  211. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/__init__.py +0 -0
  212. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  213. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  214. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  215. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  216. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/error_pb2.py +0 -0
  217. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/error_pb2.pyi +0 -0
  218. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  219. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  220. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  221. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  222. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/fleet_pb2.py +0 -0
  223. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  224. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  225. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  226. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  227. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  228. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  229. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  230. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/log_pb2.py +0 -0
  231. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/log_pb2.pyi +0 -0
  232. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
  233. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  234. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/message_pb2.py +0 -0
  235. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/message_pb2.pyi +0 -0
  236. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  237. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  238. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/node_pb2.py +0 -0
  239. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/node_pb2.pyi +0 -0
  240. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  241. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  242. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/recordset_pb2.py +0 -0
  243. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  244. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  245. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  246. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/run_pb2.py +0 -0
  247. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/run_pb2.pyi +0 -0
  248. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  249. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  250. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
  251. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/task_pb2.py +0 -0
  252. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/task_pb2.pyi +0 -0
  253. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  254. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  255. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/transport_pb2.py +0 -0
  256. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  257. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  258. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  259. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/py.typed +0 -0
  260. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/__init__.py +0 -0
  261. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/client_manager.py +0 -0
  262. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/client_proxy.py +0 -0
  263. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/compat/__init__.py +0 -0
  264. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/compat/app.py +0 -0
  265. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  266. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/compat/legacy_context.py +0 -0
  267. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/criterion.py +0 -0
  268. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/driver/__init__.py +0 -0
  269. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/driver/driver.py +0 -0
  270. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/history.py +0 -0
  271. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/run_serverapp.py +0 -0
  272. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/server.py +0 -0
  273. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/server_app.py +0 -0
  274. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/server_config.py +0 -0
  275. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/serverapp/__init__.py +0 -0
  276. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/serverapp_components.py +0 -0
  277. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/__init__.py +0 -0
  278. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/aggregate.py +0 -0
  279. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/bulyan.py +0 -0
  280. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  281. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  282. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  283. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  284. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  285. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedadam.py +0 -0
  286. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedavg.py +0 -0
  287. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  288. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  289. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  290. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedopt.py +0 -0
  291. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedprox.py +0 -0
  292. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  293. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  294. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  295. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  296. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  297. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/krum.py +0 -0
  298. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  299. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/strategy.py +0 -0
  300. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/__init__.py +0 -0
  301. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  302. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  303. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  304. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  305. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  306. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  307. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  308. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  309. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  310. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  311. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  312. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  313. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  314. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  315. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  316. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  317. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  318. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  319. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/linkstate/utils.py +0 -0
  320. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
  321. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  322. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/typing.py +0 -0
  323. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/utils/__init__.py +0 -0
  324. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/utils/tensorboard.py +0 -0
  325. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/utils/validator.py +0 -0
  326. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/workflow/__init__.py +0 -0
  327. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/workflow/constant.py +0 -0
  328. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  329. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  330. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  331. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  332. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/__init__.py +0 -0
  333. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/legacy_app.py +0 -0
  334. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  335. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  336. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/simulationio_connection.py +0 -0
  337. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/superexec/__init__.py +0 -0
  338. {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/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.dev20241202
3
+ Version: 1.14.0.dev20241214
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -39,8 +39,9 @@ Requires-Dist: numpy (>=1.26.0,<3.0.0)
39
39
  Requires-Dist: pathspec (>=0.12.1,<0.13.0)
40
40
  Requires-Dist: protobuf (>=4.25.2,<5.0.0)
41
41
  Requires-Dist: pycryptodome (>=3.18.0,<4.0.0)
42
+ Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
42
43
  Requires-Dist: ray (==2.10.0) ; (python_version >= "3.9" and python_version < "3.12") and (extra == "simulation")
43
- Requires-Dist: requests (>=2.31.0,<3.0.0) ; extra == "rest"
44
+ Requires-Dist: requests (>=2.31.0,<3.0.0)
44
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)
@@ -101,23 +102,23 @@ Flower's goal is to make federated learning accessible to everyone. This series
101
102
 
102
103
  0. **What is Federated Learning?**
103
104
 
104
- [![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-what-is-federated-learning.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/doc/source/tutorial-series-what-is-federated-learning.ipynb))
105
+ [![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-what-is-federated-learning.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-what-is-federated-learning.ipynb))
105
106
 
106
107
  1. **An Introduction to Federated Learning**
107
108
 
108
- [![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-get-started-with-flower-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/doc/source/tutorial-series-get-started-with-flower-pytorch.ipynb))
109
+ [![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-get-started-with-flower-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-get-started-with-flower-pytorch.ipynb))
109
110
 
110
111
  2. **Using Strategies in Federated Learning**
111
112
 
112
- [![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-use-a-federated-learning-strategy-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/doc/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb))
113
+ [![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-use-a-federated-learning-strategy-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb))
113
114
 
114
115
  3. **Building Strategies for Federated Learning**
115
116
 
116
- [![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-build-a-strategy-from-scratch-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/doc/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb))
117
+ [![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-build-a-strategy-from-scratch-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb))
117
118
 
118
119
  4. **Custom Clients for Federated Learning**
119
120
 
120
- [![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/doc/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/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
122
 
122
123
  Stay tuned, more tutorials are coming soon. Topics include **Privacy and Security in Federated Learning**, and **Scaling Federated Learning**.
123
124
 
@@ -48,23 +48,23 @@ Flower's goal is to make federated learning accessible to everyone. This series
48
48
 
49
49
  0. **What is Federated Learning?**
50
50
 
51
- [![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-what-is-federated-learning.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/doc/source/tutorial-series-what-is-federated-learning.ipynb))
51
+ [![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-what-is-federated-learning.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-what-is-federated-learning.ipynb))
52
52
 
53
53
  1. **An Introduction to Federated Learning**
54
54
 
55
- [![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-get-started-with-flower-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/doc/source/tutorial-series-get-started-with-flower-pytorch.ipynb))
55
+ [![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-get-started-with-flower-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-get-started-with-flower-pytorch.ipynb))
56
56
 
57
57
  2. **Using Strategies in Federated Learning**
58
58
 
59
- [![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-use-a-federated-learning-strategy-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/doc/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb))
59
+ [![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-use-a-federated-learning-strategy-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb))
60
60
 
61
61
  3. **Building Strategies for Federated Learning**
62
62
 
63
- [![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-build-a-strategy-from-scratch-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/doc/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb))
63
+ [![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-build-a-strategy-from-scratch-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb))
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/doc/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/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))
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.dev20241202"
7
+ version = "1.14.0.dev20241214"
8
8
  description = "Flower: A Friendly Federated AI Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -78,16 +78,17 @@ tomli = "^2.0.1"
78
78
  tomli-w = "^1.0.0"
79
79
  pathspec = "^0.12.1"
80
80
  rich = "^13.5.0"
81
+ pyyaml = "^6.0.2"
82
+ requests = "^2.31.0"
81
83
  # Optional dependencies (Simulation Engine)
82
84
  ray = { version = "==2.10.0", optional = true, python = ">=3.9,<3.12" }
83
85
  # Optional dependencies (REST transport layer)
84
- requests = { version = "^2.31.0", optional = true }
85
86
  starlette = { version = "^0.31.0", optional = true }
86
87
  uvicorn = { version = "^0.23.0", extras = ["standard"], optional = true }
87
88
 
88
89
  [tool.poetry.extras]
89
90
  simulation = ["ray"]
90
- rest = ["requests", "starlette", "uvicorn"]
91
+ rest = ["starlette", "uvicorn"]
91
92
 
92
93
  [tool.poetry.group.dev.dependencies]
93
94
  types-dataclasses = "==0.6.6"
@@ -131,6 +132,7 @@ mdformat-gfm = "==0.3.6"
131
132
  mdformat-frontmatter = "==2.0.1"
132
133
  mdformat-beautysh = "==0.1.1"
133
134
  twine = "==5.1.1"
135
+ types-PyYAML = "^6.0.2"
134
136
  pyroma = "==4.2"
135
137
  check-wheel-contents = "==0.4.0"
136
138
  GitPython = "==3.1.32"
@@ -144,10 +146,10 @@ docsig = "==0.64.0"
144
146
 
145
147
  [tool.docstrfmt]
146
148
  extend_exclude = [
147
- "doc/source/conf.py",
148
- "doc/source/tutorial-quickstart-huggingface.rst",
149
- "doc/source/_templates/autosummary/*",
150
- "doc/source/ref-api/*",
149
+ "framework/docs/source/conf.py",
150
+ "framework/docs/source/tutorial-quickstart-huggingface.rst",
151
+ "framework/docs/source/_templates/autosummary/*",
152
+ "framework/docs/source/ref-api/*",
151
153
  ]
152
154
 
153
155
  [tool.isort]
@@ -14,15 +14,18 @@
14
14
  # ==============================================================================
15
15
  """Flower command line interface."""
16
16
 
17
+
17
18
  import typer
18
19
  from typer.main import get_command
19
20
 
20
21
  from .build import build
21
22
  from .install import install
22
23
  from .log import log
24
+ from .login import login
23
25
  from .ls import ls
24
26
  from .new import new
25
27
  from .run import run
28
+ from .stop import stop
26
29
 
27
30
  app = typer.Typer(
28
31
  help=typer.style(
@@ -39,6 +42,8 @@ app.command()(build)
39
42
  app.command()(install)
40
43
  app.command()(log)
41
44
  app.command()(ls)
45
+ app.command()(stop)
46
+ app.command()(login)
42
47
 
43
48
  typer_click_object = get_command(app)
44
49
 
@@ -14,6 +14,7 @@
14
14
  # ==============================================================================
15
15
  """Flower command line interface `build` command."""
16
16
 
17
+
17
18
  import hashlib
18
19
  import os
19
20
  import shutil
@@ -0,0 +1,86 @@
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 run interceptor."""
16
+
17
+
18
+ from typing import Any, Callable, Union
19
+
20
+ import grpc
21
+
22
+ from flwr.common.auth_plugin import CliAuthPlugin
23
+ from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
24
+ StartRunRequest,
25
+ StreamLogsRequest,
26
+ )
27
+
28
+ Request = Union[
29
+ StartRunRequest,
30
+ StreamLogsRequest,
31
+ ]
32
+
33
+
34
+ class CliUserAuthInterceptor(
35
+ grpc.UnaryUnaryClientInterceptor, grpc.UnaryStreamClientInterceptor # type: ignore
36
+ ):
37
+ """CLI interceptor for user authentication."""
38
+
39
+ def __init__(self, auth_plugin: CliAuthPlugin):
40
+ self.auth_plugin = auth_plugin
41
+
42
+ def _authenticated_call(
43
+ self,
44
+ continuation: Callable[[Any, Any], Any],
45
+ client_call_details: grpc.ClientCallDetails,
46
+ request: Request,
47
+ ) -> grpc.Call:
48
+ """Send and receive tokens via metadata."""
49
+ new_metadata = self.auth_plugin.write_tokens_to_metadata(
50
+ client_call_details.metadata or []
51
+ )
52
+
53
+ details = client_call_details._replace(metadata=new_metadata)
54
+
55
+ response = continuation(details, request)
56
+ if response.initial_metadata():
57
+ retrieved_metadata = dict(response.initial_metadata())
58
+ self.auth_plugin.store_tokens(retrieved_metadata)
59
+
60
+ return response
61
+
62
+ def intercept_unary_unary(
63
+ self,
64
+ continuation: Callable[[Any, Any], Any],
65
+ client_call_details: grpc.ClientCallDetails,
66
+ request: Request,
67
+ ) -> grpc.Call:
68
+ """Intercept a unary-unary call for user authentication.
69
+
70
+ This method intercepts a unary-unary RPC call initiated from the CLI and adds
71
+ the required authentication tokens to the RPC metadata.
72
+ """
73
+ return self._authenticated_call(continuation, client_call_details, request)
74
+
75
+ def intercept_unary_stream(
76
+ self,
77
+ continuation: Callable[[Any, Any], Any],
78
+ client_call_details: grpc.ClientCallDetails,
79
+ request: Request,
80
+ ) -> grpc.Call:
81
+ """Intercept a unary-stream call for user authentication.
82
+
83
+ This method intercepts a unary-stream RPC call initiated from the CLI and adds
84
+ the required authentication tokens to the RPC metadata.
85
+ """
86
+ return self._authenticated_call(continuation, client_call_details, request)
@@ -14,6 +14,7 @@
14
14
  # ==============================================================================
15
15
  """Utility to validate the `pyproject.toml` file."""
16
16
 
17
+
17
18
  import zipfile
18
19
  from io import BytesIO
19
20
  from pathlib import Path
@@ -230,10 +231,14 @@ def load_from_string(toml_content: str) -> Optional[dict[str, Any]]:
230
231
  return None
231
232
 
232
233
 
233
- def validate_project_config(
234
+ def process_loaded_project_config(
234
235
  config: Union[dict[str, Any], None], errors: list[str], warnings: list[str]
235
236
  ) -> dict[str, Any]:
236
- """Validate and return the Flower project configuration."""
237
+ """Process and return the loaded project configuration.
238
+
239
+ This function handles errors and warnings from the `load_and_validate` function,
240
+ exits on critical issues, and returns the validated configuration.
241
+ """
237
242
  if config is None:
238
243
  typer.secho(
239
244
  "Project configuration could not be loaded.\n"
@@ -324,3 +329,15 @@ def validate_certificate_in_federation_config(
324
329
  raise typer.Exit(code=1)
325
330
 
326
331
  return insecure, root_certificates_bytes
332
+
333
+
334
+ def exit_if_no_address(federation_config: dict[str, Any], cmd: str) -> None:
335
+ """Exit if the provided federation_config has no "address" key."""
336
+ if "address" not in federation_config:
337
+ typer.secho(
338
+ f"❌ `flwr {cmd}` currently works with a SuperLink. Ensure that the correct"
339
+ "SuperLink (Exec API) address is provided in `pyproject.toml`.",
340
+ fg=typer.colors.RED,
341
+ bold=True,
342
+ )
343
+ raise typer.Exit(code=1)
@@ -14,6 +14,7 @@
14
14
  # ==============================================================================
15
15
  """Flower command line interface `example` command."""
16
16
 
17
+
17
18
  import json
18
19
  import os
19
20
  import subprocess
@@ -14,6 +14,7 @@
14
14
  # ==============================================================================
15
15
  """Flower command line interface `install` command."""
16
16
 
17
+
17
18
  import hashlib
18
19
  import shutil
19
20
  import tempfile
@@ -14,6 +14,7 @@
14
14
  # ==============================================================================
15
15
  """Flower command line interface `log` command."""
16
16
 
17
+
17
18
  import time
18
19
  from logging import DEBUG, ERROR, INFO
19
20
  from pathlib import Path
@@ -23,17 +24,18 @@ import grpc
23
24
  import typer
24
25
 
25
26
  from flwr.cli.config_utils import (
27
+ exit_if_no_address,
26
28
  load_and_validate,
27
- validate_certificate_in_federation_config,
29
+ process_loaded_project_config,
28
30
  validate_federation_in_project_config,
29
- validate_project_config,
30
31
  )
31
32
  from flwr.common.constant import CONN_RECONNECT_INTERVAL, CONN_REFRESH_PERIOD
32
- from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
33
33
  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
38
+
37
39
 
38
40
  def start_stream(
39
41
  run_id: int, channel: grpc.Channel, refresh_period: int = CONN_REFRESH_PERIOD
@@ -126,11 +128,6 @@ def print_logs(run_id: int, channel: grpc.Channel, timeout: int) -> None:
126
128
  logger(DEBUG, "Channel closed")
127
129
 
128
130
 
129
- def on_channel_state_change(channel_connectivity: str) -> None:
130
- """Log channel connectivity."""
131
- logger(DEBUG, channel_connectivity)
132
-
133
-
134
131
  def log(
135
132
  run_id: Annotated[
136
133
  int,
@@ -157,41 +154,24 @@ def log(
157
154
 
158
155
  pyproject_path = app / "pyproject.toml" if app else None
159
156
  config, errors, warnings = load_and_validate(path=pyproject_path)
160
- config = validate_project_config(config, errors, warnings)
157
+ config = process_loaded_project_config(config, errors, warnings)
161
158
  federation, federation_config = validate_federation_in_project_config(
162
159
  federation, config
163
160
  )
161
+ exit_if_no_address(federation_config, "log")
164
162
 
165
- if "address" not in federation_config:
166
- typer.secho(
167
- "❌ `flwr log` currently works with Exec API. Ensure that the correct"
168
- "Exec API address is provided in the `pyproject.toml`.",
169
- fg=typer.colors.RED,
170
- bold=True,
171
- )
172
- raise typer.Exit(code=1)
173
-
174
- _log_with_exec_api(app, federation_config, run_id, stream)
163
+ _log_with_exec_api(app, federation, federation_config, run_id, stream)
175
164
 
176
165
 
177
166
  def _log_with_exec_api(
178
167
  app: Path,
168
+ federation: str,
179
169
  federation_config: dict[str, Any],
180
170
  run_id: int,
181
171
  stream: bool,
182
172
  ) -> None:
183
-
184
- insecure, root_certificates_bytes = validate_certificate_in_federation_config(
185
- app, federation_config
186
- )
187
- channel = create_channel(
188
- server_address=federation_config["address"],
189
- insecure=insecure,
190
- root_certificates=root_certificates_bytes,
191
- max_message_length=GRPC_MAX_MESSAGE_LENGTH,
192
- interceptors=None,
193
- )
194
- channel.subscribe(on_channel_state_change)
173
+ auth_plugin = try_obtain_cli_auth_plugin(app, federation, federation_config)
174
+ channel = init_channel(app, federation_config, auth_plugin)
195
175
 
196
176
  if stream:
197
177
  start_stream(run_id, channel, CONN_REFRESH_PERIOD)
@@ -0,0 +1,22 @@
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 `login` command."""
16
+
17
+
18
+ from .login import login as login
19
+
20
+ __all__ = [
21
+ "login",
22
+ ]
@@ -0,0 +1,83 @@
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 `login` command."""
16
+
17
+
18
+ from pathlib import Path
19
+ from typing import Annotated, Optional
20
+
21
+ import typer
22
+
23
+ from flwr.cli.config_utils import (
24
+ exit_if_no_address,
25
+ load_and_validate,
26
+ process_loaded_project_config,
27
+ validate_federation_in_project_config,
28
+ )
29
+ from flwr.common.constant import AUTH_TYPE
30
+ from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
31
+ GetLoginDetailsRequest,
32
+ GetLoginDetailsResponse,
33
+ )
34
+ from flwr.proto.exec_pb2_grpc import ExecStub
35
+
36
+ from ..utils import init_channel, try_obtain_cli_auth_plugin
37
+
38
+
39
+ def login( # pylint: disable=R0914
40
+ app: Annotated[
41
+ Path,
42
+ typer.Argument(help="Path of the Flower App to run."),
43
+ ] = Path("."),
44
+ federation: Annotated[
45
+ Optional[str],
46
+ typer.Argument(help="Name of the federation to login into."),
47
+ ] = None,
48
+ ) -> None:
49
+ """Login to Flower SuperLink."""
50
+ typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
51
+
52
+ pyproject_path = app / "pyproject.toml" if app else None
53
+ config, errors, warnings = load_and_validate(path=pyproject_path)
54
+
55
+ config = process_loaded_project_config(config, errors, warnings)
56
+ federation, federation_config = validate_federation_in_project_config(
57
+ federation, config
58
+ )
59
+ exit_if_no_address(federation_config, "login")
60
+ channel = init_channel(app, federation_config, None)
61
+ stub = ExecStub(channel)
62
+
63
+ login_request = GetLoginDetailsRequest()
64
+ login_response: GetLoginDetailsResponse = stub.GetLoginDetails(login_request)
65
+
66
+ # Get the auth plugin
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
+ )
71
+ if auth_plugin is None:
72
+ typer.secho(
73
+ f'❌ Authentication type "{auth_type}" not found',
74
+ fg=typer.colors.RED,
75
+ bold=True,
76
+ )
77
+ raise typer.Exit(code=1)
78
+
79
+ # Login
80
+ auth_config = auth_plugin.login(dict(login_response.login_details), stub)
81
+
82
+ # Store the tokens
83
+ auth_plugin.store_tokens(auth_config)