flwr-nightly 1.23.0.dev20251007__py3-none-any.whl → 1.23.0.dev20251009__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 (38) hide show
  1. flwr/cli/auth_plugin/__init__.py +7 -3
  2. flwr/cli/log.py +2 -2
  3. flwr/cli/login/login.py +4 -13
  4. flwr/cli/ls.py +2 -2
  5. flwr/cli/pull.py +2 -2
  6. flwr/cli/run/run.py +2 -2
  7. flwr/cli/stop.py +2 -2
  8. flwr/cli/supernode/create.py +137 -11
  9. flwr/cli/supernode/delete.py +88 -10
  10. flwr/cli/supernode/ls.py +2 -2
  11. flwr/cli/utils.py +65 -55
  12. flwr/client/grpc_rere_client/connection.py +6 -4
  13. flwr/client/grpc_rere_client/{client_interceptor.py → node_auth_client_interceptor.py} +2 -2
  14. flwr/client/rest_client/connection.py +7 -1
  15. flwr/common/constant.py +13 -0
  16. flwr/proto/control_pb2.py +1 -1
  17. flwr/proto/control_pb2.pyi +2 -2
  18. flwr/proto/fleet_pb2.py +22 -22
  19. flwr/proto/fleet_pb2.pyi +4 -1
  20. flwr/proto/node_pb2.py +2 -2
  21. flwr/proto/node_pb2.pyi +4 -1
  22. flwr/server/app.py +32 -31
  23. flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +8 -4
  24. flwr/server/superlink/fleet/grpc_rere/{server_interceptor.py → node_auth_server_interceptor.py} +18 -37
  25. flwr/server/superlink/fleet/message_handler/message_handler.py +5 -3
  26. flwr/server/superlink/fleet/vce/vce_api.py +10 -1
  27. flwr/server/superlink/linkstate/in_memory_linkstate.py +52 -54
  28. flwr/server/superlink/linkstate/linkstate.py +20 -10
  29. flwr/server/superlink/linkstate/sqlite_linkstate.py +54 -61
  30. flwr/server/utils/validator.py +2 -3
  31. flwr/supercore/primitives/asymmetric.py +8 -0
  32. flwr/superlink/auth_plugin/__init__.py +29 -0
  33. flwr/superlink/servicer/control/control_grpc.py +9 -7
  34. flwr/superlink/servicer/control/control_servicer.py +89 -48
  35. {flwr_nightly-1.23.0.dev20251007.dist-info → flwr_nightly-1.23.0.dev20251009.dist-info}/METADATA +1 -1
  36. {flwr_nightly-1.23.0.dev20251007.dist-info → flwr_nightly-1.23.0.dev20251009.dist-info}/RECORD +38 -38
  37. {flwr_nightly-1.23.0.dev20251007.dist-info → flwr_nightly-1.23.0.dev20251009.dist-info}/WHEEL +0 -0
  38. {flwr_nightly-1.23.0.dev20251007.dist-info → flwr_nightly-1.23.0.dev20251009.dist-info}/entry_points.txt +0 -0
@@ -28,9 +28,13 @@ from flwr.cli.config_utils import get_fab_metadata
28
28
  from flwr.common import Context, RecordDict, now
29
29
  from flwr.common.constant import (
30
30
  FAB_MAX_SIZE,
31
+ HEARTBEAT_DEFAULT_INTERVAL,
31
32
  LOG_STREAM_INTERVAL,
32
33
  NO_ACCOUNT_AUTH_MESSAGE,
33
34
  NO_ARTIFACT_PROVIDER_MESSAGE,
35
+ NODE_NOT_FOUND_MESSAGE,
36
+ PUBLIC_KEY_ALREADY_IN_USE_MESSAGE,
37
+ PUBLIC_KEY_NOT_VALID,
34
38
  PULL_UNFINISHED_RUN_MESSAGE,
35
39
  RUN_ID_NOT_FOUND_MESSAGE,
36
40
  Status,
@@ -70,6 +74,7 @@ from flwr.proto.node_pb2 import NodeInfo # pylint: disable=E0611
70
74
  from flwr.server.superlink.linkstate import LinkState, LinkStateFactory
71
75
  from flwr.supercore.ffs import FfsFactory
72
76
  from flwr.supercore.object_store import ObjectStore, ObjectStoreFactory
77
+ from flwr.supercore.primitives.asymmetric import bytes_to_public_key, uses_nist_ec_curve
73
78
  from flwr.superlink.artifact_provider import ArtifactProvider
74
79
  from flwr.superlink.auth_plugin import ControlAuthnPlugin
75
80
 
@@ -85,7 +90,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
85
90
  ffs_factory: FfsFactory,
86
91
  objectstore_factory: ObjectStoreFactory,
87
92
  is_simulation: bool,
88
- authn_plugin: Optional[ControlAuthnPlugin] = None,
93
+ authn_plugin: ControlAuthnPlugin,
89
94
  artifact_provider: Optional[ArtifactProvider] = None,
90
95
  ) -> None:
91
96
  self.linkstate_factory = linkstate_factory
@@ -111,7 +116,8 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
111
116
  )
112
117
  return StartRunResponse()
113
118
 
114
- flwr_aid = shared_account_info.get().flwr_aid if self.authn_plugin else None
119
+ flwr_aid = shared_account_info.get().flwr_aid
120
+ _check_flwr_aid_exists(flwr_aid, context)
115
121
  override_config = user_config_from_proto(request.override_config)
116
122
  federation_options = config_record_from_proto(request.federation_options)
117
123
  fab_file = request.fab.content
@@ -185,12 +191,9 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
185
191
  if not run:
186
192
  context.abort(grpc.StatusCode.NOT_FOUND, RUN_ID_NOT_FOUND_MESSAGE)
187
193
 
188
- # If account auth is enabled, check if `flwr_aid` matches the run's `flwr_aid`
189
- if self.authn_plugin:
190
- flwr_aid = shared_account_info.get().flwr_aid
191
- _check_flwr_aid_in_run(
192
- flwr_aid=flwr_aid, run=cast(Run, run), context=context
193
- )
194
+ # Check if `flwr_aid` matches the run's `flwr_aid`
195
+ flwr_aid = shared_account_info.get().flwr_aid
196
+ _check_flwr_aid_in_run(flwr_aid=flwr_aid, run=cast(Run, run), context=context)
194
197
 
