flwr-nightly 1.9.0.dev20240409__tar.gz → 1.9.0.dev20240414__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 (216) hide show
  1. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/PKG-INFO +1 -1
  2. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/pyproject.toml +1 -1
  3. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/new/new.py +16 -5
  4. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -4
  5. flwr_nightly-1.9.0.dev20240414/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +19 -0
  6. flwr_nightly-1.9.0.dev20240414/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +21 -0
  7. flwr_nightly-1.9.0.dev20240414/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +20 -0
  8. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/utils.py +60 -4
  9. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/heartbeat.py +3 -1
  10. flwr_nightly-1.9.0.dev20240414/src/py/flwr/proto/driver_pb2.py +44 -0
  11. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/driver_pb2.pyi +8 -0
  12. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/fleet_pb2.py +11 -5
  13. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/fleet_pb2.pyi +42 -0
  14. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/fleet_pb2_grpc.py +33 -0
  15. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/fleet_pb2_grpc.pyi +10 -0
  16. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/compat/app_utils.py +3 -2
  17. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +12 -0
  18. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +9 -0
  19. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +30 -0
  20. flwr_nightly-1.9.0.dev20240409/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -19
  21. flwr_nightly-1.9.0.dev20240409/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -21
  22. flwr_nightly-1.9.0.dev20240409/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -21
  23. flwr_nightly-1.9.0.dev20240409/src/py/flwr/cli/new/templates/app/requirements.numpy.txt.tpl +0 -2
  24. flwr_nightly-1.9.0.dev20240409/src/py/flwr/cli/new/templates/app/requirements.pytorch.txt.tpl +0 -4
  25. flwr_nightly-1.9.0.dev20240409/src/py/flwr/cli/new/templates/app/requirements.tensorflow.txt.tpl +0 -4
  26. flwr_nightly-1.9.0.dev20240409/src/py/flwr/proto/driver_pb2.py +0 -44
  27. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/LICENSE +0 -0
  28. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/README.md +0 -0
  29. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/__init__.py +0 -0
  30. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/__init__.py +0 -0
  31. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/app.py +0 -0
  32. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/example.py +0 -0
  33. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/flower_toml.py +0 -0
  34. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/new/__init__.py +0 -0
  35. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  36. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  37. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  38. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  39. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  40. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  41. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  42. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  43. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  44. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  45. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  46. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/new/templates/app/flower.toml.tpl +0 -0
  47. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/run/__init__.py +0 -0
  48. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/cli/run/run.py +0 -0
  49. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/__init__.py +0 -0
  50. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/app.py +0 -0
  51. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/client.py +0 -0
  52. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/client_app.py +0 -0
  53. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  54. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  55. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/grpc_client/connection.py +0 -0
  56. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  57. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  58. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/message_handler/__init__.py +0 -0
  59. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  60. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  61. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/mod/__init__.py +0 -0
  62. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  63. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/mod/comms_mods.py +0 -0
  64. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  65. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  66. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  67. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  68. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/mod/utils.py +0 -0
  69. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/node_state.py +0 -0
  70. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/node_state_tests.py +0 -0
  71. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/numpy_client.py +0 -0
  72. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/rest_client/__init__.py +0 -0
  73. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/rest_client/connection.py +0 -0
  74. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/client/typing.py +0 -0
  75. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/__init__.py +0 -0
  76. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/address.py +0 -0
  77. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/constant.py +0 -0
  78. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/context.py +0 -0
  79. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/date.py +0 -0
  80. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/differential_privacy.py +0 -0
  81. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  82. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/dp.py +0 -0
  83. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/exit_handlers.py +0 -0
  84. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/grpc.py +0 -0
  85. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/logger.py +0 -0
  86. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/message.py +0 -0
  87. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/object_ref.py +0 -0
  88. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/parameter.py +0 -0
  89. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/pyproject.py +0 -0
  90. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/record/__init__.py +0 -0
  91. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/record/configsrecord.py +0 -0
  92. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/record/conversion_utils.py +0 -0
  93. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/record/metricsrecord.py +0 -0
  94. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/record/parametersrecord.py +0 -0
  95. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/record/recordset.py +0 -0
  96. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/record/typeddict.py +0 -0
  97. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/recordset_compat.py +0 -0
  98. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/retry_invoker.py +0 -0
  99. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  100. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  101. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  102. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  103. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  104. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  105. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  106. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  107. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/serde.py +0 -0
  108. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/telemetry.py +0 -0
  109. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/typing.py +0 -0
  110. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/common/version.py +0 -0
  111. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/__init__.py +0 -0
  112. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
  113. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
  114. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/error_pb2.py +0 -0
  115. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/error_pb2.pyi +0 -0
  116. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  117. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  118. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/node_pb2.py +0 -0
  119. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/node_pb2.pyi +0 -0
  120. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  121. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  122. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/recordset_pb2.py +0 -0
  123. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  124. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  125. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  126. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/task_pb2.py +0 -0
  127. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/task_pb2.pyi +0 -0
  128. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  129. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  130. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/transport_pb2.py +0 -0
  131. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  132. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  133. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  134. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/py.typed +0 -0
  135. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/__init__.py +0 -0
  136. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/app.py +0 -0
  137. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/client_manager.py +0 -0
  138. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/client_proxy.py +0 -0
  139. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/compat/__init__.py +0 -0
  140. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/compat/app.py +0 -0
  141. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  142. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/compat/legacy_context.py +0 -0
  143. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/criterion.py +0 -0
  144. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/driver/__init__.py +0 -0
  145. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/driver/driver.py +0 -0
  146. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  147. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/history.py +0 -0
  148. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/run_serverapp.py +0 -0
  149. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/server.py +0 -0
  150. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/server_app.py +0 -0
  151. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/server_config.py +0 -0
  152. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/__init__.py +0 -0
  153. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/aggregate.py +0 -0
  154. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/bulyan.py +0 -0
  155. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  156. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  157. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  158. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  159. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  160. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  161. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/fedadam.py +0 -0
  162. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/fedavg.py +0 -0
  163. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  164. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  165. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  166. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/fedopt.py +0 -0
  167. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/fedprox.py +0 -0
  168. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  169. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  170. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  171. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  172. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  173. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/krum.py +0 -0
  174. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  175. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/strategy/strategy.py +0 -0
  176. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/__init__.py +0 -0
  177. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  178. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
  179. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
  180. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  181. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  182. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  183. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  184. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  185. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  186. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  187. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  188. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  189. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  190. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  191. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  192. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  193. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  194. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/state/__init__.py +0 -0
  195. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/state/in_memory_state.py +0 -0
  196. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/state/sqlite_state.py +0 -0
  197. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/state/state.py +0 -0
  198. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
  199. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/superlink/state/utils.py +0 -0
  200. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/typing.py +0 -0
  201. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/utils/__init__.py +0 -0
  202. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/utils/tensorboard.py +0 -0
  203. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/utils/validator.py +0 -0
  204. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/workflow/__init__.py +0 -0
  205. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/workflow/constant.py +0 -0
  206. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  207. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  208. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  209. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  210. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/simulation/__init__.py +0 -0
  211. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/simulation/app.py +0 -0
  212. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  213. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  214. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  215. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  216. {flwr_nightly-1.9.0.dev20240409 → flwr_nightly-1.9.0.dev20240414}/src/py/flwr/simulation/run_simulation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.9.0.dev20240409
