flwr-nightly 1.14.0.dev20241214__py3-none-any.whl → 1.15.0.dev20250107__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.
Files changed (46) hide show
  1. flwr/cli/log.py +9 -7
  2. flwr/cli/login/login.py +1 -3
  3. flwr/cli/ls.py +25 -22
  4. flwr/cli/new/templates/app/.gitignore.tpl +3 -0
  5. flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +1 -1
  6. flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
  7. flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +1 -1
  8. flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
  9. flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -1
  10. flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
  11. flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +3 -3
  12. flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
  13. flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
  14. flwr/cli/run/run.py +11 -18
  15. flwr/cli/stop.py +71 -32
  16. flwr/cli/utils.py +81 -25
  17. flwr/client/app.py +11 -1
  18. flwr/client/client.py +0 -32
  19. flwr/client/clientapp/app.py +3 -1
  20. flwr/client/grpc_rere_client/connection.py +10 -4
  21. flwr/client/message_handler/message_handler.py +0 -2
  22. flwr/client/numpy_client.py +0 -44
  23. flwr/client/supernode/app.py +1 -2
  24. flwr/common/logger.py +16 -1
  25. flwr/common/record/recordset.py +1 -1
  26. flwr/common/retry_invoker.py +3 -1
  27. flwr/common/secure_aggregation/crypto/symmetric_encryption.py +45 -0
  28. flwr/common/telemetry.py +13 -3
  29. flwr/server/app.py +8 -8
  30. flwr/server/run_serverapp.py +8 -9
  31. flwr/server/serverapp/app.py +17 -2
  32. flwr/server/superlink/driver/serverappio_servicer.py +9 -0
  33. flwr/server/superlink/fleet/message_handler/message_handler.py +1 -3
  34. flwr/server/superlink/fleet/vce/vce_api.py +2 -2
  35. flwr/server/superlink/linkstate/in_memory_linkstate.py +10 -2
  36. flwr/server/superlink/linkstate/linkstate.py +4 -0
  37. flwr/server/superlink/linkstate/sqlite_linkstate.py +6 -2
  38. flwr/server/superlink/simulation/simulationio_servicer.py +13 -0
  39. flwr/simulation/app.py +15 -4
  40. flwr/simulation/run_simulation.py +35 -22
  41. flwr/simulation/simulationio_connection.py +3 -0
  42. {flwr_nightly-1.14.0.dev20241214.dist-info → flwr_nightly-1.15.0.dev20250107.dist-info}/METADATA +2 -2
  43. {flwr_nightly-1.14.0.dev20241214.dist-info → flwr_nightly-1.15.0.dev20250107.dist-info}/RECORD +46 -46
  44. {flwr_nightly-1.14.0.dev20241214.dist-info → flwr_nightly-1.15.0.dev20250107.dist-info}/LICENSE +0 -0
  45. {flwr_nightly-1.14.0.dev20241214.dist-info → flwr_nightly-1.15.0.dev20250107.dist-info}/WHEEL +0 -0
  46. {flwr_nightly-1.14.0.dev20241214.dist-info → flwr_nightly-1.15.0.dev20250107.dist-info}/entry_points.txt +0 -0
@@ -54,6 +54,7 @@ from flwr.proto.simulationio_pb2 import ( # pylint: disable=E0611
54
54
  )
55
55
  from flwr.server.superlink.ffs.ffs_factory import FfsFactory
56
56
  from flwr.server.superlink.linkstate import LinkStateFactory
57
+ from flwr.server.superlink.utils import abort_if
57
58
 
58
59
 
59
60
  class SimulationIoServicer(simulationio_pb2_grpc.SimulationIoServicer):
@@ -110,6 +111,15 @@ class SimulationIoServicer(simulationio_pb2_grpc.SimulationIoServicer):
110
111
  """Push Simulation process outputs."""
111
112
  log(DEBUG, "SimultionIoServicer.PushSimulationOutputs")
112
113
  state = self.state_factory.state()
114
+
115
+ # Abort if the run is not running
116
+ abort_if(
117
+ request.run_id,
118
+ [Status.PENDING, Status.STARTING, Status.FINISHED],
119
+ state,
120
+ context,
121
+ )
122
+
113
123
  state.set_serverapp_context(request.run_id, context_from_proto(request.context))
114
124
  return PushSimulationOutputsResponse()
115
125
 
@@ -120,6 +130,9 @@ class SimulationIoServicer(simulationio_pb2_grpc.SimulationIoServicer):
120
130
  log(DEBUG, "SimultionIoServicer.UpdateRunStatus")
121
131
  state = self.state_factory.state()
122
132
 
133
+ # Abort if the run is finished
134
+ abort_if(request.run_id, [Status.FINISHED], state, context)
135
+
123
136
  # Update the run status
