flwr-nightly 1.10.0.dev20240614__tar.gz → 1.10.0.dev20240617__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 (255) hide show
  1. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/PKG-INFO +1 -1
  2. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/pyproject.toml +1 -1
  3. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/run/run.py +1 -1
  4. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/supernode/app.py +18 -44
  5. flwr_nightly-1.10.0.dev20240617/src/py/flwr/common/config.py +71 -0
  6. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/constant.py +5 -0
  7. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/exec_pb2.py +7 -3
  8. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/exec_pb2.pyi +23 -0
  9. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/exec_pb2_grpc.py +34 -0
  10. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/exec_pb2_grpc.pyi +14 -0
  11. flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/fab_pb2.py +30 -0
  12. flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/fab_pb2.pyi +56 -0
  13. flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/task_pb2_grpc.py +4 -0
  14. flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/task_pb2_grpc.pyi +4 -0
  15. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/run_serverapp.py +1 -1
  16. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +2 -0
  17. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/superexec/exec_servicer.py +12 -1
  18. flwr_nightly-1.10.0.dev20240614/src/py/flwr/common/config.py +0 -28
  19. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/LICENSE +0 -0
  20. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/README.md +0 -0
  21. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/__init__.py +0 -0
  22. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/__init__.py +0 -0
  23. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/app.py +0 -0
  24. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/build.py +0 -0
  25. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/config_utils.py +0 -0
  26. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/example.py +0 -0
  27. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/install.py +0 -0
  28. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/__init__.py +0 -0
  29. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/new.py +0 -0
  30. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  31. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  32. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  33. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  34. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  35. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  36. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/client.hf.py.tpl +0 -0
  37. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  38. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  39. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  40. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  41. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  42. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  43. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/server.hf.py.tpl +0 -0
  44. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  45. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  46. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  47. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  48. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  49. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  50. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/task.hf.py.tpl +0 -0
  51. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  52. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  53. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  54. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  55. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/pyproject.hf.toml.tpl +0 -0
  56. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  57. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  58. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  59. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  60. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  61. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  62. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/run/__init__.py +0 -0
  63. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/utils.py +0 -0
  64. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/__init__.py +0 -0
  65. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/app.py +0 -0
  66. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/client.py +0 -0
  67. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/client_app.py +0 -0
  68. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  69. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  70. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/grpc_client/connection.py +0 -0
  71. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  72. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  73. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  74. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/heartbeat.py +0 -0
  75. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/message_handler/__init__.py +0 -0
  76. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  77. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  78. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/mod/__init__.py +0 -0
  79. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  80. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/mod/comms_mods.py +0 -0
  81. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  82. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  83. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  84. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  85. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/mod/utils.py +0 -0
  86. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/node_state.py +0 -0
  87. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/node_state_tests.py +0 -0
  88. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/numpy_client.py +0 -0
  89. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/rest_client/__init__.py +0 -0
  90. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/rest_client/connection.py +0 -0
  91. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/supernode/__init__.py +0 -0
  92. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/typing.py +0 -0
  93. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/__init__.py +0 -0
  94. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/address.py +0 -0
  95. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/context.py +0 -0
  96. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/date.py +0 -0
  97. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/differential_privacy.py +0 -0
  98. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  99. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/dp.py +0 -0
  100. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/exit_handlers.py +0 -0
  101. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/grpc.py +0 -0
  102. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/logger.py +0 -0
  103. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/message.py +0 -0
  104. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/object_ref.py +0 -0
  105. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/parameter.py +0 -0
  106. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/pyproject.py +0 -0
  107. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/record/__init__.py +0 -0
  108. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/record/configsrecord.py +0 -0
  109. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/record/conversion_utils.py +0 -0
  110. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/record/metricsrecord.py +0 -0
  111. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/record/parametersrecord.py +0 -0
  112. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/record/recordset.py +0 -0
  113. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/record/typeddict.py +0 -0
  114. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/recordset_compat.py +0 -0
  115. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/retry_invoker.py +0 -0
  116. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  117. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  118. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  119. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  120. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  121. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  122. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  123. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  124. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/serde.py +0 -0
  125. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/telemetry.py +0 -0
  126. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/typing.py +0 -0
  127. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/version.py +0 -0
  128. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/__init__.py +0 -0
  129. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/driver_pb2.py +0 -0
  130. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/driver_pb2.pyi +0 -0
  131. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
  132. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
  133. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/error_pb2.py +0 -0
  134. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/error_pb2.pyi +0 -0
  135. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  136. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  137. /flwr_nightly-1.10.0.dev20240614/src/py/flwr/proto/node_pb2_grpc.py → /flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  138. /flwr_nightly-1.10.0.dev20240614/src/py/flwr/proto/node_pb2_grpc.pyi → /flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  139. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/fleet_pb2.py +0 -0
  140. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  141. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  142. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  143. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  144. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  145. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  146. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  147. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/node_pb2.py +0 -0
  148. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/node_pb2.pyi +0 -0
  149. /flwr_nightly-1.10.0.dev20240614/src/py/flwr/proto/recordset_pb2_grpc.py → /flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  150. /flwr_nightly-1.10.0.dev20240614/src/py/flwr/proto/recordset_pb2_grpc.pyi → /flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  151. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/recordset_pb2.py +0 -0
  152. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  153. /flwr_nightly-1.10.0.dev20240614/src/py/flwr/proto/run_pb2_grpc.py → /flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  154. /flwr_nightly-1.10.0.dev20240614/src/py/flwr/proto/run_pb2_grpc.pyi → /flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  155. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/run_pb2.py +0 -0
  156. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/run_pb2.pyi +0 -0
  157. /flwr_nightly-1.10.0.dev20240614/src/py/flwr/proto/task_pb2_grpc.py → /flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  158. /flwr_nightly-1.10.0.dev20240614/src/py/flwr/proto/task_pb2_grpc.pyi → /flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  159. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/task_pb2.py +0 -0
  160. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/task_pb2.pyi +0 -0
  161. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/transport_pb2.py +0 -0
  162. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  163. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  164. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  165. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/py.typed +0 -0
  166. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/__init__.py +0 -0
  167. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/app.py +0 -0
  168. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/client_manager.py +0 -0
  169. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/client_proxy.py +0 -0
  170. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/compat/__init__.py +0 -0
  171. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/compat/app.py +0 -0
  172. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/compat/app_utils.py +0 -0
  173. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  174. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/compat/legacy_context.py +0 -0
  175. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/criterion.py +0 -0
  176. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/driver/__init__.py +0 -0
  177. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/driver/driver.py +0 -0
  178. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  179. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  180. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/history.py +0 -0
  181. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/server.py +0 -0
  182. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/server_app.py +0 -0
  183. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/server_config.py +0 -0
  184. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/__init__.py +0 -0
  185. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/aggregate.py +0 -0
  186. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/bulyan.py +0 -0
  187. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  188. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  189. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  190. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  191. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  192. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  193. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedadam.py +0 -0
  194. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedavg.py +0 -0
  195. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  196. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  197. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  198. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedopt.py +0 -0
  199. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedprox.py +0 -0
  200. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  201. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  202. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  203. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  204. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  205. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/krum.py +0 -0
  206. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  207. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/strategy.py +0 -0
  208. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/__init__.py +0 -0
  209. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  210. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
  211. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
  212. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  213. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  214. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  215. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  216. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  217. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  218. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  219. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  220. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  221. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  222. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  223. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  224. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  225. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  226. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  227. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  228. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  229. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/state/__init__.py +0 -0
  230. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/state/in_memory_state.py +0 -0
  231. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/state/sqlite_state.py +0 -0
  232. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/state/state.py +0 -0
  233. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
  234. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/state/utils.py +0 -0
  235. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/typing.py +0 -0
  236. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/utils/__init__.py +0 -0
  237. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/utils/tensorboard.py +0 -0
  238. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/utils/validator.py +0 -0
  239. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/workflow/__init__.py +0 -0
  240. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/workflow/constant.py +0 -0
  241. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  242. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  243. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  244. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  245. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/simulation/__init__.py +0 -0
  246. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/simulation/app.py +0 -0
  247. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  248. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  249. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  250. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  251. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/simulation/run_simulation.py +0 -0
  252. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/superexec/__init__.py +0 -0
  253. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/superexec/app.py +0 -0
  254. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/superexec/exec_grpc.py +0 -0
  255. {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/superexec/executor.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.10.0.dev20240614
3
+ Version: 1.10.0.dev20240617
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr-nightly"
7
- version = "1.10.0.dev20240614"
7
+ version = "1.10.0.dev20240617"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -41,7 +41,7 @@ class Engine(str, Enum):
41
41
  def run(
42
42
  engine: Annotated[
43
43
  Optional[Engine],
44
- typer.Option(case_sensitive=False, help="The ML framework to use"),
44
+ typer.Option(case_sensitive=False, help="The execution engine to run the app"),
45
45
  ] = None,
46
46
  use_superexec: Annotated[
47
47
  bool,
@@ -20,7 +20,6 @@ from logging import DEBUG, INFO, WARN
20
20
  from pathlib import Path
21
21
  from typing import Callable, Optional, Tuple
22
22
 
23
- import tomli
24
23
  from cryptography.exceptions import UnsupportedAlgorithm
25
24
  from cryptography.hazmat.primitives.asymmetric import ec
26
25
  from cryptography.hazmat.primitives.serialization import (
@@ -28,10 +27,9 @@ from cryptography.hazmat.primitives.serialization import (
28
27
  load_ssh_public_key,
29
28
  )
30
29
 
31
- from flwr.cli.config_utils import validate_fields
32
30
  from flwr.client.client_app import ClientApp, LoadClientAppError
33
31
  from flwr.common import EventType, event
34
- from flwr.common.config import get_flwr_dir
32
+ from flwr.common.config import get_flwr_dir, get_project_config, get_project_dir
35
33
  from flwr.common.exit_handlers import register_exit_handlers
36
34
  from flwr.common.logger import log, warn_deprecated_feature
37
35
  from flwr.common.object_ref import load_app, validate
@@ -56,7 +54,7 @@ def run_supernode() -> None:
56
54
  authentication_keys = _try_setup_client_authentication(args)
57
55
 
58
56
  _start_client_internal(
59
- server_address=args.server,
57
+ server_address=args.superlink,
60
58
  load_client_app_fn=load_fn,
61
59
  transport="rest" if args.rest else "grpc-rere",
62
60
  root_certificates=root_certificates,
@@ -172,9 +170,9 @@ def _get_load_client_app_fn(
172
170
  if args.flwr_dir is None:
173
171
  flwr_dir = get_flwr_dir()
174
172
  else:
175
- flwr_dir = Path(args.flwr_dir)
173
+ flwr_dir = Path(args.flwr_dir).absolute()
176
174
 
177
- sys.path.insert(0, str(flwr_dir))
175
+ sys.path.insert(0, str(flwr_dir.absolute()))
178
176
 
179
177
  default_app_ref: str = getattr(args, "client-app")
180
178
 
@@ -191,8 +189,8 @@ def _get_load_client_app_fn(
191
189
  def _load(fab_id: str, fab_version: str) -> ClientApp:
192
190
  # If multi-app feature is disabled
193
191
  if not multi_app:
194
- # Set sys.path
195
- sys.path[0] = args.dir
192
+ # Get sys path to be inserted
193
+ sys_path = Path(args.dir).absolute()
196
194
 
197
195
  # Set app reference
198
196
  client_app_ref = default_app_ref
@@ -204,52 +202,28 @@ def _get_load_client_app_fn(
204
202
  ) from None
205
203
 
206
204
  log(WARN, "FAB ID is not provided; the default ClientApp will be loaded.")
207
- # Set sys.path
208
- sys.path[0] = args.dir
205
+ # Get sys path to be inserted
206
+ sys_path = Path(args.dir).absolute()
209
207
 
210
208
  # Set app reference
211
209
  client_app_ref = default_app_ref
212
210
  # If multi-app feature is enabled
213
211
  else:
214
- # Check the fab_id
215
- if fab_id.count("/") != 1:
216
- raise LoadClientAppError(
217
- f"Invalid FAB ID: {fab_id}",
218
- ) from None
219
- username, project_name = fab_id.split("/")
220
-
221
- # Locate the directory
222
- project_dir = flwr_dir / "apps" / username / project_name / fab_version
223
-
224
- # Check if the directory exists
225
- if not project_dir.exists():
226
- raise LoadClientAppError(
227
- f"Invalid Flower App directory: {project_dir}",
228
- ) from None
212
+ try:
213
+ project_dir = get_project_dir(fab_id, fab_version, flwr_dir)
214
+ config = get_project_config(project_dir)
215
+ except Exception as e:
216
+ raise LoadClientAppError("Failed to load ClientApp") from e
229
217
 
230
- # Load pyproject.toml file
231
- toml_path = project_dir / "pyproject.toml"
232
- if not toml_path.is_file():
233
- raise LoadClientAppError(
234
- f"Cannot find pyproject.toml in {project_dir}",
235
- ) from None
236
- with open(toml_path, encoding="utf-8") as toml_file:
237
- config = tomli.loads(toml_file.read())
238
-
239
- # Validate pyproject.toml fields
240
- is_valid, errors, _ = validate_fields(config)
241
- if not is_valid:
242
- error_msg = "\n".join([f" - {error}" for error in errors])
243
- raise LoadClientAppError(
244
- f"Invalid pyproject.toml:\n{error_msg}",
245
- ) from None
246
-
247
- # Set sys.path
248
- sys.path[0] = str(project_dir)
218
+ # Get sys path to be inserted
219
+ sys_path = Path(project_dir).absolute()
249
220
 
250
221
  # Set app reference
251
222
  client_app_ref = config["flower"]["components"]["clientapp"]
252
223
 
224
+ # Set sys.path
225
+ sys.path.insert(0, str(sys_path))
226
+
253
227
  # Load ClientApp
254
228
  log(
255
229
  DEBUG,
@@ -0,0 +1,71 @@
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
+ """Provide functions for managing global Flower config."""
16
+
17
+ import os
18
+ from pathlib import Path
19
+ from typing import Any, Dict, Optional, Union
20
+
21
+ import tomli
22
+
23
+ from flwr.cli.config_utils import validate_fields
24
+ from flwr.common.constant import APP_DIR, FAB_CONFIG_FILE, FLWR_HOME
25
+
26
+
27
+ def get_flwr_dir() -> Path:
28
+ """Return the Flower home directory based on env variables."""
29
+ return Path(
30
+ os.getenv(
31
+ FLWR_HOME,
32
+ f"{os.getenv('XDG_DATA_HOME', os.getenv('HOME'))}/.flwr",
33
+ )
34
+ )
35
+
36
+
37
+ def get_project_dir(
38
+ fab_id: str, fab_version: str, flwr_dir: Optional[Union[str, Path]] = None
39
+ ) -> Path:
40
+ """Return the project directory based on the given fab_id and fab_version."""
41
+ # Check the fab_id
42
+ if fab_id.count("/") != 1:
43
+ raise ValueError(
44
+ f"Invalid FAB ID: {fab_id}",
45
+ )
46
+ publisher, project_name = fab_id.split("/")
47
+ if flwr_dir is None:
48
+ flwr_dir = get_flwr_dir()
49
+ return Path(flwr_dir) / APP_DIR / publisher / project_name / fab_version
50
+
51
+
52
+ def get_project_config(project_dir: Union[str, Path]) -> Dict[str, Any]:
53
+ """Return pyproject.toml in the given project directory."""
54
+ # Load pyproject.toml file
55
+ toml_path = Path(project_dir) / FAB_CONFIG_FILE
56
+ if not toml_path.is_file():
57
+ raise FileNotFoundError(
58
+ f"Cannot find {FAB_CONFIG_FILE} in {project_dir}",
59
+ )
60
+ with toml_path.open(encoding="utf-8") as toml_file:
61
+ config = tomli.loads(toml_file.read())
62
+
63
+ # Validate pyproject.toml fields
64
+ is_valid, errors, _ = validate_fields(config)
65
+ if not is_valid:
66
+ error_msg = "\n".join([f" - {error}" for error in errors])
67
+ raise ValueError(
68
+ f"Invalid {FAB_CONFIG_FILE}:\n{error_msg}",
69
+ )
70
+
71
+ return config
@@ -45,6 +45,11 @@ PING_BASE_MULTIPLIER = 0.8
45
45
  PING_RANDOM_RANGE = (-0.1, 0.1)
46
46
  PING_MAX_INTERVAL = 1e300
47
47
 
48
+ # Constants for FAB
49
+ APP_DIR = "apps"
50
+ FAB_CONFIG_FILE = "pyproject.toml"
51
+ FLWR_HOME = "FLWR_HOME"
52
+
48
53
 
49
54
  class MessageType:
50
55
  """Message type."""
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
14
14
 
15
15
 
16
16
 
17
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/exec.proto\x12\nflwr.proto\"#\n\x0fStartRunRequest\x12\x10\n\x08\x66\x61\x62_file\x18\x01 \x01(\x0c\"\"\n\x10StartRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\x32O\n\x04\x45xec\x12G\n\x08StartRun\x12\x1b.flwr.proto.StartRunRequest\x1a\x1c.flwr.proto.StartRunResponse\"\x00\x62\x06proto3')
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/exec.proto\x12\nflwr.proto\"#\n\x0fStartRunRequest\x12\x10\n\x08\x66\x61\x62_file\x18\x01 \x01(\x0c\"\"\n\x10StartRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\"#\n\x11StreamLogsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\"(\n\x12StreamLogsResponse\x12\x12\n\nlog_output\x18\x01 \x01(\t2\xa0\x01\n\x04\x45xec\x12G\n\x08StartRun\x12\x1b.flwr.proto.StartRunRequest\x1a\x1c.flwr.proto.StartRunResponse\"\x00\x12O\n\nStreamLogs\x12\x1d.flwr.proto.StreamLogsRequest\x1a\x1e.flwr.proto.StreamLogsResponse\"\x00\x30\x01\x62\x06proto3')
18
18
 
19
19
  _globals = globals()
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -25,6 +25,10 @@ if _descriptor._USE_C_DESCRIPTORS == False:
25
25
  _globals['_STARTRUNREQUEST']._serialized_end=72
26
26
  _globals['_STARTRUNRESPONSE']._serialized_start=74
27
27
  _globals['_STARTRUNRESPONSE']._serialized_end=108
28
- _globals['_EXEC']._serialized_start=110
29
- _globals['_EXEC']._serialized_end=189
28
+ _globals['_STREAMLOGSREQUEST']._serialized_start=110
29
+ _globals['_STREAMLOGSREQUEST']._serialized_end=145
30
+ _globals['_STREAMLOGSRESPONSE']._serialized_start=147
31
+ _globals['_STREAMLOGSRESPONSE']._serialized_end=187
32
+ _globals['_EXEC']._serialized_start=190
33
+ _globals['_EXEC']._serialized_end=350
30
34
  # @@protoc_insertion_point(module_scope)
@@ -5,6 +5,7 @@ isort:skip_file
5
5
  import builtins
6
6
  import google.protobuf.descriptor
7
7
  import google.protobuf.message
8
+ import typing
8
9
  import typing_extensions
9
10
 
10
11
  DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
@@ -30,3 +31,25 @@ class StartRunResponse(google.protobuf.message.Message):
30
31
  ) -> None: ...
31
32
  def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
32
33
  global___StartRunResponse = StartRunResponse
34
+
35
+ class StreamLogsRequest(google.protobuf.message.Message):
36
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
37
+ RUN_ID_FIELD_NUMBER: builtins.int
38
+ run_id: builtins.int
39
+ def __init__(self,
40
+ *,
41
+ run_id: builtins.int = ...,
42
+ ) -> None: ...
43
+ def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
44
+ global___StreamLogsRequest = StreamLogsRequest
45
+
46
+ class StreamLogsResponse(google.protobuf.message.Message):
47
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
48
+ LOG_OUTPUT_FIELD_NUMBER: builtins.int
49
+ log_output: typing.Text
50
+ def __init__(self,
51
+ *,
52
+ log_output: typing.Text = ...,
53
+ ) -> None: ...
54
+ def ClearField(self, field_name: typing_extensions.Literal["log_output",b"log_output"]) -> None: ...
55
+ global___StreamLogsResponse = StreamLogsResponse
@@ -19,6 +19,11 @@ class ExecStub(object):
19
19
  request_serializer=flwr_dot_proto_dot_exec__pb2.StartRunRequest.SerializeToString,
20
20
  response_deserializer=flwr_dot_proto_dot_exec__pb2.StartRunResponse.FromString,
21
21
  )
22
+ self.StreamLogs = channel.unary_stream(
23
+ '/flwr.proto.Exec/StreamLogs',
24
+ request_serializer=flwr_dot_proto_dot_exec__pb2.StreamLogsRequest.SerializeToString,
25
+ response_deserializer=flwr_dot_proto_dot_exec__pb2.StreamLogsResponse.FromString,
26
+ )
22
27
 
23
28
 
24
29
  class ExecServicer(object):
@@ -31,6 +36,13 @@ class ExecServicer(object):
31
36
  context.set_details('Method not implemented!')
32
37
  raise NotImplementedError('Method not implemented!')
33
38
 
39
+ def StreamLogs(self, request, context):
40
+ """Start log stream upon request
41
+ """
42
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
43
+ context.set_details('Method not implemented!')
44
+ raise NotImplementedError('Method not implemented!')
45
+
34
46
 
35
47
  def add_ExecServicer_to_server(servicer, server):
36
48
  rpc_method_handlers = {
@@ -39,6 +51,11 @@ def add_ExecServicer_to_server(servicer, server):
39
51
  request_deserializer=flwr_dot_proto_dot_exec__pb2.StartRunRequest.FromString,
40
52
  response_serializer=flwr_dot_proto_dot_exec__pb2.StartRunResponse.SerializeToString,
41
53
  ),
54
+ 'StreamLogs': grpc.unary_stream_rpc_method_handler(
55
+ servicer.StreamLogs,
56
+ request_deserializer=flwr_dot_proto_dot_exec__pb2.StreamLogsRequest.FromString,
57
+ response_serializer=flwr_dot_proto_dot_exec__pb2.StreamLogsResponse.SerializeToString,
58
+ ),
42
59
  }
43
60
  generic_handler = grpc.method_handlers_generic_handler(
44
61
  'flwr.proto.Exec', rpc_method_handlers)
@@ -65,3 +82,20 @@ class Exec(object):
65
82
  flwr_dot_proto_dot_exec__pb2.StartRunResponse.FromString,
66
83
  options, channel_credentials,
67
84
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
85
+
86
+ @staticmethod
87
+ def StreamLogs(request,
88
+ target,
89
+ options=(),
90
+ channel_credentials=None,
91
+ call_credentials=None,
92
+ insecure=False,
93
+ compression=None,
94
+ wait_for_ready=None,
95
+ timeout=None,
96
+ metadata=None):
97
+ return grpc.experimental.unary_stream(request, target, '/flwr.proto.Exec/StreamLogs',
98
+ flwr_dot_proto_dot_exec__pb2.StreamLogsRequest.SerializeToString,
99
+ flwr_dot_proto_dot_exec__pb2.StreamLogsResponse.FromString,
100
+ options, channel_credentials,
101
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -5,6 +5,7 @@ isort:skip_file
5
5
  import abc
6
6
  import flwr.proto.exec_pb2
7
7
  import grpc
8
+ import typing
8
9
 
9
10
  class ExecStub:
10
11
  def __init__(self, channel: grpc.Channel) -> None: ...
@@ -13,6 +14,11 @@ class ExecStub:
13
14
  flwr.proto.exec_pb2.StartRunResponse]
14
15
  """Start run upon request"""
15
16
 
17
+ StreamLogs: grpc.UnaryStreamMultiCallable[
18
+ flwr.proto.exec_pb2.StreamLogsRequest,
19
+ flwr.proto.exec_pb2.StreamLogsResponse]
20
+ """Start log stream upon request"""
21
+
16
22
 
17
23
  class ExecServicer(metaclass=abc.ABCMeta):
18
24
  @abc.abstractmethod
@@ -23,5 +29,13 @@ class ExecServicer(metaclass=abc.ABCMeta):
23
29
  """Start run upon request"""
24
30
  pass
25
31
 
32
+ @abc.abstractmethod
33
+ def StreamLogs(self,
34
+ request: flwr.proto.exec_pb2.StreamLogsRequest,
35
+ context: grpc.ServicerContext,
36
+ ) -> typing.Iterator[flwr.proto.exec_pb2.StreamLogsResponse]:
37
+ """Start log stream upon request"""
38
+ pass
39
+
26
40
 
27
41
  def add_ExecServicer_to_server(servicer: ExecServicer, server: grpc.Server) -> None: ...
@@ -0,0 +1,30 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: flwr/proto/fab.proto
4
+ # Protobuf Python Version: 4.25.0
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+
16
+
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/fab.proto\x12\nflwr.proto\"$\n\x03\x46\x61\x62\x12\x0c\n\x04hash\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\x0c\"\x1d\n\rGetFabRequest\x12\x0c\n\x04hash\x18\x01 \x01(\t\".\n\x0eGetFabResponse\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fabb\x06proto3')
18
+
19
+ _globals = globals()
20
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.fab_pb2', _globals)
22
+ if _descriptor._USE_C_DESCRIPTORS == False:
23
+ DESCRIPTOR._options = None
24
+ _globals['_FAB']._serialized_start=36
25
+ _globals['_FAB']._serialized_end=72
26
+ _globals['_GETFABREQUEST']._serialized_start=74
27
+ _globals['_GETFABREQUEST']._serialized_end=103
28
+ _globals['_GETFABRESPONSE']._serialized_start=105
29
+ _globals['_GETFABRESPONSE']._serialized_end=151
30
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,56 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+ import builtins
6
+ import google.protobuf.descriptor
7
+ import google.protobuf.message
8
+ import typing
9
+ import typing_extensions
10
+
11
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
12
+
13
+ class Fab(google.protobuf.message.Message):
14
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
15
+ HASH_FIELD_NUMBER: builtins.int
16
+ CONTENT_FIELD_NUMBER: builtins.int
17
+ hash: typing.Text
18
+ """This field is the hash of the data field. It is used to identify the data.
19
+ The hash is calculated using the SHA-256 algorithm and is represented as a
20
+ hex string (sha256hex).
21
+ """
22
+
23
+ content: builtins.bytes
24
+ """This field contains the fab file contents a one bytes blob."""
25
+
26
+ def __init__(self,
27
+ *,
28
+ hash: typing.Text = ...,
29
+ content: builtins.bytes = ...,
30
+ ) -> None: ...
31
+ def ClearField(self, field_name: typing_extensions.Literal["content",b"content","hash",b"hash"]) -> None: ...
32
+ global___Fab = Fab
33
+
34
+ class GetFabRequest(google.protobuf.message.Message):
35
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
36
+ HASH_FIELD_NUMBER: builtins.int
37
+ hash: typing.Text
38
+ def __init__(self,
39
+ *,
40
+ hash: typing.Text = ...,
41
+ ) -> None: ...
42
+ def ClearField(self, field_name: typing_extensions.Literal["hash",b"hash"]) -> None: ...
43
+ global___GetFabRequest = GetFabRequest
44
+
45
+ class GetFabResponse(google.protobuf.message.Message):
46
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
47
+ FAB_FIELD_NUMBER: builtins.int
48
+ @property
49
+ def fab(self) -> global___Fab: ...
50
+ def __init__(self,
51
+ *,
52
+ fab: typing.Optional[global___Fab] = ...,
53
+ ) -> None: ...
54
+ def HasField(self, field_name: typing_extensions.Literal["fab",b"fab"]) -> builtins.bool: ...
55
+ def ClearField(self, field_name: typing_extensions.Literal["fab",b"fab"]) -> None: ...
56
+ global___GetFabResponse = GetFabResponse
@@ -0,0 +1,4 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+
@@ -0,0 +1,4 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
@@ -45,7 +45,7 @@ def run(
45
45
  )
46
46
 
47
47
  if server_app_dir is not None:
48
- sys.path.insert(0, server_app_dir)
48
+ sys.path.insert(0, str(Path(server_app_dir).absolute()))
49
49
 
50
50
  # Load ServerApp if needed
51
51
  def _load() -> ServerApp:
@@ -20,6 +20,7 @@ import sys
20
20
  import time
21
21
  import traceback
22
22
  from logging import DEBUG, ERROR, INFO, WARN
23
+ from pathlib import Path
23
24
  from typing import Callable, Dict, List, Optional
24
25
 
25
26
  from flwr.client.client_app import ClientApp, ClientAppException, LoadClientAppError
@@ -274,6 +275,7 @@ def start_vce(
274
275
  # Use mapping constructed externally. This also means nodes
275
276
  # have previously being registered.
276
277
  nodes_mapping = existing_nodes_mapping
278
+ app_dir = str(Path(app_dir).absolute())
277
279
 
278
280
  if not state_factory:
279
281
  log(INFO, "A StateFactory was not supplied to the SimulationEngine.")
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
  from logging import ERROR, INFO
19
- from typing import Dict
19
+ from typing import Any, Dict, Generator
20
20
 
21
21
  import grpc
22
22
 
@@ -25,6 +25,8 @@ from flwr.proto import exec_pb2_grpc # pylint: disable=E0611
25
25
  from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
26
26
  StartRunRequest,
27
27
  StartRunResponse,
28
+ StreamLogsRequest,
29
+ StreamLogsResponse,
28
30
  )
29
31
 
30
32
  from .executor import Executor, RunTracker
@@ -52,3 +54,12 @@ class ExecServicer(exec_pb2_grpc.ExecServicer):
52
54
  self.runs[run.run_id] = run
53
55
 
54
56
  return StartRunResponse(run_id=run.run_id)
57
+
58
+ def StreamLogs(
59
+ self, request: StreamLogsRequest, context: grpc.ServicerContext
60
+ ) -> Generator[StreamLogsResponse, Any, None]:
61
+ """Get logs."""
62
+ logs = ["a", "b", "c"]
63
+ while context.is_active():
64
+ for i in range(len(logs)): # pylint: disable=C0200
65
+ yield StreamLogsResponse(log_output=logs[i])
@@ -1,28 +0,0 @@
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
- """Provide functions for managing global Flower config."""
16
-
17
- import os
18
- from pathlib import Path
19
-
20
-
21
- def get_flwr_dir() -> Path:
22
- """Return the Flower home directory based on env variables."""
23
- return Path(
24
- os.getenv(
25
- "FLWR_HOME",
26
- f"{os.getenv('XDG_DATA_HOME', os.getenv('HOME'))}/.flwr",
27
- )
28
- )