flwr-nightly 1.10.0.dev20240722__py3-none-any.whl → 1.11.0.dev20240724__py3-none-any.whl

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 (49) hide show
  1. flwr/cli/config_utils.py +13 -15
  2. flwr/cli/new/new.py +1 -1
  3. flwr/cli/new/templates/app/code/{client.hf.py.tpl → client.huggingface.py.tpl} +7 -5
  4. flwr/cli/new/templates/app/code/client.mlx.py.tpl +28 -10
  5. flwr/cli/new/templates/app/code/client.pytorch.py.tpl +7 -5
  6. flwr/cli/new/templates/app/code/client.sklearn.py.tpl +2 -2
  7. flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +17 -7
  8. flwr/cli/new/templates/app/code/flwr_tune/app.py.tpl +20 -17
  9. flwr/cli/new/templates/app/code/flwr_tune/client.py.tpl +5 -3
  10. flwr/cli/new/templates/app/code/{server.hf.py.tpl → server.huggingface.py.tpl} +2 -1
  11. flwr/cli/new/templates/app/code/server.jax.py.tpl +2 -1
  12. flwr/cli/new/templates/app/code/server.mlx.py.tpl +2 -1
  13. flwr/cli/new/templates/app/code/server.numpy.py.tpl +2 -1
  14. flwr/cli/new/templates/app/code/server.pytorch.py.tpl +1 -1
  15. flwr/cli/new/templates/app/code/server.sklearn.py.tpl +2 -1
  16. flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +1 -1
  17. flwr/cli/new/templates/app/code/{task.hf.py.tpl → task.huggingface.py.tpl} +13 -1
  18. flwr/cli/new/templates/app/code/task.mlx.py.tpl +13 -1
  19. flwr/cli/new/templates/app/code/task.pytorch.py.tpl +13 -2
  20. flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +13 -1
  21. flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +3 -3
  22. flwr/cli/new/templates/app/{pyproject.hf.toml.tpl → pyproject.huggingface.toml.tpl} +2 -2
  23. flwr/cli/new/templates/app/pyproject.jax.toml.tpl +3 -3
  24. flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +8 -8
  25. flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +3 -3
  26. flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +4 -4
  27. flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +3 -3
  28. flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +6 -6
  29. flwr/cli/run/run.py +31 -27
  30. flwr/client/supernode/app.py +12 -43
  31. flwr/common/config.py +6 -1
  32. flwr/common/object_ref.py +84 -21
  33. flwr/proto/exec_pb2.py +16 -12
  34. flwr/proto/exec_pb2.pyi +20 -1
  35. flwr/server/run_serverapp.py +0 -3
  36. flwr/server/superlink/fleet/vce/backend/__init__.py +1 -1
  37. flwr/server/superlink/fleet/vce/vce_api.py +4 -4
  38. flwr/simulation/__init__.py +1 -1
  39. flwr/simulation/run_simulation.py +32 -4
  40. flwr/superexec/app.py +4 -5
  41. flwr/superexec/deployment.py +1 -2
  42. flwr/superexec/exec_servicer.py +3 -1
  43. flwr/superexec/executor.py +3 -0
  44. flwr/superexec/simulation.py +39 -9
  45. {flwr_nightly-1.10.0.dev20240722.dist-info → flwr_nightly-1.11.0.dev20240724.dist-info}/METADATA +1 -1
  46. {flwr_nightly-1.10.0.dev20240722.dist-info → flwr_nightly-1.11.0.dev20240724.dist-info}/RECORD +49 -49
  47. {flwr_nightly-1.10.0.dev20240722.dist-info → flwr_nightly-1.11.0.dev20240724.dist-info}/LICENSE +0 -0
  48. {flwr_nightly-1.10.0.dev20240722.dist-info → flwr_nightly-1.11.0.dev20240724.dist-info}/WHEEL +0 -0
  49. {flwr_nightly-1.10.0.dev20240722.dist-info → flwr_nightly-1.11.0.dev20240724.dist-info}/entry_points.txt +0 -0
@@ -32,7 +32,11 @@ from flwr.client import ClientApp
32
32
  from flwr.common import EventType, event, log
33
33
  from flwr.common.config import get_fused_config_from_dir, parse_config_args
34
34
  from flwr.common.constant import RUN_ID_NUM_BYTES
35
- from flwr.common.logger import set_logger_propagation, update_console_handler
35
+ from flwr.common.logger import (
36
+ set_logger_propagation,
37
+ update_console_handler,
38
+ warn_deprecated_feature_with_example,
39
+ )
36
40
  from flwr.common.typing import Run, UserConfig
37
41
  from flwr.server.driver import Driver, InMemoryDriver
38
42
  from flwr.server.run_serverapp import run as run_server_app
@@ -93,6 +97,14 @@ def run_simulation_from_cli() -> None:
93
97
  """Run Simulation Engine from the CLI."""
94
98
  args = _parse_args_run_simulation().parse_args()
95
99
 
100
+ if args.enable_tf_gpu_growth:
101
+ warn_deprecated_feature_with_example(
102
+ "Passing `--enable-tf-gpu-growth` is deprecated.",
103
+ example_message="Instead, set the `TF_FORCE_GPU_ALLOW_GROWTH` environmnet "
104
+ "variable to true.",
105
+ code_example='TF_FORCE_GPU_ALLOW_GROWTH="true" flower-simulation <...>',
106
+ )
107
+
96
108
  # We are supporting two modes for the CLI entrypoint:
97
109
  # 1) Running an app dir containing a `pyproject.toml`
98
110
  # 2) Running any ClientApp and SeverApp w/o pyproject.toml being present
@@ -223,6 +235,15 @@ def run_simulation(
223
235
  When disabled, only INFO, WARNING and ERROR log messages will be shown. If
224
236
  enabled, DEBUG-level logs will be displayed.
225
237
  """
238
+ if enable_tf_gpu_growth:
239
+ warn_deprecated_feature_with_example(
240
+ "Passing `enable_tf_gpu_growth=True` is deprecated.",
241
+ example_message="Instead, set the `TF_FORCE_GPU_ALLOW_GROWTH` environmnet "
242
+ "variable to true.",
243
+ code_example='import os;os.environ["TF_FORCE_GPU_ALLOW_GROWTH"]="true"'
244
+ "\n\tflwr.simulation.run_simulationt(...)",
245
+ )
246
+
226
247
  _run_simulation(
227
248
  num_supernodes=num_supernodes,
228
249
  client_app=client_app,
@@ -264,7 +285,7 @@ def run_serverapp_th(
264
285
  """
265
286
  try:
266
287
  if tf_gpu_growth:
267
- log(INFO, "Enabling GPU growth for Tensorflow on the main thread.")
288
+ log(INFO, "Enabling GPU growth for Tensorflow on the server thread.")
268
289
  enable_gpu_growth()
269
290
 
270
291
  # Run ServerApp
@@ -475,6 +496,14 @@ def _run_simulation(
475
496
  if "init_args" not in backend_config:
476
497
  backend_config["init_args"] = {}
477
498
 
499
+ # Set default client_resources if not passed
500
+ if "client_resources" not in backend_config:
501
+ backend_config["client_resources"] = {"num_cpus": 2, "num_gpus": 0}
502
+
503
+ # Initialization of backend config to enable GPU growth globally when set
504
+ if "actor" not in backend_config:
505
+ backend_config["actor"] = {"tensorflow": 0}
506
+
478
507
  # Set logging level
479
508
  logger = logging.getLogger("flwr")
480
509
  if verbose_logging:
@@ -580,8 +609,7 @@ def _parse_args_run_simulation() -> argparse.ArgumentParser:
580
609
  parser.add_argument(
581
610
  "--backend-config",
582
611
  type=str,
583
- default='{"client_resources": {"num_cpus":2, "num_gpus":0.0},'
584
- '"actor": {"tensorflow": 0}}',
612
+ default="{}",
585
613
  help='A JSON formatted stream, e.g \'{"<keyA>":<value>, "<keyB>":<value>}\' to '
586
614
  "configure a backend. Values supported in <value> are those included by "
587
615
  "`flwr.common.typing.ConfigsRecordValues`. ",
flwr/superexec/app.py CHANGED
@@ -93,7 +93,9 @@ def _parse_args_run_superexec() -> argparse.ArgumentParser:
93
93
  )
94
94
  parser.add_argument(
95
95
  "--executor-config",
96
- help="Key-value pairs for the executor config, separated by commas.",
96
+ help="Key-value pairs for the executor config, separated by commas. "
97
+ 'For example:\n\n`--executor-config superlink="superlink:9091",'
98
+ 'root-certificates="certificates/superlink-ca.crt"`',
97
99
  )
98
100
  parser.add_argument(
99
101
  "--insecure",
@@ -163,11 +165,8 @@ def _load_executor(
163
165
  args: argparse.Namespace,
164
166
  ) -> Executor:
165
167
  """Get the executor plugin."""
166
- if args.executor_dir is not None:
167
- sys.path.insert(0, args.executor_dir)
168
-
169
168
  executor_ref: str = args.executor
170
- valid, error_msg = validate(executor_ref)
169
+ valid, error_msg = validate(executor_ref, project_dir=args.executor_dir)
171
170
  if not valid and error_msg:
172
171
  raise LoadExecutorError(error_msg) from None
173
172
 
@@ -135,6 +135,7 @@ class DeploymentEngine(Executor):
135
135
  self,
136
136
  fab_file: bytes,
137
137
  override_config: UserConfig,
138
+ federation_config: UserConfig,
138
139
  ) -> Optional[RunTracker]:
139
140
  """Start run using the Flower Deployment Engine."""
140
141
  try:
@@ -167,8 +168,6 @@ class DeploymentEngine(Executor):
167
168
  # Execute the command
168
169
  proc = subprocess.Popen( # pylint: disable=consider-using-with
169
170
  command,
170
- stdout=subprocess.PIPE,
171
- stderr=subprocess.PIPE,
172
171
  text=True,
173
172
  )
174
173
  log(INFO, "Started run %s", str(run_id))
@@ -47,7 +47,9 @@ class ExecServicer(exec_pb2_grpc.ExecServicer):
47
47
  log(INFO, "ExecServicer.StartRun")
48
48
 
49
49
  run = self.executor.start_run(
50
- request.fab_file, user_config_from_proto(request.override_config)
50
+ request.fab_file,
51
+ user_config_from_proto(request.override_config),
52
+ user_config_from_proto(request.federation_config),
51
53
  )
52
54
 
53
55
  if run is None:
@@ -51,6 +51,7 @@ class Executor(ABC):
51
51
  self,
52
52
  fab_file: bytes,
53
53
  override_config: UserConfig,
54
+ federation_config: UserConfig,
54
55
  ) -> Optional[RunTracker]:
55
56
  """Start a run using the given Flower FAB ID and version.
56
57
 
@@ -63,6 +64,8 @@ class Executor(ABC):
63
64
  The Flower App Bundle file bytes.
64
65
  override_config: UserConfig
65
66
  The config overrides dict sent by the user (using `flwr run`).
67
+ federation_config: UserConfig
68
+ The federation options dict sent by the user (using `flwr run`).
66
69
 
67
70
  Returns
68
71
  -------
@@ -32,6 +32,25 @@ from flwr.server.superlink.state.utils import generate_rand_int_from_bytes
32
32
  from .executor import Executor, RunTracker
33
33
 
34
34
 
35
+ def _user_config_to_str(user_config: UserConfig) -> str:
36
+ """Convert override user config to string."""
37
+ user_config_list_str = []
38
+ for key, value in user_config.items():
39
+ if isinstance(value, bool):
40
+ user_config_list_str.append(f"{key}={str(value).lower()}")
41
+ elif isinstance(value, (int, float)):
42
+ user_config_list_str.append(f"{key}={value}")
43
+ elif isinstance(value, str):
44
+ user_config_list_str.append(f'{key}="{value}"')
45
+ else:
46
+ raise ValueError(
47
+ "Only types `bool`, `float`, `int` and `str` are supported"
48
+ )
49
+
50
+ user_config_str = ",".join(user_config_list_str)
51
+ return user_config_str
52
+
53
+
35
54
  class SimulationEngine(Executor):
36
55
  """Simulation engine executor.
37
56
 
@@ -62,13 +81,11 @@ class SimulationEngine(Executor):
62
81
  - "num-supernodes": int
63
82
  Number of nodes to register for the simulation.
64
83
  """
65
- if not config:
66
- return
67
84
  if num_supernodes := config.get("num-supernodes"):
68
85
  if not isinstance(num_supernodes, int):
69
86
  raise ValueError("The `num-supernodes` value should be of type `int`.")
70
87
  self.num_supernodes = num_supernodes
71
- else:
88
+ elif self.num_supernodes is None:
72
89
  log(
73
90
  ERROR,
74
91
  "To start a run with the simulation plugin, please specify "
@@ -82,9 +99,22 @@ class SimulationEngine(Executor):
82
99
 
83
100
  @override
84
101
  def start_run(
85
- self, fab_file: bytes, override_config: UserConfig
102
+ self,
103
+ fab_file: bytes,
104
+ override_config: UserConfig,
105
+ federation_config: UserConfig,
86
106
  ) -> Optional[RunTracker]:
87
107
  """Start run using the Flower Simulation Engine."""
108
+ if self.num_supernodes is None:
109
+ raise ValueError(
110
+ "Error in `SuperExec` (`SimulationEngine` executor):\n\n"
111
+ "`num-supernodes` must not be `None`, it must be a valid "
112
+ "positive integer. In order to start this simulation executor "
113
+ "with a specified number of `SuperNodes`, you can either provide "
114
+ "a `--executor` that has been initialized with a number of nodes "
115
+ "to the `flower-superexec` CLI, or `--executor-config num-supernodes=N`"
116
+ "to the `flower-superexec` CLI."
117
+ )
88
118
  try:
89
119
 
90
120
  # Install FAB to flwr dir
@@ -120,18 +150,18 @@ class SimulationEngine(Executor):
120
150
  "--app",
121
151
  f"{str(fab_path)}",
122
152
  "--num-supernodes",
123
- f"{self.num_supernodes}",
153
+ f"{federation_config.get('num-supernodes', self.num_supernodes)}",
124
154
  "--run-id",
125
155
  str(run_id),
126
156
  ]
127
157
 
128
158
  if override_config:
129
- command.extend(["--run-config", f"{override_config}"])
159
+ override_config_str = _user_config_to_str(override_config)
160
+ command.extend(["--run-config", f"{override_config_str}"])
130
161
 
131
162
  # Start Simulation
132
- proc = subprocess.run( # pylint: disable=consider-using-with
163
+ proc = subprocess.Popen( # pylint: disable=consider-using-with
133
164
  command,
134
- check=True,
135
165
  text=True,
136
166
  )
137
167
 
@@ -139,7 +169,7 @@ class SimulationEngine(Executor):
139
169
 
140
170
  return RunTracker(
141
171
  run_id=run_id,
142
- proc=proc, # type:ignore
172
+ proc=proc,
143
173
  )
144
174
 
145
175
  # pylint: disable-next=broad-except
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.10.0.dev20240722
3
+ Version: 1.11.0.dev20240724
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -2,11 +2,11 @@ flwr/__init__.py,sha256=VmBWedrCxqmt4QvUHBLqyVEH6p7zaFMD_oCHerXHSVw,937
2
2
  flwr/cli/__init__.py,sha256=cZJVgozlkC6Ni2Hd_FAIrqefrkCGOV18fikToq-6iLw,720
3
3
  flwr/cli/app.py,sha256=FBcSrE35ll88VE11ib67qgsJe2GYDN25UswV9-cYcX8,1267
4
4
  flwr/cli/build.py,sha256=5igi2013fLH-TlR6MNpbxNEMaVqdBbts-E-WdY3JPsE,5167
5
- flwr/cli/config_utils.py,sha256=sw4RLqrDrezaOv3tf5HYu_vgD5ANsbYB-_4XoTCYDt0,6998
5
+ flwr/cli/config_utils.py,sha256=kSgAMA4KE2SEKmfKLEvMcYQVdT8fTEnX5JTq2t04wGM,7057
6
6
  flwr/cli/example.py,sha256=1bGDYll3BXQY2kRqSN-oICqS5n1b9m0g0RvXTopXHl4,2215
7
7
  flwr/cli/install.py,sha256=AI6Zv2dQVDHpLDX1Z_vX5XHVxmZo1OU3ndCSrD2stzQ,7059
8
8
  flwr/cli/new/__init__.py,sha256=cQzK1WH4JP2awef1t2UQ2xjl1agVEz9rwutV18SWV1k,789
9
- flwr/cli/new/new.py,sha256=gUz0qiqDyVrb107pDnBAJwYhWcQXM3K4a533KXhsYxI,9614
9
+ flwr/cli/new/new.py,sha256=LIUAIxhqc04rxl8sOr-9JbUlOWNiHf6UUpiDQD1hH-s,9623
10
10
  flwr/cli/new/templates/__init__.py,sha256=4luU8RL-CK8JJCstQ_ON809W9bNTkY1l9zSaPKBkgwY,725
11
11
  flwr/cli/new/templates/app/.gitignore.tpl,sha256=XixnHdyeMB2vwkGtGnwHqoWpH-9WChdyG0GXe57duhc,3078
12
12
  flwr/cli/new/templates/app/README.flowertune.md.tpl,sha256=PqzkGm0g6Zy-vZK9_0EO3f_U6g1r69lGc4UL8kds5Q8,2696
@@ -14,43 +14,43 @@ flwr/cli/new/templates/app/README.md.tpl,sha256=_qGtgpKYKoCJVjQnvlBMKvFs_1gzTcL9
14
14
  flwr/cli/new/templates/app/__init__.py,sha256=DU7QMY7IhMQyuwm_tja66xU0KXTWQFqzfTqwg-_NJdE,729
15
15
  flwr/cli/new/templates/app/code/__init__.py,sha256=EM6vfvgAILKPaPn7H1wMV1Wi01WyZCP_Eg6NxD6oWg8,736
16
16
  flwr/cli/new/templates/app/code/__init__.py.tpl,sha256=olwrBeJemHNBWvjc6gJURloFRqW40dAy7FRQA5pDqHU,21
17
- flwr/cli/new/templates/app/code/client.hf.py.tpl,sha256=_x-V6EcSgX2nPo-0ODHaKFgt9n_aONNrWpkbQPrTxE0,1727
17
+ flwr/cli/new/templates/app/code/client.huggingface.py.tpl,sha256=gELeNHzJQLMhBIMxnW7rqKGHf-jE9oLMWA2-UesVCao,1813
18
18
  flwr/cli/new/templates/app/code/client.jax.py.tpl,sha256=i_SZykD42vqEvv2ZyX655szuikXJXLc6uV1T-LWiYLU,1479
19
- flwr/cli/new/templates/app/code/client.mlx.py.tpl,sha256=rrRXIU-jrx4FuzbMjqlMCrWi9ctEmtI9UCwol-U0oPg,2513
19
+ flwr/cli/new/templates/app/code/client.mlx.py.tpl,sha256=2NBg3Q7siU-SsReTMZ6W1VwcuVImaxH7L2r1AkSJyYQ,2895
20
20
  flwr/cli/new/templates/app/code/client.numpy.py.tpl,sha256=ov9mtWJGjaQ9ZVlQ5jsuCjHDeETf13GFla5jbP3KimE,561
21
- flwr/cli/new/templates/app/code/client.pytorch.py.tpl,sha256=CJXi89YbOEirevOSy-VmfCpN59vV5Q3iM2TwCTgWkGc,1472
22
- flwr/cli/new/templates/app/code/client.sklearn.py.tpl,sha256=44NQwBGHT1hTunUXQIvmv1EWDvKLw4Z40J1QnFRqIao,2986
23
- flwr/cli/new/templates/app/code/client.tensorflow.py.tpl,sha256=Rb0St2Hp-ftQyYR_Ao6okT8lkiQto76M66fp_y3Etgo,1664
21
+ flwr/cli/new/templates/app/code/client.pytorch.py.tpl,sha256=-Q41F1fqt_RzqM_C3qA-dKl4AoRev9jZq-pFo7LCaVU,1558
22
+ flwr/cli/new/templates/app/code/client.sklearn.py.tpl,sha256=9JUQc_qAoo7dizeAhaHC_Ml06dYtEIxHZrCNxl5xTDs,2976
23
+ flwr/cli/new/templates/app/code/client.tensorflow.py.tpl,sha256=yIK9nE5YUaidM5YPtlfBbfMBSYDp-h7adjmT599TtR8,1891
24
24
  flwr/cli/new/templates/app/code/flwr_tune/__init__.py,sha256=JgNgBtKdm1jKM9625WxappCAVUGtYAmcjKSsXJ1u3ZQ,748
25
- flwr/cli/new/templates/app/code/flwr_tune/app.py.tpl,sha256=p5ImtKbFXw3x64n9xehvMwqXUmjLcwYfUPvRqKK2owU,2655
26
- flwr/cli/new/templates/app/code/flwr_tune/client.py.tpl,sha256=MvQ5tt1r7CBUR8y-nBcZs4as2m1YimxegLYw_nHmXzc,4048
25
+ flwr/cli/new/templates/app/code/flwr_tune/app.py.tpl,sha256=LOtmEYYayMCpF4rJRdo059n5w_cZRmzyuEkCN2qpTyQ,2826
26
+ flwr/cli/new/templates/app/code/flwr_tune/client.py.tpl,sha256=3s41XYHRvmcLhyA60tZyGCNK2wxo2shl6mwmPfZANlA,4155
27
27
  flwr/cli/new/templates/app/code/flwr_tune/config.yaml.tpl,sha256=aPjrwFU020tPkJmOjzSUjb9dSi2bhs4ZTMEyd0uRlCA,867
28
28
  flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl,sha256=kPG4AIXQfNNHZGYC3amet3ttI23N72N6jjoDkp_wYIA,2028
29
29
  flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl,sha256=cEq9ZWM3zImJVceNtxHC_bYBLE8OChK0BdjpWs5Wz-0,1881
30
30
  flwr/cli/new/templates/app/code/flwr_tune/server.py.tpl,sha256=tz4hgAGV6pn5cOFW10ELRNRsUzLBSssHxrH_gSs_jtk,1552
31
31
  flwr/cli/new/templates/app/code/flwr_tune/static_config.yaml.tpl,sha256=cBPpBVN_N7p4T2a3rqChlngmE0dB_jveOLHesNcEHvs,268
32
- flwr/cli/new/templates/app/code/server.hf.py.tpl,sha256=oYJpB0Y_F6nSgelf7NQ1BWZxxW5E6rBrQVmIQNQUPfc,605
33
- flwr/cli/new/templates/app/code/server.jax.py.tpl,sha256=z9q6AHu_1vMRBVMlnDshPScV6GPTBdwuV49L5ekDVAI,522
34
- flwr/cli/new/templates/app/code/server.mlx.py.tpl,sha256=2C4KeLiJMr2fQaXHXdpTf6fpHpeMRv4JWpxQJy_VI20,522
35
- flwr/cli/new/templates/app/code/server.numpy.py.tpl,sha256=MYXAJDIDw5mRLSG-B3trJZoC3krPPWpvinYHeiUbAmA,524
36
- flwr/cli/new/templates/app/code/server.pytorch.py.tpl,sha256=lBNcTJL01x90bjQ2ITv_pMFzzSSd1Pboy-72h7ejRk4,839
37
- flwr/cli/new/templates/app/code/server.sklearn.py.tpl,sha256=1Zg0SNqLEGryCjhCs9hUNGIVWUQgmxVz4ImE8utH_Ck,626
38
- flwr/cli/new/templates/app/code/server.tensorflow.py.tpl,sha256=IRhPa0JzlmAs8j55h2mp2VeT6tNXoRkmpNL7kBlaK5c,857
39
- flwr/cli/new/templates/app/code/task.hf.py.tpl,sha256=B5CrA7L5PSOWnluYoAAL7LCeKvP8t-Rhwt6t2ZTYP3g,2873
32
+ flwr/cli/new/templates/app/code/server.huggingface.py.tpl,sha256=r-sO6W-K-apf3byEQDh70ANHfPwsRgArJgTuctFFBi4,601
33
+ flwr/cli/new/templates/app/code/server.jax.py.tpl,sha256=hg6GrJu4B1Lifc-WyZq9vb3c5FnrTjkz3rdr3HxrJwo,518
34
+ flwr/cli/new/templates/app/code/server.mlx.py.tpl,sha256=qyo_Nla-AVC1Yf7sJJ-xlOHLLE7e0FRNkWcoltB68ag,518
35
+ flwr/cli/new/templates/app/code/server.numpy.py.tpl,sha256=R_-xdu9eEvrN_lhyqK4akSCQaj7sPP4QIACZkUZ7Ihw,520
36
+ flwr/cli/new/templates/app/code/server.pytorch.py.tpl,sha256=FH6jQsUliJueMVzXlrvr1aFwXWq6Mp_6jjmNbolkEcA,834
37
+ flwr/cli/new/templates/app/code/server.sklearn.py.tpl,sha256=blkpvISjmPNOaJCyZf5Ezrg8VyxXdHUzxb3vMxcD3Lg,622
38
+ flwr/cli/new/templates/app/code/server.tensorflow.py.tpl,sha256=LGQaVsfo5rVzgiFTew0z3O6AVwIoDG5rdobnwMpb1yE,852
39
+ flwr/cli/new/templates/app/code/task.huggingface.py.tpl,sha256=jiCZobChVJkm9OomI9_Q0bCsdGfXMgVh5bY_OulsLMk,3163
40
40
  flwr/cli/new/templates/app/code/task.jax.py.tpl,sha256=u4o3V019EH79szOw2xzVeC5r9xgQiayPi9ZTIopV2TA,1519
41
- flwr/cli/new/templates/app/code/task.mlx.py.tpl,sha256=nrfZ1aGOs_ayb70j7XdAmwFYa-rN10d9GIMIKLzctUE,2614
42
- flwr/cli/new/templates/app/code/task.pytorch.py.tpl,sha256=TU4uNtJ9wtxeVvoHD3_K89EFWmrIvdECdASzRX-4Uvk,3694
43
- flwr/cli/new/templates/app/code/task.tensorflow.py.tpl,sha256=cPOUUS07QbblT9PGFucwu9lY1clRA4-W4DQGA7cpcao,1044
44
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=XBcU_XPYt7GecNjeBmD915fZGsF189QMb_IzFl4ATTA,777
45
- flwr/cli/new/templates/app/pyproject.hf.toml.tpl,sha256=T9LczlVvebZv10YHPi5Yd1K_MGen7kj6QEkGych7nmU,780
46
- flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=fbVZTD5mYghFWpS3nFjHjqBTbD9VzEbnn1HTdznRUWU,651
47
- flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=ztZC5kQhjzVUUnvlfhOPebn1dx9QJOHRP4JARuZ_5EQ,750
48
- flwr/cli/new/templates/app/pyproject.numpy.toml.tpl,sha256=5KiJUl6gm7rmW4xIBgF5qK5s2YMnMkouHBdOHuWUmcw,604
49
- flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=Ur0D2S98AnoiVcy_pTQnxSuLssioQe6yzGWQ1rLkTU8,692
50
- flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=lOi7R32xbO6MF5_BF6-bUbjWoC_z3XtJhRj1REHmL5w,653
51
- flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=svb0YkuTACGh_PWn_tbiH8T05xrnn0MyVEnuQsQH4h0,730
41
+ flwr/cli/new/templates/app/code/task.mlx.py.tpl,sha256=q4yf8B0hdvHKZUvuhlxpQpyY-wfV5pbqEQ4VHFtuqkU,2899
42
+ flwr/cli/new/templates/app/code/task.pytorch.py.tpl,sha256=LEBb0-IOAlnRnn-aTAYv80Fgs67wHCSP6PlhNBdsH2k,3939
43
+ flwr/cli/new/templates/app/code/task.tensorflow.py.tpl,sha256=8sZ8Y5kkaptzwfhAeuoBdth7VFQmD9jjjUrRvcyRrEk,1330
44
+ flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=chTKewidM-st9Uk5o95tGOqJ5FSa1L2R0UdSW2wTr0c,789
45
+ flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl,sha256=X82t0bKRzsTG1w5kjkZhCLneyFJouX41-6Uvsj1sb8Q,776
46
+ flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=9_Gz-6feYYXV5aMlV4WllTyjIJWXxWb7cVVchUauwgc,663
47
+ flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=0q2vl4zFRiW3ElZiSzpEL2ZvHkzfKhZw-3zMTUHNDxk,752
48
+ flwr/cli/new/templates/app/pyproject.numpy.toml.tpl,sha256=6KPl7wLZ6d4aV-GmL6JXolwPtbs5IZ4NOyZ3fU54ahg,616
49
+ flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=PlRf_AwQdFzA-PL5kvE3bXbLU3feSZLopOYVHHtUV6I,702
50
+ flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=6rPeA9XgQByr6ECnlkNYpjYgQKA3BKTJFFvDBjjL6l8,665
51
+ flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=zMb6GxI91ta9jQDg6zSww7I7bvO0oq9RutIKEwN2OVM,713
52
52
  flwr/cli/run/__init__.py,sha256=oCd6HmQDx-sqver1gecgx-uMA38BLTSiiKpl7RGNceg,789
53
- flwr/cli/run/run.py,sha256=2fCRk1DDlIJ19ujN_PY3EsX7lBXdeaNik_xM5hX1ruw,7078
53
+ flwr/cli/run/run.py,sha256=s6I2EU6dmjJHPJ_LNdjIBe9UZlCwvf5RA5O61nAgO3g,7483
54
54
  flwr/cli/utils.py,sha256=l65Ul0YsSBPuypk0uorAtEDmLEYiUrzpCXi6zCg9mJ4,4506
55
55
  flwr/client/__init__.py,sha256=wzJZsYJIHf_8-PMzvfbinyzzjgh1UP1vLrAw2_yEbKI,1345
56
56
  flwr/client/app.py,sha256=VJ_vPMVfur5_SqUjHa18VWLB6I9kOav78f5myC_iWuk,26110
@@ -83,11 +83,11 @@ flwr/client/numpy_client.py,sha256=u76GWAdHmJM88Agm2EgLQSvO8Jnk225mJTk-_TmPjFE,1
83
83
  flwr/client/rest_client/__init__.py,sha256=5KGlp7pjc1dhNRkKlaNtUfQmg8wrRFh9lS3P3uRS-7Q,735
84
84
  flwr/client/rest_client/connection.py,sha256=8LPk7zPvX3l3-5QQXNym8DkIe6V14uEHmTzQ8jCcsnQ,12198
85
85
  flwr/client/supernode/__init__.py,sha256=SUhWOzcgXRNXk1V9UgB5-FaWukqqrOEajVUHEcPkwyQ,865
86
- flwr/client/supernode/app.py,sha256=4qOYa3pA_iBCSd6fWuIqeZidArVjLQ5kTNhEdtARHbo,15610
86
+ flwr/client/supernode/app.py,sha256=GI2jnttoUt31v39Q-F2dS-WZuesG7IhGXfhP0oylaUU,14694
87
87
  flwr/client/typing.py,sha256=dxoTBnTMfqXr5J7G3y-uNjqxYCddvxhu89spfj4Lm2U,1048
88
88
  flwr/common/__init__.py,sha256=4cBLNNnNTwHDnL_HCxhU5ILCSZ6fYh3A_aMBtlvHTVw,3721
89
89
  flwr/common/address.py,sha256=wRu1Luezx1PWadwV9OA_KNko01oVvbRnPqfzaDn8QOk,1882
90
- flwr/common/config.py,sha256=1LDK-0mFbc2nXYfeV8Bti44vTiaDNyQc8Kem1byaA5E,5539
90
+ flwr/common/config.py,sha256=IN3UVfC4h-ItpbAOhJXNsVA63ZOJ05twsmIv3AbSU04,5599
91
91
  flwr/common/constant.py,sha256=1XxuRezsr9fl3xvQNPR2kyFkwNeG_f5vZayv0PFh0kY,3012
92
92
  flwr/common/context.py,sha256=5Bd9RCrhLkYZOVR7vr97OVhzVBHQkS1fUsYiIKTwpxU,2239
93
93
  flwr/common/date.py,sha256=OcQuwpb2HxcblTqYm6H223ufop5UZw5N_fzalbpOVzY,891
@@ -98,7 +98,7 @@ flwr/common/exit_handlers.py,sha256=2Nt0wLhc17KQQsLPFSRAjjhUiEFfJK6tNozdGiIY4Fs,
98
98
  flwr/common/grpc.py,sha256=_9838_onFLx7W6_lakUN35ziKpdcKp7fA-0jE0EhcEQ,2460
99
99
  flwr/common/logger.py,sha256=42rLD69BetRkVKYXZLUaTgyjPxsCn6phVbndMC1fWjk,8130
100
100
  flwr/common/message.py,sha256=QmFYYXA-3e9M8tGO-3NPyAI8yvdmcpdYaA_noR1DE88,13194
101
- flwr/common/object_ref.py,sha256=PQR0tztVOkD1nn_uGuNz4bHm7z4fwsosTsUKvWIGF5Y,6506
101
+ flwr/common/object_ref.py,sha256=qXwF441qulzl18pggrj9LDLtz92K83xjAuSA0HfPKP0,8724
102
102
  flwr/common/parameter.py,sha256=-bFAUayToYDF50FZGrBC1hQYJCQDtB2bbr3ZuVLMtdE,2095
103
103
  flwr/common/pyproject.py,sha256=EI_ovbCHGmhYrdPx0RSDi5EkFZFof-8m1PA54c0ZTjc,1385
104
104
  flwr/common/record/__init__.py,sha256=ejDBQOIA0OkwZAC5cK_tTPHA4oAM0Ju7Oi13-NneMlE,1054
@@ -135,8 +135,8 @@ flwr/proto/error_pb2.py,sha256=LarjKL90LbwkXKlhzNrDssgl4DXcvIPve8NVCXHpsKA,1084
135
135
  flwr/proto/error_pb2.pyi,sha256=ZNH4HhJTU_KfMXlyCeg8FwU-fcUYxTqEmoJPtWtHikc,734
136
136
  flwr/proto/error_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
137
137
  flwr/proto/error_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
138
- flwr/proto/exec_pb2.py,sha256=jzcC4T7LGEk7LPxCPUk1FD1U4Rjk41O8OI1WOqiPqos,2554
139
- flwr/proto/exec_pb2.pyi,sha256=AMk4IplBE2t1iR-tLwaJUhYd-1PV-r85w-GU56yu9uY,3051
138
+ flwr/proto/exec_pb2.py,sha256=7b1JUZgt04lBxdXpnd3WOOwmY2egUausm4G1wbmXFPs,3120
139
+ flwr/proto/exec_pb2.pyi,sha256=R9xCAUxkLvuXcvQfhNGZ5Qy8qiUCdjN-gp3Iy5BmkNo,4110
140
140
  flwr/proto/exec_pb2_grpc.py,sha256=faAN19XEMP8GTKrcIU6jvlWkN44n2KiUsZh_OG0sYcg,4072
141
141
  flwr/proto/exec_pb2_grpc.pyi,sha256=VrFhT1Um3Nb8UC2YqnR9GIiM-Yyx0FqaxVOWljh-G_w,1208
142
142
  flwr/proto/fab_pb2.py,sha256=k1L3z4L3pJGRIUmgt609xUe-UAtSKFwT0C7wXnb12IY,1427
@@ -187,7 +187,7 @@ flwr/server/driver/driver.py,sha256=NT_yaeit7_kZEIsCEqOWPID1GrVD3ywH4xZ2wtIh5lM,
187
187
  flwr/server/driver/grpc_driver.py,sha256=4LMLDXjMU1VdHsj9nyqFIF71GWVsUR85fsO6biWMHRU,9710
188
188
  flwr/server/driver/inmemory_driver.py,sha256=RcK94_NtjGZ4aZDIscnU7A3Uv1u8jGx29-xcbjQvZTM,6444
189
189
  flwr/server/history.py,sha256=bBOHKyX1eQONIsUx4EUU-UnAk1i0EbEl8ioyMq_UWQ8,5063
190
- flwr/server/run_serverapp.py,sha256=l3OZvFXQNZ3VeZH2iciBybEciTSAIzlXzsPStr22kSI,9531
190
+ flwr/server/run_serverapp.py,sha256=khrB9bQ42p8DMRJLGoY_pQJ5bkpXyBPL0eyPdZJo29Y,9430
191
191
  flwr/server/server.py,sha256=wsXsxMZ9SQ0B42nBnUlcV83NJPycgrgg5bFwcQ4BYBE,17821
192
192
  flwr/server/server_app.py,sha256=1hul76ospG8L_KooK_ewn1sWPNTNYLTtZMeGNOBNruA,6267
193
193
  flwr/server/server_config.py,sha256=CZaHVAsMvGLjpWVcLPkiYxgJN4xfIyAiUrCI3fETKY4,1349
@@ -236,10 +236,10 @@ flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=KgNah2AaND
236
236
  flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=5jbYbAn75sGv-gBwOPDySE0kz96F6dTYLeMrGqNi4lM,735
237
237
  flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=yoSU-6nCJF9ASHGNpSY69nZbUhPGXkMIKYDgybKQX3c,7672
238
238
  flwr/server/superlink/fleet/vce/__init__.py,sha256=36MHKiefnJeyjwMQzVUK4m06Ojon3WDcwZGQsAcyVhQ,783
239
- flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=oBIzmnrSSRvH_H0vRGEGWhWzQQwqe3zn6e13RsNwlIY,1466
239
+ flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=psQjI1DQHOM5uWVXM27l_wPHjfEkMUTP-_8-lEFH1JA,1466
240
240
  flwr/server/superlink/fleet/vce/backend/backend.py,sha256=iG3KSIY7DzNfcxmuLfTs7VdQJnqPCvvn5DFkTWKG5lI,2227
241
241
  flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=SnjZ1WOcrfMZNgiDdTHcFeXJqrY7UHx8kvO62mqU9S4,7489
242
- flwr/server/superlink/fleet/vce/vce_api.py,sha256=B_xnbaPKWuuovaNnkH21PYNrDKc0gtaWMQu_5kjYW5w,12780
242
+ flwr/server/superlink/fleet/vce/vce_api.py,sha256=jTAUX472qRIZefSL64rwLkhRe01PX_YwhFpWoLwk6Tc,12770
243
243
  flwr/server/superlink/state/__init__.py,sha256=Gj2OTFLXvA-mAjBvwuKDM3rDrVaQPcIoybSa2uskMTE,1003
244
244
  flwr/server/superlink/state/in_memory_state.py,sha256=LnKlnXe9JjVHb5_XOo6eD1RQhlCvJVKgz_CkXrMz8DY,13069
245
245
  flwr/server/superlink/state/sqlite_state.py,sha256=LdLnHtF8C-1L1IAglfZPqIuKa782Qo7qAYzTXMdMYGM,29052
@@ -256,22 +256,22 @@ flwr/server/workflow/default_workflows.py,sha256=_GqFCaxtiq3_UVCvZWgJ200QroGSI9q
256
256
  flwr/server/workflow/secure_aggregation/__init__.py,sha256=3XlgDOjD_hcukTGl6Bc1B-8M_dPlVSJuTbvXIbiO-Ic,880
257
257
  flwr/server/workflow/secure_aggregation/secagg_workflow.py,sha256=wpAkYPId0nfK6SgpUAtsCni4_MQLd-uqJ81tUKu3xlI,5838
258
258
  flwr/server/workflow/secure_aggregation/secaggplus_workflow.py,sha256=LLW4LfPAVdpMhIjJBopHVl-OltYuVSqsESw3PULcrN8,29694
259
- flwr/simulation/__init__.py,sha256=9x8OCkK3jpFAPJB1aeEMOddz6V58bExQPtwE8Z3q-RY,1359
259
+ flwr/simulation/__init__.py,sha256=ybVBW3xT6cg_IasJV4_ymI3bVrCbFhw1mmcfrdfl3q0,1359
260
260
  flwr/simulation/app.py,sha256=te3dQB3eodPwzsv1y4daPyaskIAaOtgoHaQLobrqoqY,15163
261
261
  flwr/simulation/ray_transport/__init__.py,sha256=wzcEEwUUlulnXsg6raCA1nGpP3LlAQDtJ8zNkCXcVbA,734
262
262
  flwr/simulation/ray_transport/ray_actor.py,sha256=3j0HgzjrlYjnzdTRy8aA4Nf6VoUvxi1hGRQkGSU5z6c,19020
263
263
  flwr/simulation/ray_transport/ray_client_proxy.py,sha256=0abIsU0VBk9rNJZOKHIyzYGy3ZnWBgqYocX_oct1EP0,7307
264
264
  flwr/simulation/ray_transport/utils.py,sha256=TYdtfg1P9VfTdLMOJlifInGpxWHYs9UfUqIv2wfkRLA,2392
265
- flwr/simulation/run_simulation.py,sha256=YiegK26ERohmAkAdr1S8cORHvmlq7u6Z_Z_tvCMsFGg,22305
265
+ flwr/simulation/run_simulation.py,sha256=BPW_zn5xuGlOHKZDvl8J-IuwH7E8ZZAIR2zcXNjsLMo,23391
266
266
  flwr/superexec/__init__.py,sha256=9h94ogLxi6eJ3bUuJYq3E3pApThSabTPiSmPAGlTkHE,800
267
- flwr/superexec/app.py,sha256=xam9I3SKFGoFXfM_UE-Z92N-fVc6n1T69_Ihz8bFMfQ,6404
268
- flwr/superexec/deployment.py,sha256=Bm8bUhkvepMjeFdJBPkFJOcFlopWLa0GVdZnQPdkH5g,6398
267
+ flwr/superexec/app.py,sha256=bmYl8zABnWka9WhRQxX4p1YAI76cYG655dP09ro-V0o,6485
268
+ flwr/superexec/deployment.py,sha256=B--96bAvyotQX-c4-umXIe50uCw4HVjD79rXCQtSUH4,6357
269
269
  flwr/superexec/exec_grpc.py,sha256=PhqGoZEpTMxSQmUSV8Wgtzb1Za_pHJ-adZqo5RYnDyE,1942
270
- flwr/superexec/exec_servicer.py,sha256=fBuvCngXpUi38854yu7LMciacSnjmGXrjE5wIwq3-wk,2244
271
- flwr/superexec/executor.py,sha256=yh-_kXK-qXTIRl50L824gHGRDJijcsDY3QOso-gIzFI,2164
272
- flwr/superexec/simulation.py,sha256=3WdVhN7ZQVC47AnFs26-E8dPrQqiWX20YHoU-CeuqcY,4861
273
- flwr_nightly-1.10.0.dev20240722.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
274
- flwr_nightly-1.10.0.dev20240722.dist-info/METADATA,sha256=UgK27v3gCPvRC2FxSzaNgwdukAgQHgwxxZIK-wEViE8,15672
275
- flwr_nightly-1.10.0.dev20240722.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
276
- flwr_nightly-1.10.0.dev20240722.dist-info/entry_points.txt,sha256=7qBQcA-bDGDxnJmLd9FYqglFQubjCNqyg9M8a-lukps,336
277
- flwr_nightly-1.10.0.dev20240722.dist-info/RECORD,,
270
+ flwr/superexec/exec_servicer.py,sha256=fxQAKfgmQRSnYq5anjryfGeRbsZrNFEkuiNcTZhRwiE,2320
271
+ flwr/superexec/executor.py,sha256=k_adivto6R2U82DADOHNvdtobehBYreRek1gOEBIQnQ,2318
272
+ flwr/superexec/simulation.py,sha256=RR1WgqgMmv6HZ2eLvWKCUs9iOQZRj1KbEoAmnG7iyLA,6304
273
+ flwr_nightly-1.11.0.dev20240724.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
274
+ flwr_nightly-1.11.0.dev20240724.dist-info/METADATA,sha256=5SKs56KSuPhXNij63fE2QsRTDpTEP2XtR89TLn8ursI,15672
275
+ flwr_nightly-1.11.0.dev20240724.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
276
+ flwr_nightly-1.11.0.dev20240724.dist-info/entry_points.txt,sha256=7qBQcA-bDGDxnJmLd9FYqglFQubjCNqyg9M8a-lukps,336
277
+ flwr_nightly-1.11.0.dev20240724.dist-info/RECORD,,