3
+ Version: 1.9.0.dev20240414
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.9.0-dev20240409"
7
+ version = "1.9.0-dev20240414"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -22,7 +22,12 @@ from typing import Dict, Optional
22
22
  import typer
23
23
  from typing_extensions import Annotated
24
24
 
25
- from ..utils import prompt_options, prompt_text
25
+ from ..utils import (
26
+ is_valid_project_name,
27
+ prompt_options,
28
+ prompt_text,
29
+ sanitize_project_name,
30
+ )
26
31
 
27
32
 
28
33
  class MlFramework(str, Enum):
@@ -81,6 +86,16 @@ def new(
81
86
  ] = None,
82
87
  ) -> None:
83
88
  """Create new Flower project."""
89
+ if project_name is None:
90
+ project_name = prompt_text("Please provide project name")
91
+ if not is_valid_project_name(project_name):
92
+ project_name = prompt_text(
93
+ "Please provide a name that only contains "
94
+ "characters in {'_', 'a-zA-Z', '0-9'}",
95
+ predicate=is_valid_project_name,
96
+ default=sanitize_project_name(project_name),
97
+ )
98
+
84
99
  print(
85
100
  typer.style(
86
101
  f"🔨 Creating Flower project {project_name}...",
@@ -89,9 +104,6 @@ def new(
89
104
  )
90
105
  )
91
106
 
92
- if project_name is None:
93
- project_name = prompt_text("Please provide project name")
94
-
95
107
  if framework is not None:
96
108
  framework_str = str(framework.value)
97
109
  else:
@@ -116,7 +128,6 @@ def new(
116
128
  # List of files to render
117
129
  files = {
118
130
  "README.md": {"template": "app/README.md.tpl"},
119
- "requirements.txt": {"template": f"app/requirements.{framework_str}.txt.tpl"},
120
131
  "flower.toml": {"template": "app/flower.toml.tpl"},
121
132
  "pyproject.toml": {"template": f"app/pyproject.{framework_str}.toml.tpl"},
122
133
  f"{pnl}/__init__.py": {"template": "app/code/__init__.py.tpl"},
@@ -3,11 +3,7 @@
3
3
  ## Install dependencies
4
4
 
5
5
  ```bash
6
- # Using pip
7
6
  pip install .
8
-
9
- # Or using Poetry
10
- poetry install
11
7
  ```
12
8
 
13
9
  ## Run (Simulation Engine)
@@ -0,0 +1,19 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "$project_name"
7
+ version = "1.0.0"
8
+ description = ""
9
+ authors = [
10
+ { name = "The Flower Authors", email = "hello@flower.ai" },
11
+ ]
12
+ license = {text = "Apache License (2.0)"}
13
+ dependencies = [
14
+ "flwr[simulation]>=1.8.0,<2.0",
15
+ "numpy>=1.21.0",
16
+ ]
17
+
18
+ [tool.hatch.build.targets.wheel]
19
+ packages = ["."]
@@ -0,0 +1,21 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "$project_name"
7
+ version = "1.0.0"
8
+ description = ""
9
+ authors = [
10
+ { name = "The Flower Authors", email = "hello@flower.ai" },
11
+ ]
12
+ license = {text = "Apache License (2.0)"}
13
+ dependencies = [
14
+ "flwr[simulation]>=1.8.0,<2.0",
15
+ "flwr-datasets[vision]>=0.0.2,<1.0.0",
16
+ "torch==2.2.1",
17
+ "torchvision==0.17.1",
18
+ ]
19
+
20
+ [tool.hatch.build.targets.wheel]
21
+ packages = ["."]
@@ -0,0 +1,20 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "$project_name"
7
+ version = "1.0.0"
8
+ description = ""
9
+ authors = [
10
+ { name = "The Flower Authors", email = "hello@flower.ai" },
11
+ ]
12
+ license = {text = "Apache License (2.0)"}
13
+ dependencies = [
14
+ "flwr[simulation]>=1.8.0,<2.0",
15
+ "flwr-datasets[vision]>=0.0.2,<1.0.0",
16
+ "tensorflow>=2.11.1",
17
+ ]
18
+
19
+ [tool.hatch.build.targets.wheel]
20
+ packages = ["."]
@@ -14,18 +14,23 @@
14
14
  # ==============================================================================
15
15
  """Flower command line interface utils."""
16
16
 
17
- from typing import List, cast
17
+ from typing import Callable, List, Optional, cast
18
18
 
19
19
  import typer
20
20
 
21
21
 
22
- def prompt_text(text: str) -> str:
22
+ def prompt_text(
23
+ text: str,
24
+ predicate: Callable[[str], bool] = lambda _: True,
25
+ default: Optional[str] = None,
26
+ ) -> str:
23
27
  """Ask user to enter text input."""
24
28
  while True:
25
29
  result = typer.prompt(
26
- typer.style(f"\n💬 {text}", fg=typer.colors.MAGENTA, bold=True)
30
+ typer.style(f"\n💬 {text}", fg=typer.colors.MAGENTA, bold=True),
31
+ default=default,
27
32
  )
28
- if len(result) > 0:
33
+ if predicate(result) and len(result) > 0:
29
34
  break
30
35
  print(typer.style("❌ Invalid entry", fg=typer.colors.RED, bold=True))
31
36
 
@@ -65,3 +70,54 @@ def prompt_options(text: str, options: List[str]) -> str:
65
70
 
66
71
  result = options[int(index)]
67
72
  return result
73
+
74
+
75
+ def is_valid_project_name(name: str) -> bool:
76
+ """Check if the given string is a valid Python module name.
77
+
78
+ A valid module name must start with a letter or an underscore, and can only contain
79
+ letters, digits, and underscores.
80
+ """
81
+ if not name:
82
+ return False
83
+
84
+ # Check if the first character is a letter or underscore
85
+ if not (name[0].isalpha() or name[0] == "_"):
86
+ return False
87
+
88
+ # Check if the rest of the characters are valid (letter, digit, or underscore)
89
+ for char in name[1:]:
90
+ if not (char.isalnum() or char == "_"):
91
+ return False
92
+
93
+ return True
94
+
95
+
96
+ def sanitize_project_name(name: str) -> str:
97
+ """Sanitize the given string to make it a valid Python module name.
98
+
99
+ This version replaces hyphens with underscores, removes any characters not allowed
100
+ in Python module names, makes the string lowercase, and ensures it starts with a
101
+ valid character.
102
+ """
103
+ # Replace '-' with '_'
104
+ name_with_underscores = name.replace("-", "_").replace(" ", "_")
105
+
106
+ # Allowed characters in a module name: letters, digits, underscore
107
+ allowed_chars = set(
108
+ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
109
+ )
110
+
111
+ # Make the string lowercase
112
+ sanitized_name = name_with_underscores.lower()
113
+
114
+ # Remove any characters not allowed in Python module names
115
+ sanitized_name = "".join(c for c in sanitized_name if c in allowed_chars)
116
+
117
+ # Ensure the first character is a letter or underscore
118
+ if sanitized_name and (
119
+ sanitized_name[0].isdigit() or sanitized_name[0] not in allowed_chars
120
+ ):
121
+ sanitized_name = "_" + sanitized_name
122
+
123
+ return sanitized_name
@@ -66,7 +66,9 @@ def start_ping_loop(
66
66
  asynchronous ping operations. The loop can be terminated through the provided stop
67
67
  event.
68
68
  """
69
- thread = threading.Thread(target=_ping_loop, args=(ping_fn, stop_event))
69
+ thread = threading.Thread(
70
+ target=_ping_loop, args=(ping_fn, stop_event), daemon=True
71
+ )
70
72
  thread.start()
71
73
 
72
74
  return thread
@@ -0,0 +1,44 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: flwr/proto/driver.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
+ from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
16
+ from flwr.proto import task_pb2 as flwr_dot_proto_dot_task__pb2
17
+
18
+
19
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66lwr/proto/driver.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x15\x66lwr/proto/task.proto\"7\n\x10\x43reateRunRequest\x12\x0e\n\x06\x66\x61\x62_id\x18\x01 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x02 \x01(\t\"#\n\x11\x43reateRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\"!\n\x0fGetNodesRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\"3\n\x10GetNodesResponse\x12\x1f\n\x05nodes\x18\x01 \x03(\x0b\x32\x10.flwr.proto.Node\"@\n\x12PushTaskInsRequest\x12*\n\rtask_ins_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskIns\"\'\n\x13PushTaskInsResponse\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"F\n\x12PullTaskResRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"A\n\x13PullTaskResResponse\x12*\n\rtask_res_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskRes2\xc1\x02\n\x06\x44river\x12J\n\tCreateRun\x12\x1c.flwr.proto.CreateRunRequest\x1a\x1d.flwr.proto.CreateRunResponse\"\x00\x12G\n\x08GetNodes\x12\x1b.flwr.proto.GetNodesRequest\x1a\x1c.flwr.proto.GetNodesResponse\"\x00\x12P\n\x0bPushTaskIns\x12\x1e.flwr.proto.PushTaskInsRequest\x1a\x1f.flwr.proto.PushTaskInsResponse\"\x00\x12P\n\x0bPullTaskRes\x12\x1e.flwr.proto.PullTaskResRequest\x1a\x1f.flwr.proto.PullTaskResResponse\"\x00\x62\x06proto3')
20
+
21
+ _globals = globals()
22
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
23
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.driver_pb2', _globals)
24
+ if _descriptor._USE_C_DESCRIPTORS == False:
25
+ DESCRIPTOR._options = None
26
+ _globals['_CREATERUNREQUEST']._serialized_start=85
27
+ _globals['_CREATERUNREQUEST']._serialized_end=140
28
+ _globals['_CREATERUNRESPONSE']._serialized_start=142
29
+ _globals['_CREATERUNRESPONSE']._serialized_end=177
30
+ _globals['_GETNODESREQUEST']._serialized_start=179
31
+ _globals['_GETNODESREQUEST']._serialized_end=212
32
+ _globals['_GETNODESRESPONSE']._serialized_start=214
33
+ _globals['_GETNODESRESPONSE']._serialized_end=265
34
+ _globals['_PUSHTASKINSREQUEST']._serialized_start=267
35
+ _globals['_PUSHTASKINSREQUEST']._serialized_end=331
36
+ _globals['_PUSHTASKINSRESPONSE']._serialized_start=333
37
+ _globals['_PUSHTASKINSRESPONSE']._serialized_end=372
38
+ _globals['_PULLTASKRESREQUEST']._serialized_start=374
39
+ _globals['_PULLTASKRESREQUEST']._serialized_end=444
40
+ _globals['_PULLTASKRESRESPONSE']._serialized_start=446
41
+ _globals['_PULLTASKRESRESPONSE']._serialized_end=511
42
+ _globals['_DRIVER']._serialized_start=514
43
+ _globals['_DRIVER']._serialized_end=835
44
+ # @@protoc_insertion_point(module_scope)
@@ -16,8 +16,16 @@ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
16
16
  class CreateRunRequest(google.protobuf.message.Message):
17
17
  """CreateRun"""
18
18
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
19
+ FAB_ID_FIELD_NUMBER: builtins.int
20
+ FAB_VERSION_FIELD_NUMBER: builtins.int
21
+ fab_id: typing.Text
22
+ fab_version: typing.Text
19
23
  def __init__(self,
24
+ *,
25
+ fab_id: typing.Text = ...,
26
+ fab_version: typing.Text = ...,
20
27
  ) -> None: ...
28
+ def ClearField(self, field_name: typing_extensions.Literal["fab_id",b"fab_id","fab_version",b"fab_version"]) -> None: ...
21
29
  global___CreateRunRequest = CreateRunRequest
22
30
 
23
31
  class CreateRunResponse(google.protobuf.message.Message):
@@ -16,7 +16,7 @@ from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
16
16
  from flwr.proto import task_pb2 as flwr_dot_proto_dot_task__pb2
17
17
 
18
18
 
19
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x15\x66lwr/proto/task.proto\"*\n\x11\x43reateNodeRequest\x12\x15\n\rping_interval\x18\x01 \x01(\x01\"4\n\x12\x43reateNodeResponse\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"3\n\x11\x44\x65leteNodeRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"\x14\n\x12\x44\x65leteNodeResponse\"D\n\x0bPingRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x15\n\rping_interval\x18\x02 \x01(\x01\"\x1f\n\x0cPingResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"F\n\x12PullTaskInsRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"k\n\x13PullTaskInsResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12*\n\rtask_ins_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.TaskIns\"@\n\x12PushTaskResRequest\x12*\n\rtask_res_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskRes\"\xae\x01\n\x13PushTaskResResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12=\n\x07results\x18\x02 \x03(\x0b\x32,.flwr.proto.PushTaskResResponse.ResultsEntry\x1a.\n\x0cResultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"\x1e\n\tReconnect\x12\x11\n\treconnect\x18\x01 \x01(\x04\x32\x86\x03\n\x05\x46leet\x12M\n\nCreateNode\x12\x1d.flwr.proto.CreateNodeRequest\x1a\x1e.flwr.proto.CreateNodeResponse\"\x00\x12M\n\nDeleteNode\x12\x1d.flwr.proto.DeleteNodeRequest\x1a\x1e.flwr.proto.DeleteNodeResponse\"\x00\x12;\n\x04Ping\x12\x17.flwr.proto.PingRequest\x1a\x18.flwr.proto.PingResponse\"\x00\x12P\n\x0bPullTaskIns\x12\x1e.flwr.proto.PullTaskInsRequest\x1a\x1f.flwr.proto.PullTaskInsResponse\"\x00\x12P\n\x0bPushTaskRes\x12\x1e.flwr.proto.PushTaskResRequest\x1a\x1f.flwr.proto.PushTaskResResponse\"\x00\x62\x06proto3')
19
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x15\x66lwr/proto/task.proto\"*\n\x11\x43reateNodeRequest\x12\x15\n\rping_interval\x18\x01 \x01(\x01\"4\n\x12\x43reateNodeResponse\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"3\n\x11\x44\x65leteNodeRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"\x14\n\x12\x44\x65leteNodeResponse\"D\n\x0bPingRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x15\n\rping_interval\x18\x02 \x01(\x01\"\x1f\n\x0cPingResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"F\n\x12PullTaskInsRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"k\n\x13PullTaskInsResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12*\n\rtask_ins_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.TaskIns\"@\n\x12PushTaskResRequest\x12*\n\rtask_res_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskRes\"\xae\x01\n\x13PushTaskResResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12=\n\x07results\x18\x02 \x03(\x0b\x32,.flwr.proto.PushTaskResResponse.ResultsEntry\x1a.\n\x0cResultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\":\n\x03Run\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\x12\x0e\n\x06\x66\x61\x62_id\x18\x02 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x03 \x01(\t\"\x1f\n\rGetRunRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\".\n\x0eGetRunResponse\x12\x1c\n\x03run\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Run\"\x1e\n\tReconnect\x12\x11\n\treconnect\x18\x01 \x01(\x04\x32\xc9\x03\n\x05\x46leet\x12M\n\nCreateNode\x12\x1d.flwr.proto.CreateNodeRequest\x1a\x1e.flwr.proto.CreateNodeResponse\"\x00\x12M\n\nDeleteNode\x12\x1d.flwr.proto.DeleteNodeRequest\x1a\x1e.flwr.proto.DeleteNodeResponse\"\x00\x12;\n\x04Ping\x12\x17.flwr.proto.PingRequest\x1a\x18.flwr.proto.PingResponse\"\x00\x12P\n\x0bPullTaskIns\x12\x1e.flwr.proto.PullTaskInsRequest\x1a\x1f.flwr.proto.PullTaskInsResponse\"\x00\x12P\n\x0bPushTaskRes\x12\x1e.flwr.proto.PushTaskResRequest\x1a\x1f.flwr.proto.PushTaskResResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x62\x06proto3')
20
20
 
21
21
  _globals = globals()
22
22
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -47,8 +47,14 @@ if _descriptor._USE_C_DESCRIPTORS == False:
47
47
  _globals['_PUSHTASKRESRESPONSE']._serialized_end=782
48
48
  _globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._serialized_start=736
49
49
  _globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._serialized_end=782
50
- _globals['_RECONNECT']._serialized_start=784
51
- _globals['_RECONNECT']._serialized_end=814
52
- _globals['_FLEET']._serialized_start=817
53
- _globals['_FLEET']._serialized_end=1207
50
+ _globals['_RUN']._serialized_start=784
51
+ _globals['_RUN']._serialized_end=842
52
+ _globals['_GETRUNREQUEST']._serialized_start=844
53
+ _globals['_GETRUNREQUEST']._serialized_end=875
54
+ _globals['_GETRUNRESPONSE']._serialized_start=877
55
+ _globals['_GETRUNRESPONSE']._serialized_end=923
56
+ _globals['_RECONNECT']._serialized_start=925
57
+ _globals['_RECONNECT']._serialized_end=955
58
+ _globals['_FLEET']._serialized_start=958
59
+ _globals['_FLEET']._serialized_end=1415
54
60
  # @@protoc_insertion_point(module_scope)
@@ -164,6 +164,48 @@ class PushTaskResResponse(google.protobuf.message.Message):
164
164
  def ClearField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect","results",b"results"]) -> None: ...
165
165
  global___PushTaskResResponse = PushTaskResResponse
166
166
 
167
+ class Run(google.protobuf.message.Message):
168
+ """GetRun messages"""
169
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
170
+ RUN_ID_FIELD_NUMBER: builtins.int
171
+ FAB_ID_FIELD_NUMBER: builtins.int
172
+ FAB_VERSION_FIELD_NUMBER: builtins.int
173
+ run_id: builtins.int
174
+ fab_id: typing.Text
175
+ fab_version: typing.Text
176
+ def __init__(self,
177
+ *,
178
+ run_id: builtins.int = ...,
179
+ fab_id: typing.Text = ...,
180
+ fab_version: typing.Text = ...,
181
+ ) -> None: ...
182
+ def ClearField(self, field_name: typing_extensions.Literal["fab_id",b"fab_id","fab_version",b"fab_version","run_id",b"run_id"]) -> None: ...
183
+ global___Run = Run
184
+
185
+ class GetRunRequest(google.protobuf.message.Message):
186
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
187
+ RUN_ID_FIELD_NUMBER: builtins.int
188
+ run_id: builtins.int
189
+ def __init__(self,
190
+ *,
191
+ run_id: builtins.int = ...,
192
+ ) -> None: ...
193
+ def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
194
+ global___GetRunRequest = GetRunRequest
195
+
196
+ class GetRunResponse(google.protobuf.message.Message):
197
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
198
+ RUN_FIELD_NUMBER: builtins.int
199
+ @property
200
+ def run(self) -> global___Run: ...
201
+ def __init__(self,
202
+ *,
203
+ run: typing.Optional[global___Run] = ...,
204
+ ) -> None: ...
205
+ def HasField(self, field_name: typing_extensions.Literal["run",b"run"]) -> builtins.bool: ...
206
+ def ClearField(self, field_name: typing_extensions.Literal["run",b"run"]) -> None: ...
207
+ global___GetRunResponse = GetRunResponse
208
+
167
209
  class Reconnect(google.protobuf.message.Message):
168
210
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
169
211
  RECONNECT_FIELD_NUMBER: builtins.int
@@ -39,6 +39,11 @@ class FleetStub(object):
39
39
  request_serializer=flwr_dot_proto_dot_fleet__pb2.PushTaskResRequest.SerializeToString,
40
40
  response_deserializer=flwr_dot_proto_dot_fleet__pb2.PushTaskResResponse.FromString,
41
41
  )
42
+ self.GetRun = channel.unary_unary(
43
+ '/flwr.proto.Fleet/GetRun',
44
+ request_serializer=flwr_dot_proto_dot_fleet__pb2.GetRunRequest.SerializeToString,
45
+ response_deserializer=flwr_dot_proto_dot_fleet__pb2.GetRunResponse.FromString,
46
+ )
42
47
 
43
48
 
44
49
  class FleetServicer(object):
@@ -80,6 +85,12 @@ class FleetServicer(object):
80
85
  context.set_details('Method not implemented!')
81
86
  raise NotImplementedError('Method not implemented!')
82
87
 
88
+ def GetRun(self, request, context):
89
+ """Missing associated documentation comment in .proto file."""
90
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
91
+ context.set_details('Method not implemented!')
92
+ raise NotImplementedError('Method not implemented!')
93
+
83
94
 
84
95
  def add_FleetServicer_to_server(servicer, server):
85
96
  rpc_method_handlers = {
@@ -108,6 +119,11 @@ def add_FleetServicer_to_server(servicer, server):
108
119
  request_deserializer=flwr_dot_proto_dot_fleet__pb2.PushTaskResRequest.FromString,
109
120
  response_serializer=flwr_dot_proto_dot_fleet__pb2.PushTaskResResponse.SerializeToString,
110
121
  ),
122
+ 'GetRun': grpc.unary_unary_rpc_method_handler(
123
+ servicer.GetRun,
124
+ request_deserializer=flwr_dot_proto_dot_fleet__pb2.GetRunRequest.FromString,
125
+ response_serializer=flwr_dot_proto_dot_fleet__pb2.GetRunResponse.SerializeToString,
126
+ ),
111
127
  }
112
128
  generic_handler = grpc.method_handlers_generic_handler(
113
129
  'flwr.proto.Fleet', rpc_method_handlers)
@@ -202,3 +218,20 @@ class Fleet(object):
202
218
  flwr_dot_proto_dot_fleet__pb2.PushTaskResResponse.FromString,
203
219
  options, channel_credentials,
204
220
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
221
+
222
+ @staticmethod
223
+ def GetRun(request,
224
+ target,
225
+ options=(),
226
+ channel_credentials=None,
227
+ call_credentials=None,
228
+ insecure=False,
229
+ compression=None,
230
+ wait_for_ready=None,
231
+ timeout=None,
232
+ metadata=None):
233
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/GetRun',
234
+ flwr_dot_proto_dot_fleet__pb2.GetRunRequest.SerializeToString,
235
+ flwr_dot_proto_dot_fleet__pb2.GetRunResponse.FromString,
236
+ options, channel_credentials,
237
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -36,6 +36,10 @@ class FleetStub:
36
36
  HTTP API path: /api/v1/fleet/push-task-res
37
37
  """
38
38
 
39
+ GetRun: grpc.UnaryUnaryMultiCallable[
40
+ flwr.proto.fleet_pb2.GetRunRequest,
41
+ flwr.proto.fleet_pb2.GetRunResponse]
42
+
39
43
 
40
44
  class FleetServicer(metaclass=abc.ABCMeta):
41
45
  @abc.abstractmethod
@@ -78,5 +82,11 @@ class FleetServicer(metaclass=abc.ABCMeta):
78
82
  """
79
83
  pass
80
84
 
85
+ @abc.abstractmethod
86
+ def GetRun(self,
87
+ request: flwr.proto.fleet_pb2.GetRunRequest,
88
+ context: grpc.ServicerContext,
89
+ ) -> flwr.proto.fleet_pb2.GetRunResponse: ...
90
+
81
91
 
82
92
  def add_FleetServicer_to_server(servicer: FleetServicer, server: grpc.Server) -> None: ...
@@ -16,7 +16,6 @@
16
16
 
17
17
 
18
18
  import threading
19
- import time
20
19
  from typing import Dict, Tuple
21
20
 
22
21
  from ..client_manager import ClientManager
@@ -60,6 +59,7 @@ def start_update_client_manager_thread(
60
59
  client_manager,
61
60
  f_stop,
62
61
  ),
62
+ daemon=True,
63
63
  )
64
64
  thread.start()
65
65
 
@@ -99,4 +99,5 @@ def _update_client_manager(
99
99
  raise RuntimeError("Could not register node.")
100
100
 
101
101
  # Sleep for 3 seconds
102
- time.sleep(3)
102
+ if not f_stop.is_set():
103
+ f_stop.wait(3)
@@ -26,6 +26,8 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
26
26
  CreateNodeResponse,
27
27
  DeleteNodeRequest,
28
28
  DeleteNodeResponse,
29
+ GetRunRequest,
30
+ GetRunResponse,
29
31
  PingRequest,
30
32
  PingResponse,
31
33
  PullTaskInsRequest,
@@ -90,3 +92,13 @@ class FleetServicer(fleet_pb2_grpc.FleetServicer):
90
92
  request=request,
91
93
  state=self.state_factory.state(),
92
94
  )
95
+
96
+ def GetRun(
97
+ self, request: GetRunRequest, context: grpc.ServicerContext
98
+ ) -> GetRunResponse:
99
+ """Get run information."""
100
+ log(INFO, "FleetServicer.GetRun")
101
+ return message_handler.get_run(
102
+ request=request,
103
+ state=self.state_factory.state(),
104
+ )
@@ -24,6 +24,8 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
24
24
  CreateNodeResponse,
25
25
  DeleteNodeRequest,
26
26
  DeleteNodeResponse,
27
+ GetRunRequest,
28
+ GetRunResponse,
27
29
  PingRequest,
28
30
  PingResponse,
29
31
  PullTaskInsRequest,
@@ -101,3 +103,10 @@ def push_task_res(request: PushTaskResRequest, state: State) -> PushTaskResRespo
101
103
  results={str(task_id): 0},
102
104
  )
103
105
  return response
106
+
107
+
108
+ def get_run(
109
+ request: GetRunRequest, state: State # pylint: disable=W0613
110
+ ) -> GetRunResponse:
111
+ """Get run information."""
112
+ return GetRunResponse()
@@ -21,6 +21,7 @@ from flwr.common.constant import MISSING_EXTRA_REST
21
21
  from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
22
22
  CreateNodeRequest,
23
23
  DeleteNodeRequest,
24
+ GetRunRequest,
24
25
  PingRequest,
25
26
  PullTaskInsRequest,
26
27
  PushTaskResRequest,
@@ -179,12 +180,41 @@ async def ping(request: Request) -> Response:
179
180
  )
180
181
 
181
182
 
183
+ async def get_run(request: Request) -> Response:
184
+ """GetRun."""
185
+ _check_headers(request.headers)
186
+
187
+ # Get the request body as raw bytes
188
+ get_run_request_bytes: bytes = await request.body()
189
+
190
+ # Deserialize ProtoBuf
191
+ get_run_request_proto = GetRunRequest()
192
+ get_run_request_proto.ParseFromString(get_run_request_bytes)
193
+
194
+ # Get state from app
195
+ state: State = app.state.STATE_FACTORY.state()
196
+
197
+ # Handle message
198
+ get_run_response_proto = message_handler.get_run(
199
+ request=get_run_request_proto, state=state
200
+ )
201
+
202
+ # Return serialized ProtoBuf
203
+ get_run_response_bytes = get_run_response_proto.SerializeToString()
204
+ return Response(
205
+ status_code=200,
206
+ content=get_run_response_bytes,
207
+ headers={"Content-Type": "application/protobuf"},
208
+ )
209
+
210
+
182
211
  routes = [
183
212
  Route("/api/v0/fleet/create-node", create_node, methods=["POST"]),
184
213
  Route("/api/v0/fleet/delete-node", delete_node, methods=["POST"]),
185
214
  Route("/api/v0/fleet/pull-task-ins", pull_task_ins, methods=["POST"]),
186
215
  Route("/api/v0/fleet/push-task-res", push_task_res, methods=["POST"]),
187
216
  Route("/api/v0/fleet/ping", ping, methods=["POST"]),
217
+ Route("/api/v0/fleet/get-run", get_run, methods=["POST"]),
188
218
  ]
189
219
 
190
220
  app: Starlette = Starlette(
@@ -1,19 +0,0 @@
1
- [build-system]
2
- requires = ["poetry-core>=1.4.0"]
3
- build-backend = "poetry.core.masonry.api"
4
-
5
- [tool.poetry]
6
- name = "$project_name"
7
- version = "1.0.0"
8
- description = ""
9
- license = "Apache-2.0"
10
- authors = [
11
- "The Flower Authors <hello@flower.ai>",
12
- ]
13
- readme = "README.md"
14
-
15
- [tool.poetry.dependencies]
16
- python = "^3.9"
17
- # Mandatory dependencies
18
- numpy = "^1.21.0"
19
- flwr = { version = "^1.8.0", extras = ["simulation"] }
@@ -1,21 +0,0 @@
1
- [build-system]
2
- requires = ["poetry-core>=1.4.0"]
3
- build-backend = "poetry.core.masonry.api"
4
-
5
- [tool.poetry]
6
- name = "$project_name"
7
- version = "1.0.0"
8
- description = ""
9
- license = "Apache-2.0"
10
- authors = [
11
- "The Flower Authors <hello@flower.ai>",
12
- ]
13
- readme = "README.md"
14
-
15
- [tool.poetry.dependencies]
16
- python = "^3.9"
17
- # Mandatory dependencies
18
- flwr = { version = "^1.8.0", extras = ["simulation"] }
19
- flwr-datasets = { version = "0.0.2", extras = ["vision"] }
20
- torch = "2.2.1"
21
- torchvision = "0.17.1"
@@ -1,21 +0,0 @@
1
- [build-system]
2
- requires = ["poetry-core>=1.4.0"]
3
- build-backend = "poetry.core.masonry.api"
4
-
5
- [tool.poetry]
6
- name = "$project_name"
7
- version = "1.0.0"
8
- description = ""
9
- license = "Apache-2.0"
10
- authors = [
11
- "The Flower Authors <hello@flower.ai>",
12
- ]
13
- readme = "README.md"
14
-
15
- [tool.poetry.dependencies]
16
- python = ">=3.9,<3.11"
17
- # Mandatory dependencies
18
- flwr = { version = "^1.8.0", extras = ["simulation"] }
19
- flwr-datasets = { version = "^0.0.2", extras = ["vision"] }
20
- tensorflow-cpu = { version = ">=2.9.1,<2.11.1 || >2.11.1", markers = "platform_machine == \"x86_64\"" }
21
- tensorflow-macos = { version = ">=2.9.1,<2.11.1 || >2.11.1", markers = "sys_platform == \"darwin\" and platform_machine == \"arm64\"" }
@@ -1,2 +0,0 @@
1
- flwr>=1.8, <2.0
2
- numpy>=1.21.0
@@ -1,4 +0,0 @@
1
- flwr[simulation]>=1.8.0
2
- flwr-datasets[vision]==0.0.2
3
- torch==2.2.1
4
- torchvision==0.17.1