195
198
  after_timestamp = request.after_timestamp + 1e-6
196
199
  while context.is_active():
@@ -226,20 +229,11 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
226
229
 
227
230
  # Build a set of run IDs for `flwr ls --runs`
228
231
  if not request.HasField("run_id"):
229
- if self.authn_plugin:
230
- # If no `run_id` is specified and account auth is enabled,
231
- # return run IDs for the authenticated account
232
- flwr_aid = shared_account_info.get().flwr_aid
233
- if flwr_aid is None:
234
- context.abort(
235
- grpc.StatusCode.PERMISSION_DENIED,
236
- "️⛔️ Account authentication is enabled, but `flwr_aid` is None",
237
- )
238
- run_ids = state.get_run_ids(flwr_aid=flwr_aid)
239
- else:
240
- # If no `run_id` is specified and no account auth is enabled,
241
- # return all run IDs
242
- run_ids = state.get_run_ids(None)
232
+ # If no `run_id` is specified and account auth is enabled,
233
+ # return run IDs for the authenticated account
234
+ flwr_aid = shared_account_info.get().flwr_aid
235
+ _check_flwr_aid_exists(flwr_aid, context)
236
+ run_ids = state.get_run_ids(flwr_aid=flwr_aid)
243
237
  # Build a set of run IDs for `flwr ls --run-id <run_id>`
244
238
  else:
245
239
  # Retrieve run ID and run
@@ -249,14 +243,11 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
249
243
  # Exit if `run_id` not found
250
244
  if not run:
251
245
  context.abort(grpc.StatusCode.NOT_FOUND, RUN_ID_NOT_FOUND_MESSAGE)
246
+ raise grpc.RpcError() # This line is unreachable
252
247
 
253
- # If account auth is enabled,
254
- # check if `flwr_aid` matches the run's `flwr_aid`
255
- if self.authn_plugin:
256
- flwr_aid = shared_account_info.get().flwr_aid
257
- _check_flwr_aid_in_run(
258
- flwr_aid=flwr_aid, run=cast(Run, run), context=context
259
- )
248
+ # Check if `flwr_aid` matches the run's `flwr_aid`
249
+ flwr_aid = shared_account_info.get().flwr_aid
250
+ _check_flwr_aid_in_run(flwr_aid=flwr_aid, run=run, context=context)
260
251
 
261
252
  run_ids = {run_id}
262
253
 
@@ -278,13 +269,11 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
278
269
  # Exit if `run_id` not found
279
270
  if not run:
280
271
  context.abort(grpc.StatusCode.NOT_FOUND, RUN_ID_NOT_FOUND_MESSAGE)
272
+ raise grpc.RpcError() # This line is unreachable
281
273
 
282
- # If account auth is enabled, check if `flwr_aid` matches the run's `flwr_aid`
283
- if self.authn_plugin:
284
- flwr_aid = shared_account_info.get().flwr_aid
285
- _check_flwr_aid_in_run(
286
- flwr_aid=flwr_aid, run=cast(Run, run), context=context
287
- )
274
+ # Check if `flwr_aid` matches the run's `flwr_aid`
275
+ flwr_aid = shared_account_info.get().flwr_aid
276
+ _check_flwr_aid_in_run(flwr_aid=flwr_aid, run=run, context=context)
288
277
 
289
278
  run_status = state.get_run_status({run_id})[run_id]
290
279
  if run_status.status == Status.FINISHED:
@@ -392,10 +381,9 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
392
381
  grpc.StatusCode.FAILED_PRECONDITION, PULL_UNFINISHED_RUN_MESSAGE
393
382
  )
394
383
 
395
- # Check if `flwr_aid` matches the run's `flwr_aid` when account auth is enabled
396
- if self.authn_plugin:
397
- flwr_aid = shared_account_info.get().flwr_aid
398
- _check_flwr_aid_in_run(flwr_aid=flwr_aid, run=run, context=context)
384
+ # Check if `flwr_aid` matches the run's `flwr_aid`
385
+ flwr_aid = shared_account_info.get().flwr_aid
386
+ _check_flwr_aid_in_run(flwr_aid=flwr_aid, run=run, context=context)
399
387
 
400
388
  # Call artifact provider
401
389
  download_url = self.artifact_provider.get_url(run_id)
@@ -406,13 +394,60 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
406
394
  ) -> CreateNodeCliResponse:
407
395
  """Add a SuperNode."""
408
396
  log(INFO, "ControlServicer.CreateNodeCli")
409
- return CreateNodeCliResponse()
397
+
398
+ # Verify public key
399
+ try:
400
+ # Attempt to deserialize public key
401
+ pub_key = bytes_to_public_key(request.public_key)
402
+ # Check if it's a NIST EC curve public key
403
+ if not uses_nist_ec_curve(pub_key):
404
+ err_msg = "The provided public key is not a NIST EC curve public key."
405
+ log(ERROR, "%s", err_msg)
406
+ raise ValueError(err_msg)
407
+ except (ValueError, AttributeError) as err:
408
+ log(ERROR, "%s", err)
409
+ context.abort(grpc.StatusCode.FAILED_PRECONDITION, PUBLIC_KEY_NOT_VALID)
410
+
411
+ # Init link state
412
+ state = self.linkstate_factory.state()
413
+ node_id = 0
414
+
415
+ flwr_aid = shared_account_info.get().flwr_aid
416
+ flwr_aid = _check_flwr_aid_exists(flwr_aid, context)
417
+ try:
418
+ node_id = state.create_node(
419
+ owner_aid=flwr_aid,
420
+ public_key=request.public_key,
421
+ heartbeat_interval=HEARTBEAT_DEFAULT_INTERVAL,
422
+ )
423
+
424
+ except ValueError:
425
+ # Public key already in use
426
+ log(ERROR, PUBLIC_KEY_ALREADY_IN_USE_MESSAGE)
427
+ context.abort(
428
+ grpc.StatusCode.FAILED_PRECONDITION, PUBLIC_KEY_ALREADY_IN_USE_MESSAGE
429
+ )
430
+ log(INFO, "[ControlServicer.CreateNodeCli] Created node_id=%s", node_id)
431
+
432
+ return CreateNodeCliResponse(node_id=node_id)
410
433
 
