flwr 1.15.2__tar.gz → 1.17.0__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 (346) hide show
  1. {flwr-1.15.2 → flwr-1.17.0}/PKG-INFO +5 -5
  2. {flwr-1.15.2 → flwr-1.17.0}/README.md +1 -1
  3. {flwr-1.15.2 → flwr-1.17.0}/pyproject.toml +7 -7
  4. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/build.py +2 -0
  5. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/log.py +20 -21
  6. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +1 -1
  7. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +1 -1
  8. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
  9. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +1 -1
  10. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
  11. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -1
  12. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
  13. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +1 -1
  14. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
  15. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
  16. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/run/run.py +5 -9
  17. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/app.py +6 -4
  18. flwr-1.17.0/src/py/flwr/client/client_app.py +459 -0
  19. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/clientapp/app.py +6 -2
  20. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/grpc_client/connection.py +24 -21
  21. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/message_handler/message_handler.py +28 -28
  22. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/mod/__init__.py +2 -2
  23. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/mod/centraldp_mods.py +7 -7
  24. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/mod/comms_mods.py +16 -22
  25. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/mod/localdp_mod.py +4 -4
  26. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +31 -31
  27. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/rest_client/connection.py +4 -6
  28. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/run_info_store.py +2 -2
  29. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/supernode/__init__.py +0 -2
  30. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/supernode/app.py +1 -11
  31. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/__init__.py +12 -4
  32. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/address.py +35 -0
  33. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/args.py +8 -2
  34. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/auth_plugin/auth_plugin.py +2 -1
  35. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/config.py +4 -4
  36. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/constant.py +16 -0
  37. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/context.py +4 -4
  38. flwr-1.17.0/src/py/flwr/common/event_log_plugin/__init__.py +22 -0
  39. flwr-1.17.0/src/py/flwr/common/event_log_plugin/event_log_plugin.py +60 -0
  40. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/grpc.py +1 -1
  41. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/logger.py +2 -2
  42. flwr-1.17.0/src/py/flwr/common/message.py +644 -0
  43. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/object_ref.py +0 -10
  44. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/record/__init__.py +8 -4
  45. flwr-1.17.0/src/py/flwr/common/record/arrayrecord.py +626 -0
  46. flwr-1.15.2/src/py/flwr/common/record/configsrecord.py → flwr-1.17.0/src/py/flwr/common/record/configrecord.py +75 -29
  47. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/record/conversion_utils.py +9 -18
  48. flwr-1.15.2/src/py/flwr/common/record/metricsrecord.py → flwr-1.17.0/src/py/flwr/common/record/metricrecord.py +78 -32
  49. flwr-1.17.0/src/py/flwr/common/record/recorddict.py +288 -0
  50. flwr-1.17.0/src/py/flwr/common/recorddict_compat.py +410 -0
  51. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/secure_aggregation/quantization.py +5 -1
  52. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +1 -1
  53. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/serde.py +67 -190
  54. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/telemetry.py +0 -10
  55. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/typing.py +44 -8
  56. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/exec_pb2.py +3 -3
  57. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/exec_pb2.pyi +3 -3
  58. flwr-1.17.0/src/py/flwr/proto/message_pb2.py +41 -0
  59. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/message_pb2.pyi +9 -9
  60. flwr-1.17.0/src/py/flwr/proto/recorddict_pb2.py +70 -0
  61. flwr-1.15.2/src/py/flwr/proto/recordset_pb2.pyi → flwr-1.17.0/src/py/flwr/proto/recorddict_pb2.pyi +35 -35
  62. flwr-1.17.0/src/py/flwr/proto/run_pb2.py +64 -0
  63. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/run_pb2.pyi +3 -3
  64. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/__init__.py +3 -1
  65. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/app.py +74 -3
  66. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/compat/__init__.py +2 -2
  67. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/compat/app.py +15 -12
  68. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/compat/app_utils.py +26 -18
  69. flwr-1.15.2/src/py/flwr/server/compat/driver_client_proxy.py → flwr-1.17.0/src/py/flwr/server/compat/grid_client_proxy.py +41 -41
  70. flwr-1.17.0/src/py/flwr/server/fleet_event_log_interceptor.py +94 -0
  71. {flwr-1.15.2/src/py/flwr/server/driver → flwr-1.17.0/src/py/flwr/server/grid}/__init__.py +8 -7
  72. flwr-1.15.2/src/py/flwr/server/driver/driver.py → flwr-1.17.0/src/py/flwr/server/grid/grid.py +48 -19
  73. flwr-1.15.2/src/py/flwr/server/driver/grpc_driver.py → flwr-1.17.0/src/py/flwr/server/grid/grpc_grid.py +88 -56
  74. flwr-1.15.2/src/py/flwr/server/driver/inmemory_driver.py → flwr-1.17.0/src/py/flwr/server/grid/inmemory_grid.py +41 -54
  75. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/run_serverapp.py +6 -17
  76. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/server_app.py +126 -33
  77. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/serverapp/app.py +10 -10
  78. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +2 -2
  79. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +8 -12
  80. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +3 -3
  81. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +2 -2
  82. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +33 -38
  83. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +171 -132
  84. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/linkstate/linkstate.py +51 -64
  85. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +253 -285
  86. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/linkstate/utils.py +171 -133
  87. {flwr-1.15.2/src/py/flwr/server/superlink/driver → flwr-1.17.0/src/py/flwr/server/superlink/serverappio}/__init__.py +1 -1
  88. {flwr-1.15.2/src/py/flwr/server/superlink/driver → flwr-1.17.0/src/py/flwr/server/superlink/serverappio}/serverappio_grpc.py +1 -1
  89. {flwr-1.15.2/src/py/flwr/server/superlink/driver → flwr-1.17.0/src/py/flwr/server/superlink/serverappio}/serverappio_servicer.py +27 -29
  90. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +2 -2
  91. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/typing.py +3 -3
  92. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/utils/__init__.py +2 -2
  93. flwr-1.17.0/src/py/flwr/server/utils/validator.py +93 -0
  94. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/workflow/default_workflows.py +52 -58
  95. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +48 -50
  96. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/simulation/app.py +2 -2
  97. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/simulation/ray_transport/ray_actor.py +4 -2
  98. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +34 -32
  99. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/simulation/run_simulation.py +15 -15
  100. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/superexec/app.py +0 -14
  101. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/superexec/deployment.py +4 -4
  102. flwr-1.17.0/src/py/flwr/superexec/exec_event_log_interceptor.py +135 -0
  103. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/superexec/exec_grpc.py +10 -4
  104. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/superexec/exec_servicer.py +6 -6
  105. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/superexec/exec_user_auth_interceptor.py +22 -4
  106. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/superexec/executor.py +3 -3
  107. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/superexec/simulation.py +3 -3
  108. flwr-1.15.2/src/py/flwr/client/client_app.py +0 -285
  109. flwr-1.15.2/src/py/flwr/client/message_handler/task_handler.py +0 -37
  110. flwr-1.15.2/src/py/flwr/common/message.py +0 -408
  111. flwr-1.15.2/src/py/flwr/common/record/parametersrecord.py +0 -204
  112. flwr-1.15.2/src/py/flwr/common/record/recordset.py +0 -202
  113. flwr-1.15.2/src/py/flwr/common/recordset_compat.py +0 -418
  114. flwr-1.15.2/src/py/flwr/proto/message_pb2.py +0 -41
  115. flwr-1.15.2/src/py/flwr/proto/recordset_pb2.py +0 -70
  116. flwr-1.15.2/src/py/flwr/proto/run_pb2.py +0 -64
  117. flwr-1.15.2/src/py/flwr/proto/task_pb2.py +0 -33
  118. flwr-1.15.2/src/py/flwr/proto/task_pb2.pyi +0 -100
  119. flwr-1.15.2/src/py/flwr/proto/task_pb2_grpc.py +0 -4
  120. flwr-1.15.2/src/py/flwr/proto/task_pb2_grpc.pyi +0 -4
  121. flwr-1.15.2/src/py/flwr/server/utils/validator.py +0 -108
  122. {flwr-1.15.2 → flwr-1.17.0}/LICENSE +0 -0
  123. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/__init__.py +0 -0
  124. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/__init__.py +0 -0
  125. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/app.py +0 -0
  126. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/auth_plugin/__init__.py +0 -0
  127. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
  128. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
  129. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/config_utils.py +0 -0
  130. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/constant.py +0 -0
  131. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/example.py +0 -0
  132. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/install.py +0 -0
  133. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/login/__init__.py +0 -0
  134. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/login/login.py +0 -0
  135. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/ls.py +0 -0
  136. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/__init__.py +0 -0
  137. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/new.py +0 -0
  138. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  139. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  140. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  141. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  142. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  143. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  144. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  145. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  146. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  147. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  148. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  149. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  150. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  151. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  152. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  153. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  154. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  155. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  156. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  157. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  158. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  159. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  160. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  161. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  162. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  163. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  164. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  165. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  166. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  167. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  168. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  169. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  170. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  171. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  172. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  173. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  174. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  175. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  176. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  177. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  178. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  179. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  180. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/run/__init__.py +0 -0
  181. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/stop.py +0 -0
  182. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/cli/utils.py +0 -0
  183. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/__init__.py +0 -0
  184. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/client.py +0 -0
  185. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/clientapp/__init__.py +0 -0
  186. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  187. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/clientapp/utils.py +0 -0
  188. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  189. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  190. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  191. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  192. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  193. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  194. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  195. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  196. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/heartbeat.py +0 -0
  197. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/message_handler/__init__.py +0 -0
  198. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  199. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  200. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/mod/utils.py +0 -0
  201. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/nodestate/__init__.py +0 -0
  202. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
  203. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/nodestate/nodestate.py +0 -0
  204. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/nodestate/nodestate_factory.py +0 -0
  205. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/numpy_client.py +0 -0
  206. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/rest_client/__init__.py +0 -0
  207. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/client/typing.py +0 -0
  208. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/auth_plugin/__init__.py +0 -0
  209. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/date.py +0 -0
  210. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/differential_privacy.py +0 -0
  211. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  212. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/dp.py +0 -0
  213. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/exit/__init__.py +0 -0
  214. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/exit/exit.py +0 -0
  215. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/exit/exit_code.py +0 -0
  216. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/exit_handlers.py +0 -0
  217. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/parameter.py +0 -0
  218. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/pyproject.py +0 -0
  219. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/record/typeddict.py +0 -0
  220. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/retry_invoker.py +0 -0
  221. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  222. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  223. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  224. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  225. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  226. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  227. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/common/version.py +0 -0
  228. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/__init__.py +0 -0
  229. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  230. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  231. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  232. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  233. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/error_pb2.py +0 -0
  234. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/error_pb2.pyi +0 -0
  235. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  236. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  237. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  238. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  239. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/fab_pb2.py +0 -0
  240. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  241. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  242. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  243. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/fleet_pb2.py +0 -0
  244. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  245. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  246. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  247. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  248. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  249. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  250. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  251. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/log_pb2.py +0 -0
  252. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/log_pb2.pyi +0 -0
  253. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
  254. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  255. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  256. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  257. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/node_pb2.py +0 -0
  258. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/node_pb2.pyi +0 -0
  259. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  260. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  261. /flwr-1.15.2/src/py/flwr/proto/recordset_pb2_grpc.py → /flwr-1.17.0/src/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  262. /flwr-1.15.2/src/py/flwr/proto/recordset_pb2_grpc.pyi → /flwr-1.17.0/src/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  263. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  264. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  265. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/serverappio_pb2.py +0 -0
  266. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
  267. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  268. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  269. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/simulationio_pb2.py +0 -0
  270. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
  271. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  272. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  273. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/transport_pb2.py +0 -0
  274. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  275. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  276. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  277. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/py.typed +0 -0
  278. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/client_manager.py +0 -0
  279. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/client_proxy.py +0 -0
  280. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/compat/legacy_context.py +0 -0
  281. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/criterion.py +0 -0
  282. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/history.py +0 -0
  283. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/server.py +0 -0
  284. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/server_config.py +0 -0
  285. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/serverapp/__init__.py +0 -0
  286. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/serverapp_components.py +0 -0
  287. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/__init__.py +0 -0
  288. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/aggregate.py +0 -0
  289. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/bulyan.py +0 -0
  290. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  291. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  292. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  293. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  294. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  295. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  296. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/fedadam.py +0 -0
  297. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/fedavg.py +0 -0
  298. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  299. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  300. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  301. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/fedopt.py +0 -0
  302. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/fedprox.py +0 -0
  303. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  304. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  305. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  306. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  307. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  308. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/krum.py +0 -0
  309. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  310. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/strategy/strategy.py +0 -0
  311. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/__init__.py +0 -0
  312. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  313. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  314. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  315. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  316. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  317. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  318. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  319. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  320. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  321. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  322. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  323. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  324. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  325. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  326. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  327. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  328. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  329. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  330. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  331. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  332. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  333. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
  334. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  335. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/superlink/utils.py +0 -0
  336. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/utils/tensorboard.py +0 -0
  337. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/workflow/__init__.py +0 -0
  338. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/workflow/constant.py +0 -0
  339. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  340. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  341. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/simulation/__init__.py +0 -0
  342. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/simulation/legacy_app.py +0 -0
  343. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  344. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  345. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/simulation/simulationio_connection.py +0 -0
  346. {flwr-1.15.2 → flwr-1.17.0}/src/py/flwr/superexec/__init__.py +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr
3
- Version: 1.15.2
3
+ Version: 1.17.0
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
7
7
  Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
8
8
  Author: The Flower Authors
9
9
  Author-email: hello@flower.ai
10
- Requires-Python: >=3.9,<4.0
10
+ Requires-Python: >=3.9.2,<4.0.0
11
11
  Classifier: Development Status :: 5 - Production/Stable
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: Intended Audience :: Science/Research
@@ -16,12 +16,12 @@ Classifier: Operating System :: MacOS :: MacOS X
16
16
  Classifier: Operating System :: POSIX :: Linux
17
17
  Classifier: Programming Language :: Python
18
18
  Classifier: Programming Language :: Python :: 3
19
- Classifier: Programming Language :: Python :: 3.9
20
19
  Classifier: Programming Language :: Python :: 3.10
21
20
  Classifier: Programming Language :: Python :: 3.11
22
21
  Classifier: Programming Language :: Python :: 3.12
23
22
  Classifier: Programming Language :: Python :: 3 :: Only
24
23
  Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Programming Language :: Python :: 3.9
25
25
  Classifier: Programming Language :: Python :: Implementation :: CPython
26
26
  Classifier: Topic :: Scientific/Engineering
27
27
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -32,7 +32,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
32
32
  Classifier: Typing :: Typed