124
137
  state.update_run_status(
125
138
  run_id=request.run_id, new_status=run_status_from_proto(request.run_status)
flwr/simulation/app.py CHANGED
@@ -24,7 +24,8 @@ from typing import Optional
24
24
 
25
25
  from flwr.cli.config_utils import get_fab_metadata
26
26
  from flwr.cli.install import install_from_fab
27
- from flwr.common import EventType
27
+ from flwr.cli.utils import get_sha256_hash
28
+ from flwr.common import EventType, event
28
29
  from flwr.common.args import add_args_flwr_app_common
29
30
  from flwr.common.config import (
30
31
  get_flwr_dir,
@@ -48,6 +49,7 @@ from flwr.common.logger import (
48
49
  from flwr.common.serde import (
49
50
  configs_record_from_proto,
50
51
  context_from_proto,
52
+ context_to_proto,
51
53
  fab_from_proto,
52
54
  run_from_proto,
53
55
  run_status_to_proto,
@@ -201,8 +203,17 @@ def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R09
201
203
  verbose: bool = fed_opt.get("verbose", False)
202
204
  enable_tf_gpu_growth: bool = fed_opt.get("enable_tf_gpu_growth", False)
203
205
 
206
+ event(
207
+ EventType.FLWR_SIMULATION_RUN_ENTER,
208
+ event_details={
209
+ "backend": "ray",
210
+ "num-supernodes": num_supernodes,
211
+ "run-id-hash": get_sha256_hash(run.run_id),
212
+ },
213
+ )
214
+
204
215
  # Launch the simulation
205
- _run_simulation(
216
+ updated_context = _run_simulation(
206
217
  server_app_attr=server_app_attr,
207
218
  client_app_attr=client_app_attr,
208
219
  num_supernodes=num_supernodes,
@@ -213,11 +224,11 @@ def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R09
213
224
  verbose_logging=verbose,
214
225
  server_app_run_config=fused_config,
215
226
  is_app=True,
216
- exit_event=EventType.CLI_FLOWER_SIMULATION_LEAVE,
227
+ exit_event=EventType.FLWR_SIMULATION_RUN_LEAVE,
217
228
  )
218
229
 
219
230
  # Send resulting context
220
- context_proto = None # context_to_proto(updated_context)
231
+ context_proto = context_to_proto(updated_context)
221
232
  out_req = PushSimulationOutputsRequest(
222
233
  run_id=run.run_id, context=context_proto
223
234
  )
@@ -24,10 +24,11 @@ import threading
24
24
  import traceback
25
25
  from logging import DEBUG, ERROR, INFO, WARNING
26
26
  from pathlib import Path
27
- from time import sleep
27
+ from queue import Empty, Queue
28
28
  from typing import Any, Optional
29
29
 
30
30
  from flwr.cli.config_utils import load_and_validate
31
+ from flwr.cli.utils import get_sha256_hash
31
32
  from flwr.client import ClientApp
32
33
  from flwr.common import Context, EventType, RecordSet, event, log, now
33
34
  from flwr.common.config import get_fused_config_from_dir, parse_config_args
@@ -127,7 +128,7 @@ def run_simulation_from_cli() -> None:
127
128
  run = Run.create_empty(run_id)
128
129
  run.override_config = override_config
129
130
 
130
- _run_simulation(
131
+ _ = _run_simulation(
131
132
  server_app_attr=server_app_attr,
132
133
  client_app_attr=client_app_attr,
133
134
  num_supernodes=args.num_supernodes,
@@ -136,7 +137,6 @@ def run_simulation_from_cli() -> None:
136
137
  app_dir=args.app,
137
138
  run=run,
138
139
  enable_tf_gpu_growth=args.enable_tf_gpu_growth,
139
- delay_start=args.delay_start,
140
140
  verbose_logging=args.verbose,
141
141
  server_app_run_config=fused_config,
142
142
  is_app=True,
@@ -208,7 +208,7 @@ def run_simulation(
208
208
  "\n\tflwr.simulation.run_simulationt(...)",
209
209
  )
210
210
 
211
- _run_simulation(
211
+ _ = _run_simulation(
212
212
  num_supernodes=num_supernodes,
213
213
  client_app=client_app,
214
214
  server_app=server_app,
@@ -231,6 +231,7 @@ def run_serverapp_th(
231
231
  has_exception: threading.Event,
232
232
  enable_tf_gpu_growth: bool,
233
233
  run_id: int,
234
+ ctx_queue: "Queue[Context]",
234
235
  ) -> threading.Thread:
235
236
  """Run SeverApp in a thread."""
236
237
 
@@ -243,6 +244,7 @@ def run_serverapp_th(
243
244
  _server_app_run_config: UserConfig,
244
245
  _server_app_attr: Optional[str],
245
246
  _server_app: Optional[ServerApp],
247
+ _ctx_queue: "Queue[Context]",
246
248
  ) -> None:
247
249
  """Run SeverApp, after check if GPU memory growth has to be set.
248
250
 
@@ -263,13 +265,14 @@ def run_serverapp_th(
263
265
  )
264
266
 
265
267
  # Run ServerApp
266
- _run(
268
+ updated_context = _run(
267
269
  driver=_driver,
268
270
  context=context,
269
271
  server_app_dir=_server_app_dir,
270
272
  server_app_attr=_server_app_attr,
271
273
  loaded_server_app=_server_app,
272
274
  )
275
+ _ctx_queue.put(updated_context)
273
276
  except Exception as ex: # pylint: disable=broad-exception-caught
274
277
  log(ERROR, "ServerApp thread raised an exception: %s", ex)
275
278
  log(ERROR, traceback.format_exc())
@@ -293,6 +296,7 @@ def run_serverapp_th(
293
296
  server_app_run_config,
294
297
  server_app_attr,
295
298
  server_app,
299
+ ctx_queue,
296
300
  ),
297
301
  )
298
302
  serverapp_th.start()
@@ -309,14 +313,13 @@ def _main_loop(
309
313
  enable_tf_gpu_growth: bool,
310
314
  run: Run,
311
315
  exit_event: EventType,
312
- delay_start: int,
313
316
  flwr_dir: Optional[str] = None,
314
317
  client_app: Optional[ClientApp] = None,
315
318
  client_app_attr: Optional[str] = None,
316
319
  server_app: Optional[ServerApp] = None,
317
320
  server_app_attr: Optional[str] = None,
318
321
  server_app_run_config: Optional[UserConfig] = None,
319
- ) -> None:
322
+ ) -> Context:
320
323
  """Start ServerApp on a separate thread, then launch Simulation Engine."""
321
324
  # Initialize StateFactory
322
325
  state_factory = LinkStateFactory(":flwr-in-memory-state:")
@@ -326,6 +329,13 @@ def _main_loop(
326
329
  server_app_thread_has_exception = threading.Event()
327
330
  serverapp_th = None
328
331
  success = True
332
+ updated_context = Context(
333
+ run_id=run.run_id,
334
+ node_id=0,
335
+ node_config=UserConfig(),
336
+ state=RecordSet(),
337
+ run_config=UserConfig(),
338
+ )
329
339
  try:
330
340
  # Register run
331
341
  log(DEBUG, "Pre-registering run with id %s", run.run_id)
@@ -340,6 +350,7 @@ def _main_loop(
340
350
  # Initialize Driver
341
351
  driver = InMemoryDriver(state_factory=state_factory)
342
352
  driver.set_run(run_id=run.run_id)
353
+ output_context_queue: Queue[Context] = Queue()
343
354
 
344
355
  # Get and run ServerApp thread
345
356
  serverapp_th = run_serverapp_th(
@@ -352,11 +363,9 @@ def _main_loop(
352
363
  has_exception=server_app_thread_has_exception,
353
364
  enable_tf_gpu_growth=enable_tf_gpu_growth,
354
365
  run_id=run.run_id,
366
+ ctx_queue=output_context_queue,
355
367
  )
356
368
 
357
- # Buffer time so the `ServerApp` in separate thread is ready
358
- log(DEBUG, "Buffer time delay: %ds", delay_start)
359
- sleep(delay_start)
360
369
  # Start Simulation Engine
361
370
  vce.start_vce(
362
371
  num_supernodes=num_supernodes,
@@ -372,6 +381,11 @@ def _main_loop(
372
381
  flwr_dir=flwr_dir,
373
382
  )
374
383
 
384
+ updated_context = output_context_queue.get(timeout=3)
385
+
386
+ except Empty:
387
+ log(DEBUG, "Queue timeout. No context received.")
388
+
375
389
  except Exception as ex:
376
390
  log(ERROR, "An exception occurred !! %s", ex)
377
391
  log(ERROR, traceback.format_exc())
@@ -381,13 +395,20 @@ def _main_loop(
381
395
  finally:
382
396
  # Trigger stop event
383
397
  f_stop.set()
384
- event(exit_event, event_details={"success": success})
398
+ event(
399
+ exit_event,
400
+ event_details={
401
+ "run-id-hash": get_sha256_hash(run.run_id),
402
+ "success": success,
403
+ },
404
+ )
385
405
  if serverapp_th:
386
406
  serverapp_th.join()
387
407
  if server_app_thread_has_exception.is_set():
388
408
  raise RuntimeError("Exception in ServerApp thread")
389
409
 
390
410
  log(DEBUG, "Stopping Simulation Engine now.")
411
+ return updated_context
391
412
 
392
413
 
393
414
  # pylint: disable=too-many-arguments,too-many-locals,too-many-positional-arguments
@@ -405,10 +426,9 @@ def _run_simulation(
405
426
  flwr_dir: Optional[str] = None,
406
427
  run: Optional[Run] = None,
407
428
  enable_tf_gpu_growth: bool = False,
408
- delay_start: int = 5,
409
429
  verbose_logging: bool = False,
410
430
  is_app: bool = False,
411
- ) -> None:
431
+ ) -> Context:
412
432
  """Launch the Simulation Engine."""
413
433
  if backend_config is None:
414
434
  backend_config = {}
@@ -460,7 +480,6 @@ def _run_simulation(
460
480
  enable_tf_gpu_growth,
461
481
  run,
462
482
  exit_event,
463
- delay_start,
464
483
  flwr_dir,
465
484
  client_app,
466
485
  client_app_attr,
@@ -488,7 +507,8 @@ def _run_simulation(
488
507
  # Set logger propagation to False to prevent duplicated log output in Colab.
489
508
  logger = set_logger_propagation(logger, False)
490
509
 
491
- _main_loop(*args)
510
+ updated_context = _main_loop(*args)
511
+ return updated_context
492
512
 
493
513
 
494
514
  def _parse_args_run_simulation() -> argparse.ArgumentParser:
@@ -538,13 +558,6 @@ def _parse_args_run_simulation() -> argparse.ArgumentParser:
538
558
  "Read more about how `tf.config.experimental.set_memory_growth()` works in "
539
559
  "the TensorFlow documentation: https://www.tensorflow.org/api/stable.",
540
560
  )
541
- parser.add_argument(
542
- "--delay-start",
543
- type=int,
544
- default=3,
545
- help="Buffer time (in seconds) to delay the start the simulation engine after "
546
- "the `ServerApp`, which runs in a separate thread, has been launched.",
547
- )
548
561
  parser.add_argument(
549
562
  "--verbose",
550
563
  action="store_true",
@@ -23,6 +23,7 @@ import grpc
23
23
  from flwr.common.constant import SIMULATIONIO_API_DEFAULT_CLIENT_ADDRESS
24
24
  from flwr.common.grpc import create_channel
25
25
  from flwr.common.logger import log
26
+ from flwr.common.retry_invoker import _make_simple_grpc_retry_invoker, _wrap_stub
26
27
  from flwr.proto.simulationio_pb2_grpc import SimulationIoStub # pylint: disable=E0611
27
28
 
28
29
 
@@ -48,6 +49,7 @@ class SimulationIoConnection:
48
49
  self._cert = root_certificates
49
50
  self._grpc_stub: Optional[SimulationIoStub] = None
50
51
  self._channel: Optional[grpc.Channel] = None
52
+ self._retry_invoker = _make_simple_grpc_retry_invoker()
51
53
 
52
54
  @property
53
55
  def _is_connected(self) -> bool:
@@ -72,6 +74,7 @@ class SimulationIoConnection:
72
74
  root_certificates=self._cert,
73
75
  )
74
76
  self._grpc_stub = SimulationIoStub(self._channel)
77
+ _wrap_stub(self._grpc_stub, self._retry_invoker)
75
78
  log(DEBUG, "[SimulationIO] Connected to %s", self._addr)
76
79
 
77
80
  def _disconnect(self) -> None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.14.0.dev20241214
3
+ Version: 1.15.0.dev20250107
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -118,7 +118,7 @@ Flower's goal is to make federated learning accessible to everyone. This series
118
118
 
119
119
  4. **Custom Clients for Federated Learning**
120
120
 
121
- [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adap/flower/blob/main/doc/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb))
121
+ [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb))
122
122
 
123
123
  Stay tuned, more tutorials are coming soon. Topics include **Privacy and Security in Federated Learning**, and **Scaling Federated Learning**.
124
124
 
@@ -6,14 +6,14 @@ flwr/cli/cli_user_auth_interceptor.py,sha256=rEjgAZmzHO0GjwdyZib6bkTI2X59ErJAZlu
6
6
  flwr/cli/config_utils.py,sha256=I4_EMv2f68mfrL_QuOYoAG--yDfKisE7tGiIg09G2YQ,12079
7
7
  flwr/cli/example.py,sha256=uk5CoD0ZITgpY_ffsTbEKf8XOOCSUzByjHPcMSPqV18,2216
8
8
  flwr/cli/install.py,sha256=0AD0qJD79SKgBnWOQlphcubfr4zHk8jTpFgwZbJBI_g,8180
9
- flwr/cli/log.py,sha256=1HUCUnSMk1yXwjR5G4w12xGoIZmCDGA7HWBbOePsDlQ,5995
9
+ flwr/cli/log.py,sha256=O7MBpsJp114PIZb-7Cru-KM6fqyneFQkqoQbQsqQmZU,6121
10
10
  flwr/cli/login/__init__.py,sha256=6_9zOzbPOAH72K2wX3-9dXTAbS7Mjpa5sEn2lA6eHHI,800
11
- flwr/cli/login/login.py,sha256=_G16s07CJOT1l_jlqRgIDCch0PWIjg0WPpmxI1GC7y8,2797
12
- flwr/cli/ls.py,sha256=5uO0YG0XXn7paS4oUs1T7rwicApxMV3ac9ejBZfLN3k,10545
11
+ flwr/cli/login/login.py,sha256=bZZ3hVeGpF5805R0Eg_SBZUGwrLAWmyaoLhLw6vQFcg,2764
12
+ flwr/cli/ls.py,sha256=K_3Bt2RfETw4V7J4qgo8_Wx-Y_bWZqttuO879Ppxo5Y,11056
13
13
  flwr/cli/new/__init__.py,sha256=pOQtPT9W4kCIttcKne5m-FtJbvTqdjTVJxzQ9AUYK8I,790
14
14
  flwr/cli/new/new.py,sha256=scyyKt8mzkc3El1bypgkHjKwVQEc2-q4I50PxriPFdI,9922
15
15
  flwr/cli/new/templates/__init__.py,sha256=4luU8RL-CK8JJCstQ_ON809W9bNTkY1l9zSaPKBkgwY,725
16
- flwr/cli/new/templates/app/.gitignore.tpl,sha256=XixnHdyeMB2vwkGtGnwHqoWpH-9WChdyG0GXe57duhc,3078
16
+ flwr/cli/new/templates/app/.gitignore.tpl,sha256=HZJcGQoxp7aUzaPg8Uqch3kNrIESwr9yjimDxJYgXVY,3104
17
17
  flwr/cli/new/templates/app/LICENSE.tpl,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
18
18
  flwr/cli/new/templates/app/README.baseline.md.tpl,sha256=4dg2aBS-NIleVyDlxsG8m65Af6LIJ-pZA5ICjGFU5XA,9641
19
19
  flwr/cli/new/templates/app/README.flowertune.md.tpl,sha256=QSG51uifue2KVZz2ZNw8kmOStS7svC2AQ2gTa5E7Bhs,3326
@@ -55,25 +55,25 @@ flwr/cli/new/templates/app/code/task.pytorch.py.tpl,sha256=XlJqA4Ix_PloO_zJLhjiN
55
55
  flwr/cli/new/templates/app/code/task.sklearn.py.tpl,sha256=SeIIo0rr_6ffn4Qx2xELD18jYXCkcW__NWtYEDXCICM,1843
56
56
  flwr/cli/new/templates/app/code/task.tensorflow.py.tpl,sha256=SKXAZdgBnPpbAbJ90Rb7oQ5ilnopBx_j_JNFoUDeEAI,1732
57
57
  flwr/cli/new/templates/app/code/utils.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
58
- flwr/cli/new/templates/app/pyproject.baseline.toml.tpl,sha256=_bT_ze1QPajyFZW0AxLILai0_2qiquB5_7FCSF0ZqCk,2666
59
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=GH8stg-XUQAsj_324Cc9RYm7etdtcR49ssglOloo8kE,1873
60
- flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl,sha256=_LSCSc9cAiRuvTLdsy9wphwzhV7FCOUxO1ce12YOk58,1143
61
- flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=8xC1457V13AxTsO7SaLsqhQQPN7Aau3wbNZqKJ9Inx8,673
62
- flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=sJMPYaroZLM7EkIX5ulnCelKxHlpViYiSqhswEnGrB0,744
63
- flwr/cli/new/templates/app/pyproject.numpy.toml.tpl,sha256=SbCIUjwCIsgTRoBb-GMwivcWdoigMvD3QbKL6TJNgWM,612
64
- flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=UtH3Vslg2S8fIKIHC-dJGcxz5YUK2WI3F2TUAgTsQn0,710
65
- flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=01HArBqRrbZT3O7pXOM9MqduXMNm525wv7Sj6dvYMJE,686
66
- flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=KVCIOEYNWnq6j7XOboXqZshc9aQ2PyRDUu7bZtmfJ24,710
58
+ flwr/cli/new/templates/app/pyproject.baseline.toml.tpl,sha256=5-xGWgb1s0c4E5KXfQqWzVziJXIsUp1cGwZEsMEI31Q,2666
59
+ flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=-XdX44M9o6dl-EDBLtHLQejFGQlwQnjATgmEpA8cuq4,1873
60
+ flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl,sha256=QPxFT3_7RSUVwy8jjT6SeWmV9dl2FQ26gUhdp8O7CpI,1143
61
+ flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=cFFgI0zzzyThm38iXy9OLBkPpZz8mOP1qSagBJvwxGQ,673
62
+ flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=1qeTW-GHMAWr-vuMAJ-eijco9IIsftdBeqNH7g8x3Zw,744
63
+ flwr/cli/new/templates/app/pyproject.numpy.toml.tpl,sha256=nU-ij9nPXxmPgE2SGapXnRfghye8g_Fo1_ub5XpaKAE,612
64
+ flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=PA_dEtWkY6Wf3Ektc9DvSKE81er3yDntf_VTtC1nDHc,710
65
+ flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=d7TwWH-QJN0j-9rs9zHnng_bHeHV7mk138KXqdv5BoE,686
66
+ flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=r0SZnvoR5a5mEWKJIvQ3rW8C6-2DkhaC8A1fTA0avm0,710
67
67
  flwr/cli/run/__init__.py,sha256=cCsKVB0SFzh2b3QmGba6BHckB85xlhjh3mh4pBpACtY,790
68
- flwr/cli/run/run.py,sha256=O-avAXq9uk27BBGyRlTlaX4a1xvLwwNKJDg0XozxZQc,8140
69
- flwr/cli/stop.py,sha256=pa3etMLCLxfGl9w2c2o6e5u46j6LimEmNp2zuQGxAIk,3143
70
- flwr/cli/utils.py,sha256=aVTtQ2RD5RM8dnmqHNEp1kIBVyjF4tJ7KupczmegWc8,8331
68
+ flwr/cli/run/run.py,sha256=BvpjYyUvDhVMvO5cG711ihtdeSbls9p8zVAuFGETLA8,7893
69
+ flwr/cli/stop.py,sha256=1T9RNRCH8dxjmBT38hFtKAWY9Gb7RMCMCML7kex9WzE,4613
70
+ flwr/cli/utils.py,sha256=d15VkwxVK-NC1X-LVXXW3_O4-A38ZrlevwSNKNYpJCY,10592
71
71
  flwr/client/__init__.py,sha256=DGDoO0AEAfz-0CUFmLdyUUweAS64-07AOnmDfWUefK4,1192
72
- flwr/client/app.py,sha256=eznpoeYPRI-pjgtb3BCZVQGz9L91SSRrXbZOMzbIt54,34398
73
- flwr/client/client.py,sha256=lIIUgxHk4tofk2RljVBL5wFzPR_Ob9iURg0NpyKufPY,9081
72
+ flwr/client/app.py,sha256=XJWu-kPswM52oLYXaOLKr0gj87KPNRI7M0Na9oBsDK4,34784
73
+ flwr/client/client.py,sha256=8o58nd9o6ZFcMIaVYPGcV4MSjBG4H0oFgWiv8ZEO3oA,7895
74
74
  flwr/client/client_app.py,sha256=cTig-N00YzTucbo9zNi6I21J8PlbflU_8J_f5CI-Wpw,10390
75
75
  flwr/client/clientapp/__init__.py,sha256=kZqChGnTChQ1WGSUkIlW2S5bc0d0mzDubCAmZUGRpEY,800
76
- flwr/client/clientapp/app.py,sha256=w94GzkFJw89xMZ69znEz6vNs0tELhMSlLlqttFuJDe8,8807
76
+ flwr/client/clientapp/app.py,sha256=n3IbbQ__QBjd4n7hhP2oydYg66IvrnSXvwi3sZvnWeU,8949
77
77
  flwr/client/clientapp/clientappio_servicer.py,sha256=5L6bjw_j3Mnx9kRFwYwxDNABKurBO5q1jZOWE_X11wQ,8522
78
78
  flwr/client/clientapp/utils.py,sha256=TTihPRO_AUhA3ZCszPsLyLZ30D_tnhTfe1ndMNVOBPg,4344
79
79
  flwr/client/dpfedavg_numpy_client.py,sha256=4KsEvzavDKyVDU1V0kMqffTwu1lNdUCYQN-i0DTYVN8,7404
@@ -83,11 +83,11 @@ flwr/client/grpc_client/__init__.py,sha256=LsnbqXiJhgQcB0XzAlUQgPx011Uf7Y7yabIC1
83
83
  flwr/client/grpc_client/connection.py,sha256=gMwB87mlmRBbvPOvUA1m3C-Ci6bjMEmTRI4bJpgbyic,9416
84
84
  flwr/client/grpc_rere_client/__init__.py,sha256=MK-oSoV3kwUEQnIwl0GN4OpiHR7eLOrMA8ikunET130,752
85
85
  flwr/client/grpc_rere_client/client_interceptor.py,sha256=q08lIEeJLvvonNOiejNXvmySbPObteGnbDHhEKDmWzE,5380
86
- flwr/client/grpc_rere_client/connection.py,sha256=fqqorPCieqfFHbFXPniAM-qga5Lf-6-kp6DHdbk8Rrg,11148
86
+ flwr/client/grpc_rere_client/connection.py,sha256=NqKSoYIJblB4lElZ7EKIgDjLb6KYEcI-7CBrTbyiKfg,11475
87
87
  flwr/client/grpc_rere_client/grpc_adapter.py,sha256=sQo0I9T65t97LFGoW_PrmgaTbd18GFgi2DoAI5wQJ4k,5589
88
88
  flwr/client/heartbeat.py,sha256=cx37mJBH8LyoIN4Lks85wtqT1mnU5GulQnr4pGCvAq0,2404
89
89
  flwr/client/message_handler/__init__.py,sha256=QxxQuBNpFPTHx3KiUNvQSlqMKlEnbRR1kFfc1KVje08,719
90
- flwr/client/message_handler/message_handler.py,sha256=wEbSn60qjozUfNaJIPTsSG2X9OsAKBd8D4c7TU4oJc4,6525
90
+ flwr/client/message_handler/message_handler.py,sha256=s7FEfYJp5QB259Pj1L94_9AC24Kh5JyKC2U-E6eNkkY,6492
91
91
  flwr/client/message_handler/task_handler.py,sha256=ZDJBKmrn2grRMNl1rU1iGs7FiMHL5VmZiSp_6h9GHVU,1824
92
92
  flwr/client/mod/__init__.py,sha256=37XeXZLFq_tzFVKVtC9JaigM2bSAU7BrGQvMPCE3Q28,1159
93
93
  flwr/client/mod/centraldp_mods.py,sha256=UGwNuqpmOWfLdfJITFgdi1TG-nLjuSb-cbEyoyfDgxQ,5415
@@ -101,12 +101,12 @@ flwr/client/nodestate/__init__.py,sha256=6FTlzydo1j0n55Tb-Qo0XmuqTUyRxg3x7jHgo3g
101
101
  flwr/client/nodestate/in_memory_nodestate.py,sha256=MKI3jVPARPWJmNGw61k1-9LIXROkTx2PrhWjDM8cpHk,1291
102
102
  flwr/client/nodestate/nodestate.py,sha256=CmHZdR6kVO8tkffg42W0Yb9JdRmrUonZ9deXfUNK6Hg,1024
103
103
  flwr/client/nodestate/nodestate_factory.py,sha256=apUbcJG0a_FUVsc0TkNN3q9yovc9u_J34u9iuLFKTLQ,1430
104
- flwr/client/numpy_client.py,sha256=tqGyhIkeeZQGr65BR03B7TWgx4rW3FA7G2874D8z_VU,11167
104
+ flwr/client/numpy_client.py,sha256=chTkL9dOtK_wgUoYtzp5mfDOC1k8xPAd1qPIsB3hcjA,9581
105
105
  flwr/client/rest_client/__init__.py,sha256=5KGlp7pjc1dhNRkKlaNtUfQmg8wrRFh9lS3P3uRS-7Q,735
106
106
  flwr/client/rest_client/connection.py,sha256=NWBu7Cc8LUTlf7GjJl3rgdCAykrE5suul_xZUV21OgI,12659
107
107
  flwr/client/run_info_store.py,sha256=ZN2Phi4DSLbSyzg8RmzJcVYh1g6eurHOmWRCT7GMtw4,4040
108
108
  flwr/client/supernode/__init__.py,sha256=SUhWOzcgXRNXk1V9UgB5-FaWukqqrOEajVUHEcPkwyQ,865
109
- flwr/client/supernode/app.py,sha256=qh_hhV_PihPfzL8UMXkwvQJVHRautdsCNd5WKv_Wd40,11483
109
+ flwr/client/supernode/app.py,sha256=LCZs4ImGkleGgsn-b1AOK-u_P8Gi5nKeSvicEDRDF8Q,11400
110
110
  flwr/client/typing.py,sha256=dxoTBnTMfqXr5J7G3y-uNjqxYCddvxhu89spfj4Lm2U,1048
111
111
  flwr/common/__init__.py,sha256=TVaoFEJE158aui1TPZQiJCDZX4RNHRyI8I55VC80HhI,3901
112
112
  flwr/common/address.py,sha256=9KNYE69WW_QVcyumsux3Qn1wmn4J7f13Y9nHASpvzbA,3018
@@ -122,7 +122,7 @@ flwr/common/differential_privacy_constants.py,sha256=c7b7tqgvT7yMK0XN9ndiTBs4mQf
122
122
  flwr/common/dp.py,sha256=vddkvyjV2FhRoN4VuU2LeAM1UBn7dQB8_W-Qdiveal8,1978
123
123
  flwr/common/exit_handlers.py,sha256=MracJaBeoCOC7TaXK9zCJQxhrMSx9ZtczK237qvhBpU,2806
124
124
  flwr/common/grpc.py,sha256=AIPMAHsvcTlduaYKCgnoBnst1A7RZEgGqh0Ulm7qfJ0,2621
125
- flwr/common/logger.py,sha256=mdo-jhSL5--dSzaLX0oPf_XluSBEYcF93Nnloz6orC4,11941
125
+ flwr/common/logger.py,sha256=qwiOc9N_Dqh-NlxtENcMa-dCPqint20ZLuWEvnAEwHU,12323
126
126
  flwr/common/message.py,sha256=Zv4ID2BLQsbff0F03DI_MeFoHbSqVZAdDD9NcKYv6Zo,13832
127
127
  flwr/common/object_ref.py,sha256=fIXf8aP5mG6Nuni7dvcKK5Di3zRfRWGs4ljvqIXplds,10115
128
128
  flwr/common/parameter.py,sha256=-bFAUayToYDF50FZGrBC1hQYJCQDtB2bbr3ZuVLMtdE,2095
@@ -132,20 +132,20 @@ flwr/common/record/configsrecord.py,sha256=i40jOzBx04ysZKECwaw4FdUXMdY9HgdY8GAqK
132
132
  flwr/common/record/conversion_utils.py,sha256=n3I3SI2P6hUjyxbWNc0QAch-SEhfMK6Hm-UUaplAlUc,1393
133
133
  flwr/common/record/metricsrecord.py,sha256=UywkEPbifiu_IyPUFoDJCi8WEVLujlqZERUWAWpc3vs,5752
134
134
  flwr/common/record/parametersrecord.py,sha256=SasHn35JRHsj8G1UT76FgRjaP4ZJasejvgjBV6HnaTg,7748
135
- flwr/common/record/recordset.py,sha256=sSofrBycZSqiHR4TzfI4_QoIIN-5B1LnMG0C9CiByAo,8312
135
+ flwr/common/record/recordset.py,sha256=qqIFdRZ0ivQhUhztpdxNIvCRDZQXY_zX0kKDEU9mhfM,8319
136
136
  flwr/common/record/typeddict.py,sha256=q5hL2xkXymuiCprHWb69mUmLpWQk_XXQq0hGQ69YPaw,3599
137
137
  flwr/common/recordset_compat.py,sha256=ViSwA26h6Q55ZmV1LLjSJpcKiipV-p_JpCj4wxdE-Ow,14230
138
- flwr/common/retry_invoker.py,sha256=nCA-dfBw6YoWkOgop71QfhTDmYj1JIgXsdpzlyqgZK4,14396
138
+ flwr/common/retry_invoker.py,sha256=UIDKsn0AitS3fOr43WTqZAdD-TaHkBeTj1QxD7SGba0,14481
139
139
  flwr/common/secure_aggregation/__init__.py,sha256=erPnTWdOfMH0K0HQTmj5foDJ6t3iYcExy2aACy8iZNQ,731
140
140
  flwr/common/secure_aggregation/crypto/__init__.py,sha256=nlHesCWy8xxE5s6qHWnauCtyClcMQ2K0CEXAHakY5n0,738
141
141
  flwr/common/secure_aggregation/crypto/shamir.py,sha256=wCSfEfeaPgJ9Om580-YPUF2ljiyRhq33TRC4HtwxYl8,2779
142
- flwr/common/secure_aggregation/crypto/symmetric_encryption.py,sha256=wTDbOaMGZwT0nR4cAPZ0XrGulb8sdtF-Li_NcJ-c464,4166
142
+ flwr/common/secure_aggregation/crypto/symmetric_encryption.py,sha256=J_pRkxbogc7e1fxRZStZFBdzzG5jeUycshJPpvyCt6g,5333
143
143
  flwr/common/secure_aggregation/ndarrays_arithmetic.py,sha256=zvVAIrIyI6OSzGhpCi8NNaTvPXmoMYQIPJT-NkBg8RU,3013
144
144
  flwr/common/secure_aggregation/quantization.py,sha256=mC4uLf05zeONo8Ke-BY0Tj8UCMOS7VD93zHCzuv3MHU,2304
145
145
  flwr/common/secure_aggregation/secaggplus_constants.py,sha256=9MF-oQh62uD7rt9VeNB-rHf2gBLd5GL3S9OejCxmILY,2183
146
146
  flwr/common/secure_aggregation/secaggplus_utils.py,sha256=OgYd68YBRaHQYLc-YdExj9CSpwL58bVTaPrdHoAj2AE,3214
147
147
  flwr/common/serde.py,sha256=K9ExsqcTPETESkt2HMaNtIQAIAfwmuwtJFlG-59I7Sw,31046
148
- flwr/common/telemetry.py,sha256=CHIwFFQ13sWFavmEvkvA43XR1sbh1S3nWvD5TuCO2eI,8774
148
+ flwr/common/telemetry.py,sha256=APKVubU_zJNrE-M_rip6S6Fsu41DxY3tAjFWNOgTmC0,9086
149
149
  flwr/common/typing.py,sha256=eTlGl56rdus583r11xHY_ejG-3b3rknqF735UY5zMK8,6025
150
150
  flwr/common/version.py,sha256=aNSxLL49RKeLz8sPcZrsTEWtrAeQ0uxu6tjmfba4O60,1325
151
151
  flwr/proto/__init__.py,sha256=hbY7JYakwZwCkYgCNlmHdc8rtvfoJbAZLalMdc--CGc,683
@@ -211,7 +211,7 @@ flwr/proto/transport_pb2_grpc.py,sha256=vLN3EHtx2aEEMCO4f1Upu-l27BPzd3-5pV-u8wPc
211
211
  flwr/proto/transport_pb2_grpc.pyi,sha256=AGXf8RiIiW2J5IKMlm_3qT3AzcDa4F3P5IqUjve_esA,766
212
212
  flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
213
213
  flwr/server/__init__.py,sha256=cEg1oecBu4cKB69iJCqWEylC8b5XW47bl7rQiJsdTvM,1528
214
- flwr/server/app.py,sha256=JDF_dEnLvnZwcQgGz2E7ur8eBDC-xVU04hf2adirDvU,30869
214
+ flwr/server/app.py,sha256=qn5gdsDqvJ7o4ZiWpbNBHtYKSZiUJ7SiGfdkUEczTd4,31010
215
215
  flwr/server/client_manager.py,sha256=7Ese0tgrH-i-ms363feYZJKwB8gWnXSmg_hYF2Bju4U,6227
216
216
  flwr/server/client_proxy.py,sha256=4G-oTwhb45sfWLx2uZdcXD98IZwdTS6F88xe3akCdUg,2399
217
217
  flwr/server/compat/__init__.py,sha256=VxnJtJyOjNFQXMNi9hIuzNlZM5n0Hj1p3aq_Pm2udw4,892
@@ -225,12 +225,12 @@ flwr/server/driver/driver.py,sha256=u_fMfqLYTroTafGCNwKPHI4lttRL-Z5CqeT3_FHSq-Q,
225
225
  flwr/server/driver/grpc_driver.py,sha256=9Vns8XRSc3WmQn8KejJtJftgsg3UzsEwqPC8ekTGSHY,9636
226
226
  flwr/server/driver/inmemory_driver.py,sha256=fCDhbP3OGmqWrUPQlagsMFGbEwFT0pn9OqhxeHr65zg,6614
227
227
  flwr/server/history.py,sha256=qSb5_pPTrwofpSYGsZWzMPkl_4uJ4mJFWesxXDrEvDU,5026
228
- flwr/server/run_serverapp.py,sha256=oDfHaHyVT5BRcckFFQKg8AVPCWR1ek7OhNceTC8qq9g,2493
228
+ flwr/server/run_serverapp.py,sha256=vIPhvJx0i5sEZO4IKM6ruCXmx4ncat76rh0B4KhdhhM,2446
229
229
  flwr/server/server.py,sha256=1ZsFEptmAV-L2vP2etNC9Ed5CLSxpuKzUFkAPQ4l5Xc,17893
230
230
  flwr/server/server_app.py,sha256=RsgS6PRS5Z74cMUAHzsm8r3LWddwn00MjRs6rlacHt8,6297
231
231
  flwr/server/server_config.py,sha256=CZaHVAsMvGLjpWVcLPkiYxgJN4xfIyAiUrCI3fETKY4,1349
232
232
  flwr/server/serverapp/__init__.py,sha256=L0K-94UDdTyEZ8LDtYybGIIIv3HW6AhSVjXMUfYJQnQ,800
233
- flwr/server/serverapp/app.py,sha256=wAIN72ESE7yY6W7qShCfnVF-DVgeGmfpIxW1JZUFWDc,7911
233
+ flwr/server/serverapp/app.py,sha256=eh15kToGVRdIFXHyVKa58tWN5Hh3EIXHcYEbcIqqNb0,8467
234
234
  flwr/server/serverapp_components.py,sha256=-IV_CitOfrJclJj2jNdbN1Q65PyFmtKtrTIg1hc6WQw,2118
235
235
  flwr/server/strategy/__init__.py,sha256=tQer2SwjDnvgFFuJMZM-S01Z615N5XK6MaCvpm4BMU0,2836
236
236
  flwr/server/strategy/aggregate.py,sha256=PDvekufza13s9AsVmz9WASunaBs3yCtl8JVliFx9j6Q,13978
@@ -259,7 +259,7 @@ flwr/server/strategy/strategy.py,sha256=cXapkD5uDrt5C-RbmWDn9FLoap3Q41i7GKvbmfbC
259
259
  flwr/server/superlink/__init__.py,sha256=8tHYCfodUlRD8PCP9fHgvu8cz5N31A2QoRVL0jDJ15E,707
260
260
  flwr/server/superlink/driver/__init__.py,sha256=5soEK5QSvxNjmJQ-CGTWROc4alSAeU0e9Ad9RDhsd3E,717
261
261
  flwr/server/superlink/driver/serverappio_grpc.py,sha256=62371xIRzp3k-eQTaSpb9c4TiSfueSuI7Iw5X3IafOY,2186
262
- flwr/server/superlink/driver/serverappio_servicer.py,sha256=EjqseReChpd0b4ZPEVPbWiWlVMsqK-WhIbH7jNHi7IM,11880
262
+ flwr/server/superlink/driver/serverappio_servicer.py,sha256=mgyV0XTONO7Vqb7sGOLu6AkCXWpBSeJ2s7ksadK1vE4,12197
263
263
  flwr/server/superlink/ffs/__init__.py,sha256=FAY-zShcfPmOxosok2QyT6hTNMNctG8cH9s_nIl8jkI,840
264
264
  flwr/server/superlink/ffs/disk_ffs.py,sha256=n_Ah0sQwXGVQ9wj5965nLjdkQQbpoHCljjXKFnwftsU,3297
265
265
  flwr/server/superlink/ffs/ffs.py,sha256=qLI1UfosJugu2BKOJWqHIhafTm-YiuKqGf3OGWPH0NM,2395
@@ -276,23 +276,23 @@ flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=j2hyC342am-_Hgp1g80Y3fG
276
276
  flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=KBVsGt57G2_OWB_74N29TYVzD36G0xJg2l5m0ArPoEU,5389
277
277
  flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=8PHzqtW_rKBvqI5XVwYN-CBEpEonnj85iN0daSWliyI,8299
278
278
  flwr/server/superlink/fleet/message_handler/__init__.py,sha256=h8oLD7uo5lKICPy0rRdKRjTYe62u8PKkT_fA4xF5JPA,731
279
- flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=BVc30QUQBP8aMZ77jT4-VEbbqMI7b4kbw33ERzlbwWk,5329
279
+ flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=hzL8t6uUqO1lu5UHLF_NerdJuce4S5cK9fIWkKDzJfA,5298
280
280
  flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=5jbYbAn75sGv-gBwOPDySE0kz96F6dTYLeMrGqNi4lM,735
281
281
  flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=0b10l9zz381GXgCmTZGoz76Z_fdRaa8XcqMGwuLqJ38,6723
282
282
  flwr/server/superlink/fleet/vce/__init__.py,sha256=TZJsKTpYO_djv2EXx9Ji62I8TA0JiZF8jvRyJRZkAes,784
283
283
  flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=cGgal5qpd0_MwEdIqjJbHHSIgGa6GSPoI5_byUwtG_k,1437
284
284
  flwr/server/superlink/fleet/vce/backend/backend.py,sha256=LBAQxnbfPAphVOVIvYMj0QIvVP5O-RQxKQlUGNUj974,2194
285
285
  flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=jsUkFEVQTnrucK1jNQ_cUM8YwL7W4MQNA1GAf8ibRdg,7156
286
- flwr/server/superlink/fleet/vce/vce_api.py,sha256=VL6e_Jwf4uxA-X1EelxJZMv6Eji-_p2J9D0MdHG10a4,13029
286
+ flwr/server/superlink/fleet/vce/vce_api.py,sha256=WTnUILr1OHS8LfjXQUA3FyWJYdJgdqpFAybyJUD-1Xo,13025
287
287
  flwr/server/superlink/linkstate/__init__.py,sha256=v-2JyJlCB3qyhMNwMjmcNVOq4rkooqFU0LHH8Zo1jls,1064
288
- flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=haJiQ0TkinyVH4vOG-EUuEhhI78YESgjKYU6qVgXics,21638
289
- flwr/server/superlink/linkstate/linkstate.py,sha256=sbI7JLAZNMtVH1ZRjRjWDrws4mL0fjvrywxAKgCw9Mw,12936
288
+ flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=SR6a0wb-xFVQmPEsNseT91jmBeN0Lh1m_lZ6nY6aNS0,21984
289
+ flwr/server/superlink/linkstate/linkstate.py,sha256=ayQY5eb-2InSldQUnVcx5ABjPU4QhQRV2lEVPVM_818,13114
290
290
  flwr/server/superlink/linkstate/linkstate_factory.py,sha256=ISSMjDlwuN7swxjOeYlTNpI_kuZ8PGkMcJnf1dbhUSE,2069
291
- flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=9xmHV15hAicEtViCv4X-lHQosaCUwT6-NPd2UnY0zhA,42662
291
+ flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=svP5Vj6Jaq1iazd6q0wWQU0lJslfIJT0XBw8mA1SABs,42879
292
292
  flwr/server/superlink/linkstate/utils.py,sha256=d5uqqIOCKfd54X8CFNfUr3AWqPLpgmzsC_RagRwFugM,13321
293
293
  flwr/server/superlink/simulation/__init__.py,sha256=mg-oapC9dkzEfjXPQFior5lpWj4g9kwbLovptyYM_g0,718
294
294
  flwr/server/superlink/simulation/simulationio_grpc.py,sha256=5wflYW_TS0mjmPG6OYuHMJwXD2_cYmUNhFkdOU0jMWQ,2237
295
- flwr/server/superlink/simulation/simulationio_servicer.py,sha256=UqOyc76IQ5iDELkyuET1J9F20K0mYib30HyVLwX_2Mg,6546
295
+ flwr/server/superlink/simulation/simulationio_servicer.py,sha256=J_TmdqM-Bxgp-iPEI3tvCuBpykw1UX0FouMQalEYAF4,6907
296
296
  flwr/server/superlink/utils.py,sha256=KVb3K_g2vYfu9TnftcN0ewmev133WZcjuEePMm8d7GE,2137
297
297
  flwr/server/typing.py,sha256=5kaRLZuxTEse9A0g7aVna2VhYxU3wTq1f3d3mtw7kXs,1019
298
298
  flwr/server/utils/__init__.py,sha256=pltsPHJoXmUIr3utjwwYxu7_ZAGy5u4MVHzv9iA5Un8,908
@@ -305,14 +305,14 @@ flwr/server/workflow/secure_aggregation/__init__.py,sha256=3XlgDOjD_hcukTGl6Bc1B
305
305
  flwr/server/workflow/secure_aggregation/secagg_workflow.py,sha256=l2IdMdJjs1bgHs5vQgLSOVzar7v2oxUn46oCrnVE1rM,5839
306
306
  flwr/server/workflow/secure_aggregation/secaggplus_workflow.py,sha256=rfn2etO1nb7u-1oRl-H9q3enJZz3shMINZaBB7rPsC4,29671
307
307
  flwr/simulation/__init__.py,sha256=5UcDVJNjFoSwWqHbGM1hKfTTUUNdwAtuoNvNrfvdkUY,1556
308
- flwr/simulation/app.py,sha256=qalNoJxT17bbU-kVQNGTPSFu6C7W9F1oZl4i4nzCJx0,9380
308
+ flwr/simulation/app.py,sha256=cQgIJJujFUpBCcydxgakNygibf3Iww6OAWRo7Sq6y8w,9754
309
309
  flwr/simulation/legacy_app.py,sha256=ySggtKEtXe8L77n8qyGXDA7UPv840MXh-QoalzoGiLU,15780
310
310
  flwr/simulation/ray_transport/__init__.py,sha256=wzcEEwUUlulnXsg6raCA1nGpP3LlAQDtJ8zNkCXcVbA,734
311
311
  flwr/simulation/ray_transport/ray_actor.py,sha256=k11yoAPQzFGQU-KnCCP0ZrfPPdUPXXrBe-1DKM5VdW4,18997
312
312
  flwr/simulation/ray_transport/ray_client_proxy.py,sha256=2vjOKoom3B74C6XU-jC3N6DwYmsLdB-lmkHZ_Xrv96o,7367
313
313
  flwr/simulation/ray_transport/utils.py,sha256=wtbQhKQ4jGoiQDLJNQP17m1DSfL22ERhDBGuoeUFaAQ,2393
314
- flwr/simulation/run_simulation.py,sha256=9zIDWA0fL901cobVRfVuJlTdxAIYJJqjiPV4_a1_v3U,20023
315
- flwr/simulation/simulationio_connection.py,sha256=m31L9Iej-61va48E5x-wJypA6p5s82WM4PKIAmKizQA,3209
314
+ flwr/simulation/run_simulation.py,sha256=KFpdL_RxE8NHZ68ZdghmFS6rccmWkO_iQ-kLLE1WUn8,20336
315
+ flwr/simulation/simulationio_connection.py,sha256=8aAh6MKQkQPMSnWEqA5vua_QzZtoMxG-_-AB23RPhS4,3412
316
316
  flwr/superexec/__init__.py,sha256=fcj366jh4RFby_vDwLroU4kepzqbnJgseZD_jUr_Mko,715
317
317
  flwr/superexec/app.py,sha256=Z6kYHWd62YL0Q4YKyCAbt_BcefNfbKH6V-jCC-1NkZM,1842
318
318
  flwr/superexec/deployment.py,sha256=wZ9G42gGS91knfplswh95MnQ83Fzu-rs6wcuNgDmmvY,6735
@@ -321,8 +321,8 @@ flwr/superexec/exec_servicer.py,sha256=8tFwj1fDBF6PzwLhByTlxM-KNZc83bG1UdE92-8DS
321
321
  flwr/superexec/exec_user_auth_interceptor.py,sha256=K06OU-l4LnYhTDg071hGJuOaQWEJbZsYi5qxUmmtiG0,3704
322
322
  flwr/superexec/executor.py,sha256=_B55WW2TD1fBINpabSSDRenVHXYmvlfhv-k8hJKU4lQ,3115
323
323
  flwr/superexec/simulation.py,sha256=WQDon15oqpMopAZnwRZoTICYCfHqtkvFSqiTQ2hLD_g,4088
324
- flwr_nightly-1.14.0.dev20241214.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
325
- flwr_nightly-1.14.0.dev20241214.dist-info/METADATA,sha256=72g5Ca7GneSO6WBBKA8GwfcdBQHGK1ZU2tcKEuymeYI,15799
326
- flwr_nightly-1.14.0.dev20241214.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
327
- flwr_nightly-1.14.0.dev20241214.dist-info/entry_points.txt,sha256=JlNxX3qhaV18_2yj5a3kJW1ESxm31cal9iS_N_pf1Rk,538
328
- flwr_nightly-1.14.0.dev20241214.dist-info/RECORD,,
324
+ flwr_nightly-1.15.0.dev20250107.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
325
+ flwr_nightly-1.15.0.dev20250107.dist-info/METADATA,sha256=WViuONypdpsZ9HD8sY37AA9v1KR4FA86-PspOAyHPCQ,15810
326
+ flwr_nightly-1.15.0.dev20250107.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
327
+ flwr_nightly-1.15.0.dev20250107.dist-info/entry_points.txt,sha256=JlNxX3qhaV18_2yj5a3kJW1ESxm31cal9iS_N_pf1Rk,538
328
+ flwr_nightly-1.15.0.dev20250107.dist-info/RECORD,,