411
434
  def DeleteNodeCli(
412
435
  self, request: DeleteNodeCliRequest, context: grpc.ServicerContext
413
436
  ) -> DeleteNodeCliResponse:
414
437
  """Remove a SuperNode."""
415
438
  log(INFO, "ControlServicer.RemoveNode")
439
+
440
+ # Init link state
441
+ state = self.linkstate_factory.state()
442
+
443
+ flwr_aid = shared_account_info.get().flwr_aid
444
+ flwr_aid = _check_flwr_aid_exists(flwr_aid, context)
445
+ try:
446
+ state.delete_node(owner_aid=flwr_aid, node_id=request.node_id)
447
+ except ValueError:
448
+ log(ERROR, NODE_NOT_FOUND_MESSAGE)
449
+ context.abort(grpc.StatusCode.NOT_FOUND, NODE_NOT_FOUND_MESSAGE)
450
+
416
451
  return DeleteNodeCliResponse()
417
452
 
418
453
  def ListNodesCli(
@@ -494,24 +529,30 @@ def _create_list_runs_response(
494
529
  )
495
530
 
496
531
 
497
- def _check_flwr_aid_in_run(
498
- flwr_aid: Optional[str], run: Run, context: grpc.ServicerContext
499
- ) -> None:
500
- """Guard clause to check if `flwr_aid` matches the run's `flwr_aid`."""
501
- # `flwr_aid` must not be None. Abort if it is None.
532
+ def _check_flwr_aid_exists(
533
+ flwr_aid: Optional[str], context: grpc.ServicerContext
534
+ ) -> str:
535
+ """Guard clause to check if `flwr_aid` exists."""
502
536
  if flwr_aid is None:
503
537
  context.abort(
504
538
  grpc.StatusCode.PERMISSION_DENIED,
505
- "️⛔️ Account authentication is enabled, but `flwr_aid` is None",
539
+ "️⛔️ Failed to fetch the account information.",
506
540
  )
541
+ raise RuntimeError # This line is unreachable
542
+ return flwr_aid
543
+
507
544
 
545
+ def _check_flwr_aid_in_run(
546
+ flwr_aid: Optional[str], run: Run, context: grpc.ServicerContext
547
+ ) -> None:
548
+ """Guard clause to check if `flwr_aid` matches the run's `flwr_aid`."""
549
+ _check_flwr_aid_exists(flwr_aid, context)
508
550
  # `run.flwr_aid` must not be an empty string. Abort if it is empty.
509
551
  run_flwr_aid = run.flwr_aid
510
552
  if not run_flwr_aid:
511
553
  context.abort(
512
554
  grpc.StatusCode.PERMISSION_DENIED,
513
- "⛔️ Account authentication is enabled, but the run is not associated "
514
- "with a `flwr_aid`.",
555
+ "⛔️ Run is not associated with a `flwr_aid`.",
515
556
  )
516
557
 
517
558
  # Exit if `flwr_aid` does not match the run's `flwr_aid`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.23.0.dev20251007
3
+ Version: 1.23.0.dev20251009
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  License: Apache-2.0
6
6
  Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
@@ -5,7 +5,7 @@ flwr/app/exception.py,sha256=WX45Yviu_CmYrYd8JHNjRkSsb-g4Br7XvVLKuVxwSdI,1298
5
5
  flwr/app/metadata.py,sha256=rdMBn0zhIOYmCvmGENQWSQqDwcxwsMJzCle4PQdlc_Y,7331
6
6
  flwr/cli/__init__.py,sha256=EfMGmHoobET6P2blBt_eOByXL8299MgFfB7XNdaPQ6I,720
7
7
  flwr/cli/app.py,sha256=xHbxFpdgQMMQojntdXVVijS2vWq4X7iPFbSiIuzFCyo,2457
8
- flwr/cli/auth_plugin/__init__.py,sha256=Hi4YiFWCFhm7G94N_RIF1OEapxpWy3SyUeXVXfJyZSY,1226
8
+ flwr/cli/auth_plugin/__init__.py,sha256=qpebWV9uLpx72_J8yTVgT1DlH2Y9MK_RraDoTYEqv-w,1359
9
9
  flwr/cli/auth_plugin/auth_plugin.py,sha256=LK-DYGk8J85Mjsbc5BX9ueDVOOPcFSo9cKWJX25X-QI,3050
10
10
  flwr/cli/auth_plugin/noop_auth_plugin.py,sha256=KRyxoYtrzOWAIlSuXznli9gqL-rmHSG3zESmYSCQ_rg,2093
11
11
  flwr/cli/auth_plugin/oidc_cli_plugin.py,sha256=9Oyd23g-2vgsXhRQdqG9JNocPylGXZM4UVPBB6l0GXA,5147
@@ -15,10 +15,10 @@ flwr/cli/config_utils.py,sha256=o75PJzgCTl9FdFo_I9OjCB02-ykK0VWZdhIAeR0A8QA,9130
15
15
  flwr/cli/constant.py,sha256=LtxufmhkEqNWQ9doWbbbkUKa12vN_RK_Of5u0So-GHA,1729
16
16
  flwr/cli/example.py,sha256=SNTorkKPrx1rOryGREUyZu8TcOc1-vFv1zEddaysdY0,2216
17
17
  flwr/cli/install.py,sha256=Jr883qR7qssVpUr3hEOEcLK-dfW67Rsve3lZchjA9RU,8180
18
- flwr/cli/log.py,sha256=n_fcoECKIkY3MTOfXhB8AjOG1LSQW_GSPY-2qc7rW9Q,6553
18
+ flwr/cli/log.py,sha256=3qVYY30QqchfnKRTeeRw2ojBUj_nwvfnZkdBr4lmjpc,6541
19
19
  flwr/cli/login/__init__.py,sha256=B1SXKU3HCQhWfFDMJhlC7FOl8UsvH4mxysxeBnrfyUE,800
20
- flwr/cli/login/login.py,sha256=TR2whArUBGd6TqS1v4MAKBGLrfABkFdRVQuzKpsUULE,4757
21
- flwr/cli/ls.py,sha256=WineydqrQKuNf8yuFPRcfptYLZ-peu9LEOi4at3lfuw,11107
20
+ flwr/cli/login/login.py,sha256=XeA6K9rZn3CBvtiFP3XWTAk7s8766BCqHvCsO_tJEuY,4558
21
+ flwr/cli/ls.py,sha256=VHF9xb4q0dOQwFZE_XmUhX_cw27eKyUvlIyxNx-crkw,11095
22
22
  flwr/cli/new/__init__.py,sha256=QA1E2QtzPvFCjLTUHnFnJbufuFiGyT_0Y53Wpbvg1F0,790
23
23
  flwr/cli/new/new.py,sha256=nIuUrQSGDjI4kqnymlq-rOT0RU3AHwZrat3abqHhCwM,10598
24
24
  flwr/cli/new/templates/__init__.py,sha256=FpjWCfIySU2DB4kh0HOXLAjlZNNFDTVU4w3HoE2TzcI,725
@@ -82,24 +82,24 @@ flwr/cli/new/templates/app/pyproject.pytorch_legacy_api.toml.tpl,sha256=ZWW31QEd
82
82
  flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=Elh5bUTVBNRG1aDTrgQcZgjfrXcIaVXH00UduNJDZ2U,1484
83
83
  flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=g7SYiAJr6Uhwg4ZsQI2qsLVeizU8vd0CzR0_jka99_A,1508
84
84
  flwr/cli/new/templates/app/pyproject.xgboost.toml.tpl,sha256=yAJ9jL2q6U_XXYwwUT9fpIqIKFuQR_Kgg82GpWfQ5J8,1661
85
- flwr/cli/pull.py,sha256=dHiMe6x8w8yRoFNKpjA-eiPD6eFiHz4Vah5HZrqNpuo,3364
85
+ flwr/cli/pull.py,sha256=sT3-f2zf7JcXfB-pHWLXmENrOzJeUDBoqK3oruJxzao,3352
86
86
  flwr/cli/run/__init__.py,sha256=RPyB7KbYTFl6YRiilCch6oezxrLQrl1kijV7BMGkLbA,790
87
- flwr/cli/run/run.py,sha256=ECa0kup9dn15O70H74QdgUsEaeErbzDqVX_U0zZO5IM,8173
88
- flwr/cli/stop.py,sha256=TR9F61suTxNUzGIktUdoBhXwdRtCdvzGhy3qCuvcfBg,5000
87
+ flwr/cli/run/run.py,sha256=ED1mDmO1PnSAgtVOrCeWwzwPm6t3aFYSs3Rh36BJzqk,8161
88
+ flwr/cli/stop.py,sha256=W7ynTYLm0-_1nC5Il4IaZTji6A3GCCm_0R-HQUudAsI,4988
89
89
  flwr/cli/supernode/__init__.py,sha256=DVrTcyCg9NFll6glPLAAA6WPi7boxu6pFY_PRqIyHMk,893
90
- flwr/cli/supernode/create.py,sha256=MloB7Rr-CE_37jH5lFoM8OsaSPUzWt0TSSB_GMwND5E,1959
91
- flwr/cli/supernode/delete.py,sha256=_oCfBnoeUFPLEq_1EAqQp_CHEdzIEP2N_vHZsFTgWn0,1958
92
- flwr/cli/supernode/ls.py,sha256=KZZHQczmXi4vmgMJlBntD893fYQ9a7ZJum-8K_BPWAw,8550
93
- flwr/cli/utils.py,sha256=3bCu_MndtJD2S5MPG9VKi7SxG0No8S651pcfBVb29Y8,14397
90
+ flwr/cli/supernode/create.py,sha256=SVnjJYzaY3AYriulstl95Na_Wk-Mc6o4DscXjuj_jFs,6358
91
+ flwr/cli/supernode/delete.py,sha256=SmeKpvVtly8iisNpzJ-MNY-fe0gH2jwwilJs_NMo7do,4528
92
+ flwr/cli/supernode/ls.py,sha256=exeu-9fpkh27k2oyYNNT7uDhHgf8dlX0TR6WwMV8KIQ,8538
93
+ flwr/cli/utils.py,sha256=66RqZdF0DKsqmR4ZqE9zZ1bX6opdxD2U50GV41WQDoY,14864
94
94
  flwr/client/__init__.py,sha256=Q0MIF442vLIGSkcwHKq_sIfECQynLARJrumAscq2Q6E,1241
95
95
  flwr/client/client.py,sha256=3HAchxvknKG9jYbB7swNyDj-e5vUWDuMKoLvbT7jCVM,7895
96
96
  flwr/client/dpfedavg_numpy_client.py,sha256=3hul067cT2E9jBhzp7bFnFAZ_D2nWcIUEdHYE05FpzU,7404
97
97
  flwr/client/grpc_adapter_client/__init__.py,sha256=RQWP5mFPROLHKgombiRvPXVWSoVrQ81wvZm0-lOuuBA,742
98
98
  flwr/client/grpc_adapter_client/connection.py,sha256=JGv02EjSOAG1E5BRUD4lwXc1LLiYJ0OhInvp31qx1cU,4404
99
99
  flwr/client/grpc_rere_client/__init__.py,sha256=i7iS0Lt8B7q0E2L72e4F_YrKm6ClRKnd71PNA6PW2O0,752
100
- flwr/client/grpc_rere_client/client_interceptor.py,sha256=65MAcKpA7Sv2FRYGgyCQosnZlh7cSIlPn2lMqh-cqZw,2416
101
- flwr/client/grpc_rere_client/connection.py,sha256=OSRsZxeDoGE2avTStQMTV4z2o5ezO-nBrwy6qvCs430,12977
100
+ flwr/client/grpc_rere_client/connection.py,sha256=SaBuUcqF6r6ieT1sv0Tg5Isqmpeb8D184R0ayLvCScQ,13091
102
101
  flwr/client/grpc_rere_client/grpc_adapter.py,sha256=dLGB5GriszAmtgvuFGuz_F7rIwpzLfDxhJ7T3Un-Ce0,6694
102
+ flwr/client/grpc_rere_client/node_auth_client_interceptor.py,sha256=EdTyb5ThFrpkeyXy9_nTKH7E9GnfAdXjcNZ_-uxt1AA,2410
103
103
  flwr/client/message_handler/__init__.py,sha256=0lyljDVqre3WljiZbPcwCCf8GiIaSVI_yo_ylEyPwSE,719
104
104
  flwr/client/message_handler/message_handler.py,sha256=X9SXX6et97Lw9_DGD93HKsEBGNjXClcFgc_5aLK0oiU,6541
105
105
  flwr/client/mod/__init__.py,sha256=AtV4Y5UGuYqJdTg7bJ--KtfOZUYLGDPMy616LvtP5W4,1151
@@ -112,7 +112,7 @@ flwr/client/mod/secure_aggregation/secaggplus_mod.py,sha256=Ib-HlhZOXB6-hAWGZ0Ip
112
112
  flwr/client/mod/utils.py,sha256=FUgD2TfcWqSeF6jUKZ4i6Ke56U4Nrv85AeVb93s6R9g,1201
113
113
  flwr/client/numpy_client.py,sha256=Qq6ghsIAop2slKqAfgiI5NiHJ4LIxGmrik3Ror4_XVc,9581
114
114
  flwr/client/rest_client/__init__.py,sha256=MBiuK62hj439m9rtwSwI184Hth6Tt5GbmpNMyl3zkZY,735
115
- flwr/client/rest_client/connection.py,sha256=fyiS1aXTv71jWczx7mSco94LYJTBXgTF-p2PnAk3CL8,15784
115
+ flwr/client/rest_client/connection.py,sha256=y7fhRoMsgHNKfMGHX1IE_uKgseEuD1eR4MgEmw3aXwE,15971
116
116
  flwr/client/run_info_store.py,sha256=MaJ3UQ-07hWtK67wnWu0zR29jrk0fsfgJX506dvEOfE,4042
117
117
  flwr/client/typing.py,sha256=Jw3rawDzI_-ZDcRmEQcs5gZModY7oeQlEeltYsdOhlU,1048
118
118
  flwr/clientapp/__init__.py,sha256=dsXH29kvCk1meJj9UYMCIak8zehuuhVp0uDJ2COU_1c,829
@@ -126,7 +126,7 @@ flwr/common/__init__.py,sha256=5GCLVk399Az_rTJHNticRlL0Sl_oPw_j5_LuFKfX7-M,4171
126
126
  flwr/common/address.py,sha256=9JucdTwlc-jpeJkRKeUboZoacUtErwSVtnDR9kAtLqE,4119
127
127
  flwr/common/args.py,sha256=Nq2u4yePbkSY0CWFamn0hZY6Rms8G1xYDeDGIcLIITE,5849
128
128
  flwr/common/config.py,sha256=glcZDjco-amw1YfQcYTFJ4S1pt9APoexT-mf1QscuHs,13960
129
- flwr/common/constant.py,sha256=c3drkY6oYfQ45fYMYd1bHCgF3XxG7sXmtj8yP6RX4T4,9183
129
+ flwr/common/constant.py,sha256=PKzVHuA9_Hc6ZfKkYxU68R6Kh7lOMpeUJcH9U50yDW8,9583
130
130
  flwr/common/context.py,sha256=Be8obQR_OvEDy1OmshuUKxGRQ7Qx89mf5F4xlhkR10s,2407
131
131
  flwr/common/date.py,sha256=1ZT2cRSpC2DJqprOVTLXYCR_O2_OZR0zXO_brJ3LqWc,1554
132
132
  flwr/common/differential_privacy.py,sha256=FdlpdpPl_H_2HJa8CQM1iCUGBBQ5Dc8CzxmHERM-EoE,6148
@@ -191,8 +191,8 @@ flwr/proto/clientappio_pb2.py,sha256=vJjzwWydhg7LruK8cvRAeVQeHPsJztgdIW9nyiPBZF0
191
191
  flwr/proto/clientappio_pb2.pyi,sha256=XbFvpZvvrS7QcH5AFXfpRGl4hQvhd3QdKO6x0oTlCCU,165
192
192
  flwr/proto/clientappio_pb2_grpc.py,sha256=iobNROP0qvn5zddx7k-uIi_dJWP3T_BRp_kbKq086i8,17550
193
193
  flwr/proto/clientappio_pb2_grpc.pyi,sha256=Ytf1O1ktKB0Vsuc3AWLIErGjIJYokzKYzi2uA7mdMeg,4785
194
- flwr/proto/control_pb2.py,sha256=JR38sRRmlrXbr0QgKXyCZ5WsrwOMut1me_gYtBWU3NM,7742
195
- flwr/proto/control_pb2.pyi,sha256=nOvDYkVU0WmsVkkfMs-c0rxS2XvQwO7arq0QjDFRyXs,13380
194
+ flwr/proto/control_pb2.py,sha256=zPejyt6qE3bzHHpSs_RJkTiOJI6YbtRVuNmmNrQgazc,7744
195
+ flwr/proto/control_pb2.pyi,sha256=iBpjs4mVgpa_QeW-01hUk179VyxNa6_vWlDFXApISCU,13386
196
196
  flwr/proto/control_pb2_grpc.py,sha256=Of6tnetwnzvJfJWEXhuTFszz4T_IJbdLJD9uRXBdG04,17182
197
197
  flwr/proto/control_pb2_grpc.pyi,sha256=9z_MRrexz0o3_owST8SvhCjQIIAn-SwMWKIihPHzqdM,4801
198
198
  flwr/proto/error_pb2.py,sha256=PQVWrfjVPo88ql_KgV9nCxyQNCcV9PVfmcw7sOzTMro,1084
@@ -203,8 +203,8 @@ flwr/proto/fab_pb2.py,sha256=2Nu0WaWxDZ8TbutMtctjdcGM7OtXiyP4kmCgg5o7Jjw,1627
203
203
  flwr/proto/fab_pb2.pyi,sha256=AMXpiDK0fo3nZWjxsC2E4otSaVjyQbU7iiWKrsSZavs,2395
204
204
  flwr/proto/fab_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
205
205
  flwr/proto/fab_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
206
- flwr/proto/fleet_pb2.py,sha256=VZO6c1Vom-zfdRHgkuHROvsFdt4MOA8-R6p1TT-QXRo,5150
207
- flwr/proto/fleet_pb2.pyi,sha256=0aKdrVaugxVI1ySWiy86aan1cjw9RJkDv1mTcMPyW4I,7797
206
+ flwr/proto/fleet_pb2.py,sha256=xGnNGmBbPds6LeB34HN8_vy4U1oW25-w-r-C6xNpoRo,5190
207
+ flwr/proto/fleet_pb2.pyi,sha256=btn0ertRlY5LenpN-YoiqA4X8NQgbkZsAJZQWN8Tia0,7939
208
208
  flwr/proto/fleet_pb2_grpc.py,sha256=NmzrDYxyM3MQNh3vwYczQNuFimZz3prU6ke3E-fKk_g,17539
209
209
  flwr/proto/fleet_pb2_grpc.pyi,sha256=PDERhzOrBCMAytTLS65Qck8A45bTIYni7Lotq6_I0sM,4721
210
210
  flwr/proto/grpcadapter_pb2.py,sha256=PJ8DtfeV29g_y4Z3aNZlSZocLqSxeLmTsYCdOZDYCiE,1843
@@ -223,8 +223,8 @@ flwr/proto/message_pb2.py,sha256=giymevXYEUdpIO-3A0XKsmRabXW1xSz0sIo5oOlbQ8Y,519
223
223
  flwr/proto/message_pb2.pyi,sha256=EzXZHy2mtabofrd_ZgKSI6M4QH-soIaRZIZBPwBGPv0,11260
224
224
  flwr/proto/message_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
225
225
  flwr/proto/message_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
226
- flwr/proto/node_pb2.py,sha256=_5UD-yH9Y-qtAP-gO3LZeDH_WoSFfjXmNvngsb9G-YM,1534
227
- flwr/proto/node_pb2.pyi,sha256=kmLGmDIqudRtveUop_uVU6w696ahPB_b-O94k3HQIpU,2226
226
+ flwr/proto/node_pb2.py,sha256=C8Pj-6rGP0t44eb4OHkze8wHDf_b_5g8S906tyuqfUI,1572
227
+ flwr/proto/node_pb2.pyi,sha256=hxMkWNE2NjA4j9RVGz8qrfotd4B_1sgdcO4flv-CjHY,2368
228
228
  flwr/proto/node_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
229
229
  flwr/proto/node_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
230
230
  flwr/proto/recorddict_pb2.py,sha256=eVkcnxMTFa3rvknRNiFuJ8z8xxPqgw7bV04aFiTe1j4,5290
@@ -249,7 +249,7 @@ flwr/proto/transport_pb2_grpc.py,sha256=vLN3EHtx2aEEMCO4f1Upu-l27BPzd3-5pV-u8wPc
249
249
  flwr/proto/transport_pb2_grpc.pyi,sha256=AGXf8RiIiW2J5IKMlm_3qT3AzcDa4F3P5IqUjve_esA,766
250
250
  flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
251
251
  flwr/server/__init__.py,sha256=LQQHiuL2jy7TpNaKastRdGsexlxSt5ZWAQNVqitDnrY,1598
252
- flwr/server/app.py,sha256=Axmw-BnqK3Tv2ObDDuMrdQTAFOfEWcxehKhzeAXtBNY,30667
252
+ flwr/server/app.py,sha256=2BAooGt3mKL9scCA0adFVKTps1J0WDmvHpUzUSI9qP0,30328
253
253
  flwr/server/client_manager.py,sha256=5jCGavVli7XdupvWWo7ru3PdFTlRU8IGvHFSSoUVLRs,6227
254
254
  flwr/server/client_proxy.py,sha256=sv0E9AldBYOvc3pusqFh-GnyreeMfsXQ1cuTtxTq_wY,2399
255
255
  flwr/server/compat/__init__.py,sha256=0IsttWvY15qO98_1GyzVC-vR1e_ZPXOdu2qUlOkYMPE,886
@@ -305,22 +305,22 @@ flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py,sha256=KouR9PUcrPmMtoLooF4O
305
305
  flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py,sha256=iSf0mbBAlig7G6subQwBSVjcUCgSihONKdZ1RmQPTOk,4887
306
306
  flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=OsS-6GgCIzMMZDVu5Y-OKjynHVUrpdc_5OrtuB-IbU0,5174
307
307
  flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=ahDJJ1e-lDxBpeBMgPk7YZt2wB38_QltcpOC0gLbpFs,758
308
- flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=X7-z4oReIH5ghMfmMXML3SSpa2bhRsuIvt2OZs82BUk,8675
309
- flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=Kr0CY2CObzvbUU1HB1aZa2CDwrD-oZYCt-O4eoZtvxE,6810
308
+ flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=xkmbYjzt7IZCSvtjgyZVTC7Mm18t7pUB6OUxN_Th8nU,8847
309
+ flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py,sha256=TNK_0-Cpt_s9qTVjm9imke2sF_o_Vb5c-4WDnVg5UGA,5998
310
310
  flwr/server/superlink/fleet/message_handler/__init__.py,sha256=fHsRV0KvJ8HtgSA4_YBsEzuhJLjO8p6xx4aCY2oE1p4,731
311
- flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=3Wg20bFo1tZfkzTQUerPVSHXyOuUqNuitEib3W_Dy-U,8691
311
+ flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=ijK-zji1AKkOvJLLIzC2mYQlEh50lI1qPW8QpysNsKk,8751
312
312
  flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=Lzc93nA7tDqoy-zRUaPG316oqFiZX1HUCL5ELaXY_xw,735
313
313
  flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=mxWKwGpgHPqd7cGFqd2ASnR-KZduIzLfT-d2yiNCqQ0,9257
314
314
  flwr/server/superlink/fleet/vce/__init__.py,sha256=XOKbAWOzlCqEOQ3M2cBYkH7HKA7PxlbCJMunt-ty-DY,784
315
315
  flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=PPH89Yqd1XKm-sRJN6R0WQlKT_b4v54Kzl2yzHAFzM8,1437
316
316
  flwr/server/superlink/fleet/vce/backend/backend.py,sha256=cSrHZ5SjCCvy4vI0pgsyjtx3cDMuMQve8KcKkK-dWWo,2196
317
317
  flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=cBZYTmfiAsb1HmVUmOQXYLU-UJmJTFWkj1wW4RYRDuc,7218
318
- flwr/server/superlink/fleet/vce/vce_api.py,sha256=Xd3k77J37ReyaumImUJ3szXUoMJNvuZ4qQKGraLeCXY,12942
318
+ flwr/server/superlink/fleet/vce/vce_api.py,sha256=cWlRkgn7G_cS4jw6g1ua6ZcGsyF-1YwP9IgSQ6Dk62Q,13209
319
319
  flwr/server/superlink/linkstate/__init__.py,sha256=OtsgvDTnZLU3k0sUbkHbqoVwW6ql2FDmb6uT6DbNkZo,1064
320
- flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=eNjjQp6dJ_Qz54fYeOZ9XFebbB_k9syhBB6N2rXRTsA,27891
321
- flwr/server/superlink/linkstate/linkstate.py,sha256=TCLM9wZa2XGHs55B3LP9j5-WtUPhBjOUdMKQJELG2oY,13287
320
+ flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=oga9vECdDFSFs6egfOS9iXMQmgc5pWgDSfGwi76XOp8,28082
321
+ flwr/server/superlink/linkstate/linkstate.py,sha256=08C1v7dAMOo5346tKNDJ7Y0OCxhpdPdRU11xPwmOoDw,13400
322
322
  flwr/server/superlink/linkstate/linkstate_factory.py,sha256=8RlosqSpKOoD_vhUUQPY0jtE3A84GeF96Z7sWNkRRcA,2069
323
- flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=NIJ1BDcj54TUpNaeb23af38wQE-TM6rnYVMJncJVKQ0,45503
323
+ flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=2a3EP-PFUtg-LUJlct0PQloQ4kuKb0xe18CBsYZHb6U,45361
324
324
  flwr/server/superlink/linkstate/utils.py,sha256=IeLh7iGRCHU5MEWOl7iriaSE4L__8GWOa2OleXadK5M,15444
325
325
  flwr/server/superlink/serverappio/__init__.py,sha256=Fy4zJuoccZe5mZSEIpOmQvU6YeXFBa1M4eZuXXmJcn8,717
326
326
  flwr/server/superlink/serverappio/serverappio_grpc.py,sha256=-I7kBbr4w4ZVYwBZoAIle-xHKthFnZrsVfxa6WR8uxA,2310
@@ -332,7 +332,7 @@ flwr/server/superlink/utils.py,sha256=zXmyU2o535b9dgz-TvFklzfuQk4irNnMtiK8vT4Dm1
332
332
  flwr/server/typing.py,sha256=LvO6gq7H6TAWhA9JFx0WyqHxU7FycyvhSsLjBLPgpts,1011
333
333
  flwr/server/utils/__init__.py,sha256=U4gM84-uUFddarODDQkO6SjNUuGhFcsHJZMjSEbezkU,884
334
334
  flwr/server/utils/tensorboard.py,sha256=3z3MeF0cu_U6ghNgRd0UQ5bunyDQKxCLpIpEdGMoCJ0,5466
335
- flwr/server/utils/validator.py,sha256=_dFb6_aAqWSiTgFuR10p8PPRI1ojwf0GFXuT8kLL2H8,3612
335
+ flwr/server/utils/validator.py,sha256=ZDHWtDa2yFzicfUStIIzno8AZEeTCwERjBbuv_StAMs,3638
336
336
  flwr/server/workflow/__init__.py,sha256=N8G_xCBVrlV39Eov56bwImKMUTsqsaEoTCFYIQ0q8Bg,902
337
337
  flwr/server/workflow/constant.py,sha256=4t2MTvOJUlByJfuD9yZjl8Xn5SwBJQDBi15DphztXe8,1082
338
338
  flwr/server/workflow/default_workflows.py,sha256=RlD26dXbSksY-23f3ZspnN1YU1DOhDYOchMTEQvqFrM,13900
@@ -393,7 +393,7 @@ flwr/supercore/object_store/object_store.py,sha256=J-rI3X7ET-F6dqOyM-UfHKCCQtPJ_
393
393
  flwr/supercore/object_store/object_store_factory.py,sha256=QVwE2ywi7vsj2iKfvWWnNw3N_I7Rz91NUt2RpcbJ7iM,1527
394
394
  flwr/supercore/object_store/utils.py,sha256=DcPbrb9PenloAPoQRiKiXX9DrDfpXcSyY0cZpgn4PeQ,1680
395
395
  flwr/supercore/primitives/__init__.py,sha256=Tx8GOjnmMo8Y74RsDGrMpfr-E0Nl8dcUDF784_ge6F8,745
396
- flwr/supercore/primitives/asymmetric.py,sha256=g5NnE_4nnHjqOFCtSi3hVy2CdgQ_G9gcfbOtx-Kmkm0,3502
396
+ flwr/supercore/primitives/asymmetric.py,sha256=wpO0o0G_vStRknFitw2SqyIBSzaBfuXfMc44u-UcxTs,3774
397
397
  flwr/supercore/superexec/__init__.py,sha256=XKX208hZ6a9gZ4KT9kMqfpCtp_8VGxekzKFfHSu2esQ,707
398
398
  flwr/supercore/superexec/plugin/__init__.py,sha256=GNwq8uNdE8RB7ywEFRAvKjLFzgS3YXgz39-HBGsemWw,1035
399
399
  flwr/supercore/superexec/plugin/base_exec_plugin.py,sha256=fL-Ufc9Dp56OhWOzNSJUc7HumbkuSDYqZKwde2opG4g,2074
@@ -406,16 +406,16 @@ flwr/supercore/utils.py,sha256=ebuHMbeA8eXisX0oMPqBK3hk7uVnIE_yiqWVz8YbkpQ,1324
406
406
  flwr/superlink/__init__.py,sha256=GNSuJ4-N6Z8wun2iZNlXqENt5beUyzC0Gi_tN396bbM,707
407
407
  flwr/superlink/artifact_provider/__init__.py,sha256=pgZEcVPKRE874LSu3cgy0HbwSJBIpVy_HxQOmne4PAs,810
408
408
  flwr/superlink/artifact_provider/artifact_provider.py,sha256=Gnlg2M2SOqCruji2B0U3ov68NJWKin9scmnWJTiSnNA,1267
409
- flwr/superlink/auth_plugin/__init__.py,sha256=ApYBHnDmtv5gVrnxdFq97zC58O1icqHogK2Dz6o8DVI,1000
409
+ flwr/superlink/auth_plugin/__init__.py,sha256=2INKscgltOxVMGqwuc7YyS2suR0mmBent0F5UA7ToBQ,2111
410
410
  flwr/superlink/auth_plugin/auth_plugin.py,sha256=mKaR2HanhKHmVrcvGqTUv47ut458QgqVU6enU4myB7Y,3038
411
411
  flwr/superlink/auth_plugin/noop_auth_plugin.py,sha256=BQ1v1jFZen7AHh6Gwr9arElW3e9aAAKgOO4zKikbd_4,3044
412
412
  flwr/superlink/servicer/__init__.py,sha256=ZC-kILcUGeh6IxJsfu24cTzUqIGXmQfEKsGfhsnhBpM,717
413
413
  flwr/superlink/servicer/control/__init__.py,sha256=qhUTMt_Mg4lxslCJYn5hDSrA-lXf5ya3617BT8kR-2Y,803
414
414
  flwr/superlink/servicer/control/control_account_auth_interceptor.py,sha256=Tbi4WVfWlNsOO-NNbe9iLdYp0thkO5xisi5O8ebzuCs,6252
415
415
  flwr/superlink/servicer/control/control_event_log_interceptor.py,sha256=5uBl6VcJlUOgCF0d4kmsmJc1Rs1qxyouaZv0-uH2axs,5969
416
- flwr/superlink/servicer/control/control_grpc.py,sha256=xajQdX9WuKJmyXZJOaMZKeiSwgSCrile1NOErOiXR5w,4270
416
+ flwr/superlink/servicer/control/control_grpc.py,sha256=MRCaX4I2a5ogjKmhtFs6Mj-VdWemxL2h3gU9QbQmvCA,4183
417
417
  flwr/superlink/servicer/control/control_license_interceptor.py,sha256=T3AzmRt-PPwyTq3hrdpmZHQd5_CpPOk7TtnFZrB-JRY,3349
418
- flwr/superlink/servicer/control/control_servicer.py,sha256=DJaHBHNRS_9UVuqAk9ELu-1IfmFNVbt3SilYG1awaXQ,19092
418
+ flwr/superlink/servicer/control/control_servicer.py,sha256=qQHmhKjn2iIssO63dHSnrK6dZsh_jZrxpSAYH_qV5gA,20550
419
419
  flwr/supernode/__init__.py,sha256=KgeCaVvXWrU3rptNR1y0oBp4YtXbAcrnCcJAiOoWkI4,707
420
420
  flwr/supernode/cli/__init__.py,sha256=JuEMr0-s9zv-PEWKuLB9tj1ocNfroSyNJ-oyv7ati9A,887
421
421
  flwr/supernode/cli/flower_supernode.py,sha256=7aBm0z03OU-npVd1onLCvUotyhSvlZLxAnFkGVMhZcw,8670
@@ -430,7 +430,7 @@ flwr/supernode/servicer/__init__.py,sha256=lucTzre5WPK7G1YLCfaqg3rbFWdNSb7ZTt-ca
430
430
  flwr/supernode/servicer/clientappio/__init__.py,sha256=7Oy62Y_oijqF7Dxi6tpcUQyOpLc_QpIRZ83NvwmB0Yg,813
431
431
  flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=nIHRu38EWK-rpNOkcgBRAAKwYQQWFeCwu0lkO7OPZGQ,10239
432
432
  flwr/supernode/start_client_internal.py,sha256=Y9S1-QlO2WP6eo4JvWzIpfaCoh2aoE7bjEYyxNNnlyg,20777
433
- flwr_nightly-1.23.0.dev20251007.dist-info/METADATA,sha256=BTnTS1rjPnKyvChtLD-tLZYUSZbQdqpXxZOVL-ghaE4,14559
434
- flwr_nightly-1.23.0.dev20251007.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
435
- flwr_nightly-1.23.0.dev20251007.dist-info/entry_points.txt,sha256=hxHD2ixb_vJFDOlZV-zB4Ao32_BQlL34ftsDh1GXv14,420
436
- flwr_nightly-1.23.0.dev20251007.dist-info/RECORD,,
433
+ flwr_nightly-1.23.0.dev20251009.dist-info/METADATA,sha256=nMVwZLSs8j0TOeit4rAO1115tiDWlzUzILtD3m5UvAQ,14559
434
+ flwr_nightly-1.23.0.dev20251009.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
435
+ flwr_nightly-1.23.0.dev20251009.dist-info/entry_points.txt,sha256=hxHD2ixb_vJFDOlZV-zB4Ao32_BQlL34ftsDh1GXv14,420
436
+ flwr_nightly-1.23.0.dev20251009.dist-info/RECORD,,