33
33
  Provides-Extra: rest
34
34
  Provides-Extra: simulation
35
- Requires-Dist: cryptography (>=43.0.1,<44.0.0)
35
+ Requires-Dist: cryptography (>=44.0.1,<45.0.0)
36
36
  Requires-Dist: grpcio (>=1.62.3,<2.0.0,!=1.65.0)
37
37
  Requires-Dist: iterators (>=0.0.2,<0.0.3)
38
38
  Requires-Dist: numpy (>=1.26.0,<3.0.0)
@@ -63,7 +63,7 @@ Description-Content-Type: text/markdown
63
63
  <a href="https://flower.ai/">Website</a> |
64
64
  <a href="https://flower.ai/blog">Blog</a> |
65
65
  <a href="https://flower.ai/docs/">Docs</a> |
66
- <a href="https://flower.ai/conf/flower-summit-2022">Conference</a> |
66
+ <a href="https://flower.ai/events/flower-ai-summit-2025">Summit</a> |
67
67
  <a href="https://flower.ai/join-slack">Slack</a>
68
68
  <br /><br />
69
69
  </p>
@@ -9,7 +9,7 @@
9
9
  <a href="https://flower.ai/">Website</a> |
10
10
  <a href="https://flower.ai/blog">Blog</a> |
11
11
  <a href="https://flower.ai/docs/">Docs</a> |
12
- <a href="https://flower.ai/conf/flower-summit-2022">Conference</a> |
12
+ <a href="https://flower.ai/events/flower-ai-summit-2025">Summit</a> |
13
13
  <a href="https://flower.ai/join-slack">Slack</a>
14
14
  <br /><br />
15
15
  </p>
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr"
7
- version = "1.15.2"
7
+ version = "1.17.0"
8
8
  description = "Flower: A Friendly Federated AI Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -51,8 +51,6 @@ exclude = ["src/py/**/*_test.py"]
51
51
  [tool.poetry.scripts]
52
52
  # `flwr` CLI
53
53
  flwr = "flwr.cli.app:app"
54
- # SuperExec (can run with either Deployment Engine or Simulation Engine)
55
- flower-superexec = "flwr.superexec.app:run_superexec" # Deprecated
56
54
  # Simulation Engine
57
55
  flwr-simulation = "flwr.simulation.app:flwr_simulation"
58
56
  flower-simulation = "flwr.simulation.run_simulation:run_simulation_from_cli"
@@ -60,17 +58,15 @@ flower-simulation = "flwr.simulation.run_simulation:run_simulation_from_cli"
60
58
  flower-superlink = "flwr.server.app:run_superlink"
61
59
  flower-supernode = "flwr.client.supernode.app:run_supernode"
62
60
  flwr-serverapp = "flwr.server.serverapp:flwr_serverapp"
63
- flower-server-app = "flwr.server.run_serverapp:run_server_app" # Deprecated
64
61
  flwr-clientapp = "flwr.client.clientapp:flwr_clientapp"
65
- flower-client-app = "flwr.client.supernode:run_client_app" # Deprecated
66
62
 
67
63
  [tool.poetry.dependencies]
68
- python = "^3.9"
64
+ python = "^3.9.2"
69
65
  # Mandatory dependencies
70
66
  numpy = ">=1.26.0,<3.0.0"
71
67
  grpcio = "^1.62.3,!=1.65.0"
72
68
  protobuf = "^4.21.6"
73
- cryptography = "^43.0.1"
69
+ cryptography = "^44.0.1"
74
70
  pycryptodome = "^3.18.0"
75
71
  iterators = "^0.0.2"
76
72
  typer = "^0.12.5"
@@ -150,6 +146,10 @@ extend_exclude = [
150
146
  "framework/docs/source/tutorial-quickstart-huggingface.rst",
151
147
  "framework/docs/source/_templates/autosummary/*",
152
148
  "framework/docs/source/ref-api/*",
149
+ "intelligence/docs/source/ts-ref-api/*",
150
+ "intelligence/docs/source/swift-ref-api/*",
151
+ "intelligence/docs/source/_templates/autosummary/*",
152
+ "intelligence/docs/source/conf.py",
153
153
  ]
154
154
 
155
155
  [tool.isort]
@@ -138,6 +138,8 @@ def build(
138
138
  and f.name != "pyproject.toml" # Exclude the original pyproject.toml
139
139
  ]
140
140
 
141
+ all_files.sort()
142
+
141
143
  for file_path in all_files:
142
144
  # Read the file content manually
143
145
  with open(file_path, "rb") as f:
@@ -38,6 +38,10 @@ from flwr.proto.exec_pb2_grpc import ExecStub
38
38
  from .utils import init_channel, try_obtain_cli_auth_plugin, unauthenticated_exc_handler
39
39
 
40
40
 
41
+ class AllLogsRetrieved(BaseException):
42
+ """Raised when all logs are retrieved."""
43
+
44
+
41
45
  def start_stream(
42
46
  run_id: int, channel: grpc.Channel, refresh_period: int = CONN_REFRESH_PERIOD
43
47
  ) -> None:
@@ -56,10 +60,10 @@ def start_stream(
56
60
  # pylint: disable=E1101
57
61
  if e.code() == grpc.StatusCode.NOT_FOUND:
58
62
  logger(ERROR, "Invalid run_id `%s`, exiting", run_id)
59
- if e.code() == grpc.StatusCode.CANCELLED:
60
- pass
61
63
  else:
62
64
  raise e
65
+ except AllLogsRetrieved:
66
+ pass
63
67
  finally:
64
68
  channel.close()
65
69
 
@@ -94,6 +98,7 @@ def stream_logs(
94
98
  with unauthenticated_exc_handler():
95
99
  for res in stub.StreamLogs(req, timeout=duration):
96
100
  print(res.log_output, end="")
101
+ raise AllLogsRetrieved()
97
102
  except grpc.RpcError as e:
98
103
  # pylint: disable=E1101
99
104
  if e.code() != grpc.StatusCode.DEADLINE_EXCEEDED:
@@ -108,27 +113,21 @@ def stream_logs(
108
113
  def print_logs(run_id: int, channel: grpc.Channel, timeout: int) -> None:
109
114
  """Print logs from the beginning of a run."""
110
115
  stub = ExecStub(channel)
111
- req = StreamLogsRequest(run_id=run_id)
116
+ req = StreamLogsRequest(run_id=run_id, after_timestamp=0.0)
112
117
 
113
118
  try:
114
- while True:
115
- try:
116
- with unauthenticated_exc_handler():
117
- # Enforce timeout for graceful exit
118
- for res in stub.StreamLogs(req, timeout=timeout):
119
- print(res.log_output)
120
- except grpc.RpcError as e:
121
- # pylint: disable=E1101
122
- if e.code() == grpc.StatusCode.DEADLINE_EXCEEDED:
123
- break
124
- if e.code() == grpc.StatusCode.NOT_FOUND:
125
- logger(ERROR, "Invalid run_id `%s`, exiting", run_id)
126
- break
127
- if e.code() == grpc.StatusCode.CANCELLED:
128
- break
129
- raise e
130
- except KeyboardInterrupt:
131
- logger(DEBUG, "Stream interrupted by user")
119
+ with unauthenticated_exc_handler():
120
+ # Enforce timeout for graceful exit
121
+ for res in stub.StreamLogs(req, timeout=timeout):
122
+ print(res.log_output)
123
+ break
124
+ except grpc.RpcError as e:
125
+ if e.code() == grpc.StatusCode.NOT_FOUND: # pylint: disable=E1101
126
+ logger(ERROR, "Invalid run_id `%s`, exiting", run_id)
127
+ elif e.code() == grpc.StatusCode.DEADLINE_EXCEEDED: # pylint: disable=E1101
128
+ pass
129
+ else:
130
+ raise e
132
131
  finally:
133
132
  channel.close()
134
133
  logger(DEBUG, "Channel closed")
@@ -35,7 +35,7 @@ warnings.filterwarnings("ignore", category=UserWarning)
35
35
  # pylint: disable=too-many-arguments
36
36
  # pylint: disable=too-many-instance-attributes
37
37
  class FlowerClient(NumPyClient):
38
- """Standard Flower client for CNN training."""
38
+ """Flower client for LLM fine-tuning."""
39
39
 
40
40
  def __init__(
41
41
  self,
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.15.2",
11
+ "flwr[simulation]>=1.17.0",
12
12
  "flwr-datasets[vision]>=0.5.0",
13
13
  "torch==2.5.1",
14
14
  "torchvision==0.20.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.15.2",
11
+ "flwr[simulation]>=1.17.0",
12
12
  "flwr-datasets>=0.5.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.15.2",
11
+ "flwr[simulation]>=1.17.0",
12
12
  "flwr-datasets>=0.5.0",
13
13
  "torch==2.5.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.15.2",
11
+ "flwr[simulation]>=1.17.0",
12
12
  "jax==0.4.30",
13
13
  "jaxlib==0.4.30",
14
14
  "scikit-learn==1.6.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.15.2",
11
+ "flwr[simulation]>=1.17.0",
12
12
  "flwr-datasets[vision]>=0.5.0",
13
13
  "mlx==0.21.1",
14
14
  ]
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.15.2",
11
+ "flwr[simulation]>=1.17.0",
12
12
  "numpy>=2.0.2",
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.15.2",
11
+ "flwr[simulation]>=1.17.0",
12
12
  "flwr-datasets[vision]>=0.5.0",
13
13
  "torch==2.5.1",
14
14
  "torchvision==0.20.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.15.2",
11
+ "flwr[simulation]>=1.17.0",
12
12
  "flwr-datasets[vision]>=0.5.0",
13
13
  "scikit-learn>=1.6.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.15.2",
11
+ "flwr[simulation]>=1.17.0",
12
12
  "flwr-datasets[vision]>=0.5.0",
13
13
  "tensorflow>=2.11.1,<2.18.0",
14
14
  ]
@@ -35,15 +35,11 @@ from flwr.cli.constant import FEDERATION_CONFIG_HELP_MESSAGE
35
35
  from flwr.common.config import (
36
36
  flatten_dict,
37
37
  parse_config_args,
38
- user_config_to_configsrecord,
38
+ user_config_to_configrecord,
39
39
  )
40
40
  from flwr.common.constant import CliOutputFormat
41
41
  from flwr.common.logger import print_json_error, redirect_output, restore_output
42
- from flwr.common.serde import (
43
- configs_record_to_proto,
44
- fab_to_proto,
45
- user_config_to_proto,
46
- )
42
+ from flwr.common.serde import config_record_to_proto, fab_to_proto, user_config_to_proto
47
43
  from flwr.common.typing import Fab
48
44
  from flwr.proto.exec_pb2 import StartRunRequest # pylint: disable=E0611
49
45
  from flwr.proto.exec_pb2_grpc import ExecStub
@@ -171,14 +167,14 @@ def _run_with_exec_api(
171
167
 
172
168
  fab = Fab(fab_hash, content)
173
169
 
174
- # Construct a `ConfigsRecord` out of a flattened `UserConfig`
170
+ # Construct a `ConfigRecord` out of a flattened `UserConfig`
175
171
  fed_conf = flatten_dict(federation_config.get("options", {}))
176
- c_record = user_config_to_configsrecord(fed_conf)
172
+ c_record = user_config_to_configrecord(fed_conf)
177
173
 
178
174
  req = StartRunRequest(
179
175
  fab=fab_to_proto(fab),
180
176
  override_config=user_config_to_proto(parse_config_args(config_overrides)),
181
- federation_options=configs_record_to_proto(c_record),
177
+ federation_options=config_record_to_proto(c_record),
182
178
  )
183
179
  with unauthenticated_exc_handler():
184
180
  res = stub.StartRun(req)
@@ -495,8 +495,9 @@ def start_client_internal(
495
495
  context = run_info_store.retrieve_context(run_id=run_id)
496
496
  # Create an error reply message that will never be used to prevent
497
497
  # the used-before-assignment linting error
498
- reply_message = message.create_error_reply(
499
- error=Error(code=ErrorCode.UNKNOWN, reason="Unknown")
498
+ reply_message = Message(
499
+ Error(code=ErrorCode.UNKNOWN, reason="Unknown"),
500
+ reply_to=message,
500
501
  )
501
502
 
502
503
  # Handle app loading and task message
@@ -593,8 +594,9 @@ def start_client_internal(
593
594
  log(ERROR, "%s raised an exception", exc_entity, exc_info=ex)
594
595
 
595
596
  # Create error message
596
- reply_message = message.create_error_reply(
597
- error=Error(code=e_code, reason=reason)
597
+ reply_message = Message(
598
+ Error(code=e_code, reason=reason),
599
+ reply_to=message,
598
600
  )
599
601
  else:
600
602
  # No exception, update node state