flwr 1.13.0__tar.gz → 1.13.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. {flwr-1.13.0 → flwr-1.13.1}/PKG-INFO +1 -2
  2. {flwr-1.13.0 → flwr-1.13.1}/pyproject.toml +1 -2
  3. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/build.py +0 -37
  4. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/install.py +1 -19
  5. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/ls.py +1 -1
  6. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/new.py +23 -13
  7. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +1 -1
  8. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
  9. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +1 -1
  10. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
  11. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -1
  12. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
  13. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +1 -1
  14. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
  15. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
  16. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/clientapp/app.py +0 -7
  17. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/app.py +8 -5
  18. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/serverapp/app.py +0 -7
  19. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/app.py +44 -49
  20. {flwr-1.13.0 → flwr-1.13.1}/LICENSE +0 -0
  21. {flwr-1.13.0 → flwr-1.13.1}/README.md +0 -0
  22. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/__init__.py +0 -0
  23. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/__init__.py +0 -0
  24. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/app.py +0 -0
  25. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/config_utils.py +0 -0
  26. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/example.py +0 -0
  27. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/log.py +0 -0
  28. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/__init__.py +0 -0
  29. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  30. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  31. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  32. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  33. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  34. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  35. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  36. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  37. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  38. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  39. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  40. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  41. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  42. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  43. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  44. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  45. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  46. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  47. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  48. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  49. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  50. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  51. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  52. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  53. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  54. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  55. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  56. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  57. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  58. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  59. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  60. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  61. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  62. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  63. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  64. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  65. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  66. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  67. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  68. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  69. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  70. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  71. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  72. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/run/__init__.py +0 -0
  73. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/run/run.py +0 -0
  74. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/utils.py +0 -0
  75. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/__init__.py +0 -0
  76. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/app.py +0 -0
  77. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/client.py +0 -0
  78. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/client_app.py +0 -0
  79. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/clientapp/__init__.py +0 -0
  80. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  81. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/clientapp/utils.py +0 -0
  82. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  83. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  84. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  85. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  86. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/grpc_client/connection.py +0 -0
  87. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  88. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  89. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  90. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  91. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/heartbeat.py +0 -0
  92. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/message_handler/__init__.py +0 -0
  93. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  94. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  95. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/mod/__init__.py +0 -0
  96. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  97. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/mod/comms_mods.py +0 -0
  98. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  99. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  100. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  101. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  102. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/mod/utils.py +0 -0
  103. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/nodestate/__init__.py +0 -0
  104. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
  105. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/nodestate/nodestate.py +0 -0
  106. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/nodestate/nodestate_factory.py +0 -0
  107. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/numpy_client.py +0 -0
  108. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/rest_client/__init__.py +0 -0
  109. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/rest_client/connection.py +0 -0
  110. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/run_info_store.py +0 -0
  111. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/supernode/__init__.py +0 -0
  112. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/supernode/app.py +0 -0
  113. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/typing.py +0 -0
  114. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/__init__.py +0 -0
  115. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/address.py +0 -0
  116. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/args.py +0 -0
  117. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/config.py +0 -0
  118. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/constant.py +0 -0
  119. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/context.py +0 -0
  120. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/date.py +0 -0
  121. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/differential_privacy.py +0 -0
  122. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  123. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/dp.py +0 -0
  124. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/exit_handlers.py +0 -0
  125. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/grpc.py +0 -0
  126. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/logger.py +0 -0
  127. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/message.py +0 -0
  128. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/object_ref.py +0 -0
  129. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/parameter.py +0 -0
  130. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/pyproject.py +0 -0
  131. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/record/__init__.py +0 -0
  132. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/record/configsrecord.py +0 -0
  133. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/record/conversion_utils.py +0 -0
  134. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/record/metricsrecord.py +0 -0
  135. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/record/parametersrecord.py +0 -0
  136. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/record/recordset.py +0 -0
  137. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/record/typeddict.py +0 -0
  138. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/recordset_compat.py +0 -0
  139. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/retry_invoker.py +0 -0
  140. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  141. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  142. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  143. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  144. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  145. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  146. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  147. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  148. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/serde.py +0 -0
  149. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/telemetry.py +0 -0
  150. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/typing.py +0 -0
  151. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/version.py +0 -0
  152. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/__init__.py +0 -0
  153. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  154. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  155. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  156. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  157. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/common_pb2.py +0 -0
  158. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/common_pb2.pyi +0 -0
  159. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  160. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  161. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/control_pb2.py +0 -0
  162. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/control_pb2.pyi +0 -0
  163. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
  164. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  165. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/error_pb2.py +0 -0
  166. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/error_pb2.pyi +0 -0
  167. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  168. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  169. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/exec_pb2.py +0 -0
  170. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  171. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  172. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  173. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/fab_pb2.py +0 -0
  174. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  175. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  176. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  177. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/fleet_pb2.py +0 -0
  178. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  179. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  180. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  181. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  182. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  183. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  184. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  185. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/log_pb2.py +0 -0
  186. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/log_pb2.pyi +0 -0
  187. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
  188. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  189. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/message_pb2.py +0 -0
  190. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/message_pb2.pyi +0 -0
  191. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  192. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  193. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/node_pb2.py +0 -0
  194. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/node_pb2.pyi +0 -0
  195. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  196. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  197. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/recordset_pb2.py +0 -0
  198. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  199. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  200. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  201. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/run_pb2.py +0 -0
  202. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/run_pb2.pyi +0 -0
  203. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  204. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  205. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/serverappio_pb2.py +0 -0
  206. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
  207. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  208. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  209. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/simulationio_pb2.py +0 -0
  210. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
  211. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  212. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  213. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/task_pb2.py +0 -0
  214. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/task_pb2.pyi +0 -0
  215. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  216. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  217. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/transport_pb2.py +0 -0
  218. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  219. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  220. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  221. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/py.typed +0 -0
  222. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/__init__.py +0 -0
  223. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/client_manager.py +0 -0
  224. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/client_proxy.py +0 -0
  225. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/compat/__init__.py +0 -0
  226. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/compat/app.py +0 -0
  227. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/compat/app_utils.py +0 -0
  228. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  229. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/compat/legacy_context.py +0 -0
  230. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/criterion.py +0 -0
  231. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/driver/__init__.py +0 -0
  232. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/driver/driver.py +0 -0
  233. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  234. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  235. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/history.py +0 -0
  236. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/run_serverapp.py +0 -0
  237. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/server.py +0 -0
  238. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/server_app.py +0 -0
  239. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/server_config.py +0 -0
  240. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/serverapp/__init__.py +0 -0
  241. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/serverapp_components.py +0 -0
  242. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/__init__.py +0 -0
  243. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/aggregate.py +0 -0
  244. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/bulyan.py +0 -0
  245. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  246. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  247. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  248. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  249. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  250. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  251. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedadam.py +0 -0
  252. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedavg.py +0 -0
  253. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  254. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  255. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  256. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedopt.py +0 -0
  257. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedprox.py +0 -0
  258. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  259. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  260. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  261. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  262. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  263. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/krum.py +0 -0
  264. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  265. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/strategy.py +0 -0
  266. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/__init__.py +0 -0
  267. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  268. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +0 -0
  269. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +0 -0
  270. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  271. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  272. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  273. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  274. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  275. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  276. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  277. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  278. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  279. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  280. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  281. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  282. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  283. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  284. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  285. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  286. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  287. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  288. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  289. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  290. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  291. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  292. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  293. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  294. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  295. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  296. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  297. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  298. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
  299. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/linkstate/utils.py +0 -0
  300. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
  301. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  302. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  303. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/typing.py +0 -0
  304. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/utils/__init__.py +0 -0
  305. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/utils/tensorboard.py +0 -0
  306. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/utils/validator.py +0 -0
  307. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/workflow/__init__.py +0 -0
  308. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/workflow/constant.py +0 -0
  309. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  310. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  311. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  312. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  313. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/__init__.py +0 -0
  314. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/legacy_app.py +0 -0
  315. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  316. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  317. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  318. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  319. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/run_simulation.py +0 -0
  320. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/simulationio_connection.py +0 -0
  321. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/superexec/__init__.py +0 -0
  322. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/superexec/app.py +0 -0
  323. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/superexec/deployment.py +0 -0
  324. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/superexec/exec_grpc.py +0 -0
  325. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/superexec/exec_servicer.py +0 -0
  326. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/superexec/executor.py +0 -0
  327. {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/superexec/simulation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr
3
- Version: 1.13.0
3
+ Version: 1.13.1
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -34,7 +34,6 @@ Provides-Extra: rest
34
34
  Provides-Extra: simulation
35
35
  Requires-Dist: cryptography (>=42.0.4,<43.0.0)
36
36
  Requires-Dist: grpcio (>=1.60.0,<2.0.0,!=1.64.2,<=1.64.3)
37
- Requires-Dist: hatchling (>=1.25.0,<2.0.0)
38
37
  Requires-Dist: iterators (>=0.0.2,<0.0.3)
39
38
  Requires-Dist: numpy (>=1.26.0,<3.0.0)
40
39
  Requires-Dist: pathspec (>=0.12.1,<0.13.0)
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr"
7
- version = "1.13.0"
7
+ version = "1.13.1"
8
8
  description = "Flower: A Friendly Federated AI Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -77,7 +77,6 @@ typer = "^0.12.5"
77
77
  tomli = "^2.0.1"
78
78
  tomli-w = "^1.0.0"
79
79
  pathspec = "^0.12.1"
80
- hatchling = "^1.25.0"
81
80
  rich = "^13.5.0"
82
81
  # Optional dependencies (Simulation Engine)
83
82
  ray = { version = "==2.10.0", optional = true, python = ">=3.9,<3.12" }
@@ -19,18 +19,14 @@ import os
19
19
  import shutil
20
20
  import tempfile
21
21
  import zipfile
22
- from logging import DEBUG, ERROR
23
22
  from pathlib import Path
24
23
  from typing import Annotated, Any, Optional, Union
25
24
 
26
25
  import pathspec
27
26
  import tomli_w
28
27
  import typer
29
- from hatchling.builders.wheel import WheelBuilder
30
- from hatchling.metadata.core import ProjectMetadata
31
28
 
32
29
  from flwr.common.constant import FAB_ALLOWED_EXTENSIONS, FAB_DATE, FAB_HASH_TRUNCATION
33
- from flwr.common.logger import log
34
30
 
35
31
  from .config_utils import load_and_validate
36
32
  from .utils import is_valid_project_name
@@ -55,27 +51,6 @@ def get_fab_filename(conf: dict[str, Any], fab_hash: str) -> str:
55
51
  return f"{publisher}.{name}.{version}.{fab_hash_truncated}.fab"
56
52
 
57
53
 
58
- def _build_app_wheel(app: Path) -> Path:
59
- """Build app as a wheel and return its path."""
60
- # Path to your project directory
61
- app_dir = str(app.resolve())
62
- try:
63
-
64
- # Initialize the WheelBuilder
65
- builder = WheelBuilder(
66
- app_dir, metadata=ProjectMetadata(root=app_dir, plugin_manager=None)
67
- )
68
-
69
- # Build
70
- whl_path = Path(next(builder.build(directory=app_dir)))
71
- log(DEBUG, "Wheel succesfully built: %s", str(whl_path))
72
- except Exception as ex:
73
- log(ERROR, "Exception encountered when building wheel.", exc_info=ex)
74
- raise typer.Exit(code=1) from ex
75
-
76
- return whl_path
77
-
78
-
79
54
  # pylint: disable=too-many-locals, too-many-statements
80
55
  def build(
81
56
  app: Annotated[
@@ -131,12 +106,6 @@ def build(
131
106
  bold=True,
132
107
  )
133
108
 
134
- # Build wheel
135
- whl_path = _build_app_wheel(app)
136
-
137
- # Add path to .whl to `[tool.flwr.app]`
138
- conf["tool"]["flwr"]["app"]["whl"] = str(whl_path.name)
139
-
140
109
  # Load .gitignore rules if present
141
110
  ignore_spec = _load_gitignore(app)
142
111
 
@@ -168,9 +137,6 @@ def build(
168
137
  and f.name != "pyproject.toml" # Exclude the original pyproject.toml
169
138
  ]
170
139
 
171
- # Include FAB .whl
172
- all_files.append(whl_path)
173
-
174
140
  for file_path in all_files:
175
141
  # Read the file content manually
176
142
  with open(file_path, "rb") as f:
@@ -187,9 +153,6 @@ def build(
187
153
  # Add CONTENT and CONTENT.jwt to the zip file
188
154
  write_to_zip(fab_file, ".info/CONTENT", list_file_content)
189
155
 
190
- # Erase FAB .whl in app directory
191
- whl_path.unlink()
192
-
193
156
  # Get hash of FAB file
194
157
  content = Path(temp_filename).read_bytes()
195
158
  fab_hash = hashlib.sha256(content).hexdigest()
@@ -16,7 +16,6 @@
16
16
 
17
17
  import hashlib
18
18
  import shutil
19
- import subprocess
20
19
  import tempfile
21
20
  import zipfile
22
21
  from io import BytesIO
@@ -188,25 +187,8 @@ def validate_and_install(
188
187
  else:
189
188
  shutil.copy2(item, install_dir / item.name)
190
189
 
191
- whl_file = config["tool"]["flwr"]["app"]["whl"]
192
- install_whl = install_dir / whl_file
193
- try:
194
- subprocess.run(
195
- ["pip", "install", "--no-deps", install_whl],
196
- capture_output=True,
197
- text=True,
198
- check=True,
199
- )
200
- except subprocess.CalledProcessError as e:
201
- typer.secho(
202
- f"❌ Failed to install {project_name}:\n{e.stderr}",
203
- fg=typer.colors.RED,
204
- bold=True,
205
- )
206
- raise typer.Exit(code=1) from e
207
-
208
190
  typer.secho(
209
- f"🎊 Successfully installed {project_name}.",
191
+ f"🎊 Successfully installed {project_name} to {install_dir}.",
210
192
  fg=typer.colors.GREEN,
211
193
  bold=True,
212
194
  )
@@ -82,7 +82,7 @@ def ls(
82
82
 
83
83
  if "address" not in federation_config:
84
84
  typer.secho(
85
- "❌ `flwr log` currently works with Exec API. Ensure that the correct"
85
+ "❌ `flwr ls` currently works with Exec API. Ensure that the correct"
86
86
  "Exec API address is provided in the `pyproject.toml`.",
87
87
  fg=typer.colors.RED,
88
88
  bold=True,
@@ -268,20 +268,30 @@ def new(
268
268
  context=context,
269
269
  )
270
270
 
271
- print(
272
- typer.style(
273
- "🎊 Flower App creation successful.\n\n"
274
- "Use the following command to run your Flower App:\n",
275
- fg=typer.colors.GREEN,
276
- bold=True,
277
- )
271
+ prompt = typer.style(
272
+ "🎊 Flower App creation successful.\n\n"
273
+ "To run your Flower App, use the following command:\n\n",
274
+ fg=typer.colors.GREEN,
275
+ bold=True,
278
276
  )
279
277
 
280
278
  _add = " huggingface-cli login\n" if llm_challenge_str else ""
281
- print(
282
- typer.style(
283
- f" cd {package_name}\n" + " pip install -e .\n" + _add + " flwr run\n",
284
- fg=typer.colors.BRIGHT_CYAN,
285
- bold=True,
286
- )
279
+ prompt += typer.style(
280
+ _add + f" flwr run {package_name}\n\n",
281
+ fg=typer.colors.BRIGHT_CYAN,
282
+ bold=True,
283
+ )
284
+
285
+ prompt += typer.style(
286
+ "If you haven't installed all dependencies yet, follow these steps:\n\n",
287
+ fg=typer.colors.GREEN,
288
+ bold=True,
287
289
  )
290
+
291
+ prompt += typer.style(
292
+ f" cd {package_name}\n" + " pip install -e .\n" + _add + " flwr run .\n",
293
+ fg=typer.colors.BRIGHT_CYAN,
294
+ bold=True,
295
+ )
296
+
297
+ print(prompt)
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.12.0",
11
+ "flwr[simulation]>=1.13.0",
12
12
  "flwr-datasets[vision]>=0.3.0",
13
13
  "torch==2.2.1",
14
14
  "torchvision==0.17.1",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.12.0",
11
+ "flwr[simulation]>=1.13.0",
12
12
  "flwr-datasets>=0.3.0",
13
13
  "torch==2.3.1",
14
14
  "trl==0.8.1",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.12.0",
11
+ "flwr[simulation]>=1.13.0",
12
12
  "flwr-datasets>=0.3.0",
13
13
  "torch==2.2.1",
14
14
  "transformers>=4.30.0,<5.0",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.12.0",
11
+ "flwr[simulation]>=1.13.0",
12
12
  "jax==0.4.30",
13
13
  "jaxlib==0.4.30",
14
14
  "scikit-learn==1.3.2",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.12.0",
11
+ "flwr[simulation]>=1.13.0",
12
12
  "flwr-datasets[vision]>=0.3.0",
13
13
  "mlx==0.16.1",
14
14
  "numpy==1.24.4",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.12.0",
11
+ "flwr[simulation]>=1.13.0",
12
12
  "numpy>=1.21.0",
13
13
  ]
14
14
 
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.12.0",
11
+ "flwr[simulation]>=1.13.0",
12
12
  "flwr-datasets[vision]>=0.3.0",
13
13
  "torch==2.2.1",
14
14
  "torchvision==0.17.1",
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.12.0",
11
+ "flwr[simulation]>=1.13.0",
12
12
  "flwr-datasets[vision]>=0.3.0",
13
13
  "scikit-learn>=1.1.1",
14
14
  ]
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.12.0",
11
+ "flwr[simulation]>=1.13.0",
12
12
  "flwr-datasets[vision]>=0.3.0",
13
13
  "tensorflow>=2.11.1,<2.18.0",
14
14
  ]
@@ -252,12 +252,5 @@ def _parse_args_run_flwr_clientapp() -> argparse.ArgumentParser:
252
252
  required=False,
253
253
  help="Unique token generated by SuperNode for each ClientApp execution",
254
254
  )
255
- parser.add_argument(
256
- "--root-certificates",
257
- metavar="ROOT_CERT",
258
- type=str,
259
- help="Specifies the path to the PEM-encoded root certificate file for "
260
- "establishing secure HTTPS connections.",
261
- )
262
255
  add_args_flwr_app_common(parser=parser)
263
256
  return parser
@@ -66,7 +66,6 @@ from flwr.proto.fleet_pb2_grpc import ( # pylint: disable=E0611
66
66
  from flwr.proto.grpcadapter_pb2_grpc import add_GrpcAdapterServicer_to_server
67
67
  from flwr.superexec.app import load_executor
68
68
  from flwr.superexec.exec_grpc import run_exec_api_grpc
69
- from flwr.superexec.simulation import SimulationEngine
70
69
 
71
70
  from .client_manager import ClientManager
72
71
  from .history import History
@@ -269,8 +268,7 @@ def run_superlink() -> None:
269
268
 
270
269
  # Determine Exec plugin
271
270
  # If simulation is used, don't start ServerAppIo and Fleet APIs
272
- sim_exec = isinstance(executor, SimulationEngine)
273
-
271
+ sim_exec = executor.__class__.__qualname__ == "SimulationEngine"
274
272
  bckg_threads = []
275
273
 
276
274
  if sim_exec:
@@ -278,7 +276,7 @@ def run_superlink() -> None:
278
276
  address=simulationio_address,
279
277
  state_factory=state_factory,
280
278
  ffs_factory=ffs_factory,
281
- certificates=certificates,
279
+ certificates=None, # SimulationAppIo API doesn't support SSL yet
282
280
  )
283
281
  grpc_servers.append(simulationio_server)
284
282
 
@@ -389,6 +387,9 @@ def run_superlink() -> None:
389
387
  io_address = (
390
388
  f"{CLIENT_OCTET}:{_port}" if _octet == SERVER_OCTET else serverappio_address
391
389
  )
390
+ address_arg = (
391
+ "--simulationio-api-address" if sim_exec else "--serverappio-api-address"
392
+ )
392
393
  address = simulationio_address if sim_exec else io_address
393
394
  cmd = "flwr-simulation" if sim_exec else "flwr-serverapp"
394
395
 
@@ -397,6 +398,7 @@ def run_superlink() -> None:
397
398
  target=_flwr_scheduler,
398
399
  args=(
399
400
  state_factory,
401
+ address_arg,
400
402
  address,
401
403
  cmd,
402
404
  ),
@@ -422,6 +424,7 @@ def run_superlink() -> None:
422
424
 
423
425
  def _flwr_scheduler(
424
426
  state_factory: LinkStateFactory,
427
+ io_api_arg: str,
425
428
  io_api_address: str,
426
429
  cmd: str,
427
430
  ) -> None:
@@ -446,7 +449,7 @@ def _flwr_scheduler(
446
449
  command = [
447
450
  cmd,
448
451
  "--run-once",
449
- "--serverappio-api-address",
452
+ io_api_arg,
450
453
  io_api_address,
451
454
  "--insecure",
452
455
  ]
@@ -230,12 +230,5 @@ def _parse_args_run_flwr_serverapp() -> argparse.ArgumentParser:
230
230
  help="When set, this process will start a single ServerApp for a pending Run. "
231
231
  "If there is no pending Run, the process will exit.",
232
232
  )
233
- parser.add_argument(
234
- "--root-certificates",
235
- metavar="ROOT_CERT",
236
- type=str,
237
- help="Specifies the path to the PEM-encoded root certificate file for "
238
- "establishing secure HTTPS connections.",
239
- )
240
233
  add_args_flwr_app_common(parser=parser)
241
234
  return parser
@@ -14,8 +14,8 @@
14
14
  # ==============================================================================
15
15
  """Flower Simulation process."""
16
16
 
17
-
18
17
  import argparse
18
+ import sys
19
19
  from logging import DEBUG, ERROR, INFO
20
20
  from queue import Queue
21
21
  from time import sleep
@@ -24,7 +24,7 @@ from typing import Optional
24
24
  from flwr.cli.config_utils import get_fab_metadata
25
25
  from flwr.cli.install import install_from_fab
26
26
  from flwr.common import EventType
27
- from flwr.common.args import try_obtain_root_certificates
27
+ from flwr.common.args import add_args_flwr_app_common
28
28
  from flwr.common.config import (
29
29
  get_flwr_dir,
30
30
  get_fused_config_from_dir,
@@ -32,7 +32,11 @@ from flwr.common.config import (
32
32
  get_project_dir,
33
33
  unflatten_dict,
34
34
  )
35
- from flwr.common.constant import Status, SubStatus
35
+ from flwr.common.constant import (
36
+ SIMULATIONIO_API_DEFAULT_CLIENT_ADDRESS,
37
+ Status,
38
+ SubStatus,
39
+ )
36
40
  from flwr.common.logger import (
37
41
  log,
38
42
  mirror_output_to_queue,
@@ -69,61 +73,30 @@ def flwr_simulation() -> None:
69
73
  log_queue: Queue[Optional[str]] = Queue()
70
74
  mirror_output_to_queue(log_queue)
71
75
 
72
- parser = argparse.ArgumentParser(
73
- description="Run a Flower Simulation",
74
- )
75
- parser.add_argument(
76
- "--superlink",
77
- type=str,
78
- help="Address of SuperLink's SimulationIO API",
79
- )
80
- parser.add_argument(
81
- "--run-once",
82
- action="store_true",
83
- help="When set, this process will start a single simulation "
84
- "for a pending Run. If no pending run the process will exit. ",
85
- )
86
- parser.add_argument(
87
- "--flwr-dir",
88
- default=None,
89
- help="""The path containing installed Flower Apps.
90
- By default, this value is equal to:
91
-
92
- - `$FLWR_HOME/` if `$FLWR_HOME` is defined
93
- - `$XDG_DATA_HOME/.flwr/` if `$XDG_DATA_HOME` is defined
94
- - `$HOME/.flwr/` in all other cases
95
- """,
96
- )
97
- parser.add_argument(
98
- "--insecure",
99
- action="store_true",
100
- help="Run the server without HTTPS, regardless of whether certificate "
101
- "paths are provided. By default, the server runs with HTTPS enabled. "
102
- "Use this flag only if you understand the risks.",
103
- )
104
- parser.add_argument(
105
- "--root-certificates",
106
- metavar="ROOT_CERT",
107
- type=str,
108
- help="Specifies the path to the PEM-encoded root certificate file for "
109
- "establishing secure HTTPS connections.",
110
- )
111
- args = parser.parse_args()
76
+ args = _parse_args_run_flwr_simulation().parse_args()
112
77
 
113
78
  log(INFO, "Starting Flower Simulation")
114
- certificates = try_obtain_root_certificates(args, args.superlink)
79
+
80
+ if not args.insecure:
81
+ log(
82
+ ERROR,
83
+ "`flwr-simulation` does not support TLS yet. "
84
+ "Please use the '--insecure' flag.",
85
+ )
86
+ sys.exit(1)
115
87
 
116
88
  log(
117
89
  DEBUG,
118
- "Staring isolated `Simulation` connected to SuperLink DriverAPI at %s",
119
- args.superlink,
90
+ "Starting isolated `Simulation` connected to SuperLink SimulationAppIo API "
91
+ "at %s",
92
+ args.simulationio_api_address,
120
93
  )
121
94
  run_simulation_process(
122
- simulationio_api_address=args.superlink,
95
+ simulationio_api_address=args.simulationio_api_address,
123
96
  log_queue=log_queue,
124
97
  run_once=args.run_once,
125
98
  flwr_dir_=args.flwr_dir,
126
- certificates=certificates,
99
+ certificates=None,
127
100
  )
128
101
 
129
102
  # Restore stdout/stderr
@@ -225,7 +198,7 @@ def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R09
225
198
  )
226
199
  backend_config: BackendConfig = fed_opt.get("backend", {})
227
200
  verbose: bool = fed_opt.get("verbose", False)
228
- enable_tf_gpu_growth: bool = fed_opt.get("enable_tf_gpu_growth", True)
201
+ enable_tf_gpu_growth: bool = fed_opt.get("enable_tf_gpu_growth", False)
229
202
 
230
203
  # Launch the simulation
231
204
  _run_simulation(
@@ -274,3 +247,25 @@ def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R09
274
247
  # Stop the loop if `flwr-simulation` is expected to process a single run
275
248
  if run_once:
276
249
  break
250
+
251
+
252
+ def _parse_args_run_flwr_simulation() -> argparse.ArgumentParser:
253
+ """Parse flwr-simulation command line arguments."""
254
+ parser = argparse.ArgumentParser(
255
+ description="Run a Flower Simulation",
256
+ )
257
+ parser.add_argument(
258
+ "--simulationio-api-address",
259
+ default=SIMULATIONIO_API_DEFAULT_CLIENT_ADDRESS,
260
+ type=str,
261
+ help="Address of SuperLink's SimulationIO API (IPv4, IPv6, or a domain name)."
262
+ f"By default, it is set to {SIMULATIONIO_API_DEFAULT_CLIENT_ADDRESS}.",
263
+ )
264
+ parser.add_argument(
265
+ "--run-once",
266
+ action="store_true",
267
+ help="When set, this process will start a single simulation "
268
+ "for a pending Run. If no pending run the process will exit. ",
269
+ )
270
+ add_args_flwr_app_common(parser=parser)
271
+ return parser
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes