flwr-nightly 1.13.0.dev20241113__py3-none-any.whl → 1.13.0.dev20241115__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 (36) hide show
  1. flwr/cli/app.py +2 -0
  2. flwr/cli/ls.py +228 -0
  3. flwr/client/app.py +58 -13
  4. flwr/client/clientapp/app.py +34 -23
  5. flwr/client/grpc_rere_client/connection.py +2 -12
  6. flwr/client/rest_client/connection.py +4 -14
  7. flwr/client/supernode/app.py +56 -18
  8. flwr/common/constant.py +21 -6
  9. flwr/common/serde.py +10 -0
  10. flwr/common/typing.py +31 -10
  11. flwr/proto/exec_pb2.py +22 -13
  12. flwr/proto/exec_pb2.pyi +44 -0
  13. flwr/proto/exec_pb2_grpc.py +34 -0
  14. flwr/proto/exec_pb2_grpc.pyi +13 -0
  15. flwr/proto/run_pb2.py +30 -30
  16. flwr/proto/run_pb2.pyi +18 -1
  17. flwr/server/app.py +37 -12
  18. flwr/server/driver/grpc_driver.py +4 -14
  19. flwr/server/run_serverapp.py +8 -238
  20. flwr/server/serverapp/app.py +33 -22
  21. flwr/server/superlink/fleet/rest_rere/rest_api.py +10 -9
  22. flwr/server/superlink/linkstate/in_memory_linkstate.py +71 -46
  23. flwr/server/superlink/linkstate/linkstate.py +19 -5
  24. flwr/server/superlink/linkstate/sqlite_linkstate.py +79 -111
  25. flwr/server/superlink/linkstate/utils.py +182 -3
  26. flwr/simulation/app.py +3 -3
  27. flwr/simulation/legacy_app.py +21 -1
  28. flwr/simulation/run_simulation.py +7 -18
  29. flwr/simulation/simulationio_connection.py +2 -2
  30. flwr/superexec/deployment.py +9 -5
  31. flwr/superexec/exec_servicer.py +31 -2
  32. {flwr_nightly-1.13.0.dev20241113.dist-info → flwr_nightly-1.13.0.dev20241115.dist-info}/METADATA +2 -1
  33. {flwr_nightly-1.13.0.dev20241113.dist-info → flwr_nightly-1.13.0.dev20241115.dist-info}/RECORD +36 -35
  34. {flwr_nightly-1.13.0.dev20241113.dist-info → flwr_nightly-1.13.0.dev20241115.dist-info}/LICENSE +0 -0
  35. {flwr_nightly-1.13.0.dev20241113.dist-info → flwr_nightly-1.13.0.dev20241115.dist-info}/WHEEL +0 -0
  36. {flwr_nightly-1.13.0.dev20241113.dist-info → flwr_nightly-1.13.0.dev20241115.dist-info}/entry_points.txt +0 -0
flwr/simulation/app.py CHANGED
@@ -119,7 +119,7 @@ def flwr_simulation() -> None:
119
119
  args.superlink,
120
120
  )
121
121
  run_simulation_process(
122
- superlink=args.superlink,
122
+ simulationio_api_address=args.superlink,
123
123
  log_queue=log_queue,
124
124
  run_once=args.run_once,
125
125
  flwr_dir_=args.flwr_dir,
@@ -131,7 +131,7 @@ def flwr_simulation() -> None:
131
131
 
132
132
 
133
133
  def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R0915
134
- superlink: str,
134
+ simulationio_api_address: str,
135
135
  log_queue: Queue[Optional[str]],
136
136
  run_once: bool,
137
137
  flwr_dir_: Optional[str] = None,
@@ -139,7 +139,7 @@ def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R09
139
139
  ) -> None:
140
140
  """Run Flower Simulation process."""
141
141
  conn = SimulationIoConnection(
142
- simulationio_service_address=superlink,
142
+ simulationio_service_address=simulationio_api_address,
143
143
  root_certificates=certificates,
144
144
  )
145
145
 
@@ -30,7 +30,12 @@ from ray.util.scheduling_strategies import NodeAffinitySchedulingStrategy
30
30
  from flwr.client import ClientFnExt
31
31
  from flwr.common import EventType, event
32
32
  from flwr.common.constant import NODE_ID_NUM_BYTES
33
- from flwr.common.logger import log, set_logger_propagation, warn_unsupported_feature
33
+ from flwr.common.logger import (
34
+ log,
35
+ set_logger_propagation,
36
+ warn_deprecated_feature,
37
+ warn_unsupported_feature,
38
+ )
34
39
  from flwr.server.client_manager import ClientManager
35
40
  from flwr.server.history import History
36
41
  from flwr.server.server import Server, init_defaults, run_fl
@@ -108,6 +113,11 @@ def start_simulation(
108
113
  ) -> History:
109
114
  """Start a Ray-based Flower simulation server.
110
115
 
116
+ Warning
117
+ -------
118
+ This function is deprecated since 1.13.0. Use :code: `flwr run` to start a Flower
119
+ simulation.
120
+
111
121
  Parameters
112
122
  ----------
113
123
  client_fn : ClientFnExt
@@ -183,6 +193,16 @@ def start_simulation(
183
193
  Object containing metrics from training.
184
194
  """ # noqa: E501
185
195
  # pylint: disable-msg=too-many-locals
196
+ msg = (
197
+ "flwr.simulation.start_simulation() is deprecated."
198
+ "\n\tInstead, use the `flwr run` CLI command to start a local simulation "
199
+ "in your Flower app, as shown for example below:"
200
+ "\n\n\t\t$ flwr new # Create a new Flower app from a template"
201
+ "\n\n\t\t$ flwr run # Run the Flower app in Simulation Mode"
202
+ "\n\n\tUsing `start_simulation()` is deprecated."
203
+ )
204
+ warn_deprecated_feature(name=msg)
205
+
186
206
  event(
187
207
  EventType.START_SIMULATION_ENTER,
188
208
  {"num_clients": len(clients_ids) if clients_ids is not None else num_clients},
@@ -123,13 +123,8 @@ def run_simulation_from_cli() -> None:
123
123
  fused_config = get_fused_config_from_dir(app_path, override_config)
124
124
 
125
125
  # Create run
126
- run = Run(
127
- run_id=run_id,
128
- fab_id="",
129
- fab_version="",
130
- fab_hash="",
131
- override_config=override_config,
132
- )
126
+ run = Run.create_empty(run_id)
127
+ run.override_config = override_config
133
128
 
134
129
  _run_simulation(
135
130
  server_app_attr=server_app_attr,
@@ -333,14 +328,10 @@ def _main_loop(
333
328
  try:
334
329
  # Register run
335
330
  log(DEBUG, "Pre-registering run with id %s", run.run_id)
336
- init_status = RunStatus(Status.RUNNING, "", "")
337
- state_factory.state().run_ids[run.run_id] = RunRecord( # type: ignore
338
- run=run,
339
- status=init_status,
340
- starting_at=now().isoformat(),
341
- running_at=now().isoformat(),
342
- finished_at="",
343
- )
331
+ run.status = RunStatus(Status.RUNNING, "", "")
332
+ run.starting_at = now().isoformat()
333
+ run.running_at = run.starting_at
334
+ state_factory.state().run_ids[run.run_id] = RunRecord(run=run) # type: ignore
344
335
 
345
336
  if server_app_run_config is None:
346
337
  server_app_run_config = {}
@@ -457,9 +448,7 @@ def _run_simulation(
457
448
  # If no `Run` object is set, create one
458
449
  if run is None:
459
450
  run_id = generate_rand_int_from_bytes(RUN_ID_NUM_BYTES)
460
- run = Run(
461
- run_id=run_id, fab_id="", fab_version="", fab_hash="", override_config={}
462
- )
451
+ run = Run.create_empty(run_id=run_id)
463
452
 
464
453
  args = (
465
454
  num_supernodes,
@@ -20,7 +20,7 @@ from typing import Optional, cast
20
20
 
21
21
  import grpc
22
22
 
23
- from flwr.common.constant import SIMULATIONIO_API_DEFAULT_ADDRESS
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
26
  from flwr.proto.simulationio_pb2_grpc import SimulationIoStub # pylint: disable=E0611
@@ -41,7 +41,7 @@ class SimulationIoConnection:
41
41
 
42
42
  def __init__( # pylint: disable=too-many-arguments
43
43
  self,
44
- simulationio_service_address: str = SIMULATIONIO_API_DEFAULT_ADDRESS,
44
+ simulationio_service_address: str = SIMULATIONIO_API_DEFAULT_CLIENT_ADDRESS,
45
45
  root_certificates: Optional[bytes] = None,
46
46
  ) -> None:
47
47
  self._addr = simulationio_service_address
@@ -23,7 +23,11 @@ from typing_extensions import override
23
23
 
24
24
  from flwr.cli.config_utils import get_fab_metadata
25
25
  from flwr.common import ConfigsRecord, Context, RecordSet
26
- from flwr.common.constant import SERVERAPPIO_API_DEFAULT_ADDRESS, Status, SubStatus
26
+ from flwr.common.constant import (
27
+ SERVERAPPIO_API_DEFAULT_CLIENT_ADDRESS,
28
+ Status,
29
+ SubStatus,
30
+ )
27
31
  from flwr.common.logger import log
28
32
  from flwr.common.typing import Fab, RunStatus, UserConfig
29
33
  from flwr.server.superlink.ffs import Ffs
@@ -38,7 +42,7 @@ class DeploymentEngine(Executor):
38
42
 
39
43
  Parameters
40
44
  ----------
41
- superlink: str (default: "0.0.0.0:9091")
45
+ serverappio_api_address: str (default: "127.0.0.1:9091")
42
46
  Address of the SuperLink to connect to.
43
47
  root_certificates: Optional[str] (default: None)
44
48
  Specifies the path to the PEM-encoded root certificate file for
@@ -49,11 +53,11 @@ class DeploymentEngine(Executor):
49
53
 
50
54
  def __init__(
51
55
  self,
52
- superlink: str = SERVERAPPIO_API_DEFAULT_ADDRESS,
56
+ serverappio_api_address: str = SERVERAPPIO_API_DEFAULT_CLIENT_ADDRESS,
53
57
  root_certificates: Optional[str] = None,
54
58
  flwr_dir: Optional[str] = None,
55
59
  ) -> None:
56
- self.superlink = superlink
60
+ self.serverappio_api_address = serverappio_api_address
57
61
  if root_certificates is None:
58
62
  self.root_certificates = None
59
63
  self.root_certificates_bytes = None
@@ -110,7 +114,7 @@ class DeploymentEngine(Executor):
110
114
  if superlink_address := config.get("superlink"):
111
115
  if not isinstance(superlink_address, str):
112
116
  raise ValueError("The `superlink` value should be of type `str`.")
113
- self.superlink = superlink_address
117
+ self.serverappio_api_address = superlink_address
114
118
  if root_certificates := config.get("root-certificates"):
115
119
  if not isinstance(root_certificates, str):
116
120
  raise ValueError(
@@ -22,18 +22,25 @@ from typing import Any
22
22
 
23
23
  import grpc
24
24
 
25
+ from flwr.common import now
25
26
  from flwr.common.constant import LOG_STREAM_INTERVAL, Status
26
27
  from flwr.common.logger import log
27
- from flwr.common.serde import configs_record_from_proto, user_config_from_proto
28
+ from flwr.common.serde import (
29
+ configs_record_from_proto,
30
+ run_to_proto,
31
+ user_config_from_proto,
32
+ )
28
33
  from flwr.proto import exec_pb2_grpc # pylint: disable=E0611
29
34
  from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
35
+ ListRunsRequest,
36
+ ListRunsResponse,
30
37
  StartRunRequest,
31
38
  StartRunResponse,
32
39
  StreamLogsRequest,
33
40
  StreamLogsResponse,
34
41
  )
35
42
  from flwr.server.superlink.ffs.ffs_factory import FfsFactory
36
- from flwr.server.superlink.linkstate import LinkStateFactory
43
+ from flwr.server.superlink.linkstate import LinkState, LinkStateFactory
37
44
 
38
45
  from .executor import Executor
39
46
 
@@ -105,3 +112,25 @@ class ExecServicer(exec_pb2_grpc.ExecServicer):
105
112
  context.cancel()
106
113
 
107
114
  time.sleep(LOG_STREAM_INTERVAL) # Sleep briefly to avoid busy waiting
115
+
116
+ def ListRuns(
117
+ self, request: ListRunsRequest, context: grpc.ServicerContext
118
+ ) -> ListRunsResponse:
119
+ """Handle `flwr ls` command."""
120
+ log(INFO, "ExecServicer.List")
121
+ state = self.linkstate_factory.state()
122
+
123
+ # Handle `flwr ls --runs`
124
+ if not request.HasField("run_id"):
125
+ return _create_list_runs_response(state.get_run_ids(), state)
126
+ # Handle `flwr ls --run-id <run_id>`
127
+ return _create_list_runs_response({request.run_id}, state)
128
+
129
+
130
+ def _create_list_runs_response(run_ids: set[int], state: LinkState) -> ListRunsResponse:
131
+ """Create response for `flwr ls --runs` and `flwr ls --run-id <run_id>`."""
132
+ run_dict = {run_id: state.get_run(run_id) for run_id in run_ids}
133
+ return ListRunsResponse(
134
+ run_dict={run_id: run_to_proto(run) for run_id, run in run_dict.items() if run},
135
+ now=now().isoformat(),
136
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.13.0.dev20241113
3
+ Version: 1.13.0.dev20241115
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -42,6 +42,7 @@ Requires-Dist: protobuf (>=4.25.2,<5.0.0)
42
42
  Requires-Dist: pycryptodome (>=3.18.0,<4.0.0)
43
43
  Requires-Dist: ray (==2.10.0) ; (python_version >= "3.9" and python_version < "3.12") and (extra == "simulation")
44
44
  Requires-Dist: requests (>=2.31.0,<3.0.0) ; extra == "rest"
45
+ Requires-Dist: rich (>=13.5.0,<14.0.0)
45
46
  Requires-Dist: starlette (>=0.31.0,<0.32.0) ; extra == "rest"
46
47
  Requires-Dist: tomli (>=2.0.1,<3.0.0)
47
48
  Requires-Dist: tomli-w (>=1.0.0,<2.0.0)
@@ -1,11 +1,12 @@
1
1
  flwr/__init__.py,sha256=VmBWedrCxqmt4QvUHBLqyVEH6p7zaFMD_oCHerXHSVw,937
2
2
  flwr/cli/__init__.py,sha256=cZJVgozlkC6Ni2Hd_FAIrqefrkCGOV18fikToq-6iLw,720
3
- flwr/cli/app.py,sha256=_HDs7HS12Dp7NXIyVrkPs1SKJq3x-XvVZd6y1lvyud4,1255
3
+ flwr/cli/app.py,sha256=h1RCGBUtiL1JTC6yoihlOlB-k4imJ0ToS8uG4haFiyU,1292
4
4
  flwr/cli/build.py,sha256=a_43l2HL2K1z2x_IJGUw_4KrEZrJiiw_yVq_bdUyFes,7457
5
5
  flwr/cli/config_utils.py,sha256=n-xNkQG_0POz5UUHyE00lthNaOjuS6IYU9Thzb_BThs,11431
6
6
  flwr/cli/example.py,sha256=1bGDYll3BXQY2kRqSN-oICqS5n1b9m0g0RvXTopXHl4,2215
7
7
  flwr/cli/install.py,sha256=kDLZDZpIVIK9GaNdxCEHHAEAfqo5IfdG2P2SRZHjSDI,8695
8
8
  flwr/cli/log.py,sha256=WlAuxZdTUYZ5bRKkm0jLWrOxHTS0TlSA5BeDtO9xF3k,6659
9
+ flwr/cli/ls.py,sha256=lUXG07ebrq0bYOWdZk9i8pslvmou_v6DNiuj_PugOqY,7704
9
10
  flwr/cli/new/__init__.py,sha256=cQzK1WH4JP2awef1t2UQ2xjl1agVEz9rwutV18SWV1k,789
10
11
  flwr/cli/new/new.py,sha256=uSiG7aXQzPDnikv2YcjQ86OOLqint0hNWCI0fSQD0jI,9634
11
12
  flwr/cli/new/templates/__init__.py,sha256=4luU8RL-CK8JJCstQ_ON809W9bNTkY1l9zSaPKBkgwY,725
@@ -64,11 +65,11 @@ flwr/cli/run/__init__.py,sha256=oCd6HmQDx-sqver1gecgx-uMA38BLTSiiKpl7RGNceg,789
64
65
  flwr/cli/run/run.py,sha256=TQm7M0a-oSeNXPCsn75qYrkGB0IPbk0HulcYk1gwmR0,6293
65
66
  flwr/cli/utils.py,sha256=emMUdthvoHBTB0iGQp-oFBmA5wV46lw3y3FmfXQPCsc,4500
66
67
  flwr/client/__init__.py,sha256=DGDoO0AEAfz-0CUFmLdyUUweAS64-07AOnmDfWUefK4,1192
67
- flwr/client/app.py,sha256=zpYl6I6_1-5BEv93IqGIBX_FDpEvOSYFhDidWjq0K8U,32975
68
+ flwr/client/app.py,sha256=1XroQmYNXSoTTVIWpKcCqkYYgnBMMVNtB6fPrZmd3ok,34980
68
69
  flwr/client/client.py,sha256=gy6WVlMUFAp8oevN4xpQPX30vPOIYGVqdbuFlTWkyG4,9080
69
70
  flwr/client/client_app.py,sha256=cTig-N00YzTucbo9zNi6I21J8PlbflU_8J_f5CI-Wpw,10390
70
71
  flwr/client/clientapp/__init__.py,sha256=kZqChGnTChQ1WGSUkIlW2S5bc0d0mzDubCAmZUGRpEY,800
71
- flwr/client/clientapp/app.py,sha256=0JavWMbSYM2IIXUZ5SfHNeV1lgCJs4sYJhoOKf8g9JE,8020
72
+ flwr/client/clientapp/app.py,sha256=W6wOlysris-JGKM5Wq-OrYNHl7rYgaAepEaRI1wMWo4,8725
72
73
  flwr/client/clientapp/clientappio_servicer.py,sha256=5L6bjw_j3Mnx9kRFwYwxDNABKurBO5q1jZOWE_X11wQ,8522
73
74
  flwr/client/clientapp/utils.py,sha256=Xg23Q7g7r9jrxXEbvJ9wXal_uAqYK3mi087u0QER6-I,4343
74
75
  flwr/client/dpfedavg_numpy_client.py,sha256=4KsEvzavDKyVDU1V0kMqffTwu1lNdUCYQN-i0DTYVN8,7404
@@ -78,7 +79,7 @@ flwr/client/grpc_client/__init__.py,sha256=LsnbqXiJhgQcB0XzAlUQgPx011Uf7Y7yabIC1
78
79
  flwr/client/grpc_client/connection.py,sha256=Y9yJkRvGypulerX9fviP4axF5XBTBnvYrsp2mv5OS9E,9411
79
80
  flwr/client/grpc_rere_client/__init__.py,sha256=MK-oSoV3kwUEQnIwl0GN4OpiHR7eLOrMA8ikunET130,752
80
81
  flwr/client/grpc_rere_client/client_interceptor.py,sha256=q08lIEeJLvvonNOiejNXvmySbPObteGnbDHhEKDmWzE,5380
81
- flwr/client/grpc_rere_client/connection.py,sha256=RALwGBVQGudzNhQvLaaTNrwxABWeghzQO7FpFmUM9is,11156
82
+ flwr/client/grpc_rere_client/connection.py,sha256=c3s-79EToJymlCDNu5aIwu3qZ9XW8DMNGXoOG6fR52E,10929
82
83
  flwr/client/grpc_rere_client/grpc_adapter.py,sha256=sQo0I9T65t97LFGoW_PrmgaTbd18GFgi2DoAI5wQJ4k,5589
83
84
  flwr/client/heartbeat.py,sha256=cx37mJBH8LyoIN4Lks85wtqT1mnU5GulQnr4pGCvAq0,2404
84
85
  flwr/client/message_handler/__init__.py,sha256=QxxQuBNpFPTHx3KiUNvQSlqMKlEnbRR1kFfc1KVje08,719
@@ -98,16 +99,16 @@ flwr/client/nodestate/nodestate.py,sha256=2sSziyHK65ygayLcEoR78erqyrRe10tZ2tB-QI
98
99
  flwr/client/nodestate/nodestate_factory.py,sha256=LipmYzjYlN2U-CYN20d8Kk0PXyCAJq3L3VQFc6QscJc,1429
99
100
  flwr/client/numpy_client.py,sha256=tqGyhIkeeZQGr65BR03B7TWgx4rW3FA7G2874D8z_VU,11167
100
101
  flwr/client/rest_client/__init__.py,sha256=5KGlp7pjc1dhNRkKlaNtUfQmg8wrRFh9lS3P3uRS-7Q,735
101
- flwr/client/rest_client/connection.py,sha256=k-RqgUFqidACAGlMFPIUM8aawXI5h2LvKUri2OAK7Bg,12817
102
+ flwr/client/rest_client/connection.py,sha256=cBLtI-nUTELn5zpS42sbnc--0wxc1DdHkVGAlfRSc2Y,12626
102
103
  flwr/client/run_info_store.py,sha256=ZN2Phi4DSLbSyzg8RmzJcVYh1g6eurHOmWRCT7GMtw4,4040
103
104
  flwr/client/supernode/__init__.py,sha256=SUhWOzcgXRNXk1V9UgB5-FaWukqqrOEajVUHEcPkwyQ,865
104
- flwr/client/supernode/app.py,sha256=Frtf7UuARUN_mYHISJnThec3IxVBa5-5BoZcyjkoodg,11066
105
+ flwr/client/supernode/app.py,sha256=gb7tkT3l6tF2hOumeaELDQFvnTHwtvt5rSELVXUsTdo,12363
105
106
  flwr/client/typing.py,sha256=dxoTBnTMfqXr5J7G3y-uNjqxYCddvxhu89spfj4Lm2U,1048
106
107
  flwr/common/__init__.py,sha256=TVaoFEJE158aui1TPZQiJCDZX4RNHRyI8I55VC80HhI,3901
107
108
  flwr/common/address.py,sha256=7kM2Rqjw86-c8aKwAvrXerWqznnVv4TFJ62aSAeTn10,3017
108
109
  flwr/common/args.py,sha256=y9qtPIwyijegNi0GbQT5ddRtMUITM-DlgilC1Co-nvw,6133
109
110
  flwr/common/config.py,sha256=qC1QvGAGr4faBtg3Y5dWhfyK5FggyWUMjPqg-Rx_FW4,8083
110
- flwr/common/constant.py,sha256=D7MNLl1u-P7tJAMdT67xIujSeCibc2QzqtFoqCagoco,4731
111
+ flwr/common/constant.py,sha256=41xaDQdeDMowFQ3Y34V132ICftGJJ2cVrZYyBmu6FZg,5418
111
112
  flwr/common/context.py,sha256=uJ-mnoC_8y_udEb3kAX-r8CPphNTWM72z1AlsvQEu54,2403
112
113
  flwr/common/date.py,sha256=NHHpESce5wYqEwoDXf09gp9U9l_5Bmlh2BsOcwS-kDM,1554
113
114
  flwr/common/differential_privacy.py,sha256=XwcJ3rWr8S8BZUocc76vLSJAXIf6OHnWkBV6-xlIRuw,6106
@@ -137,9 +138,9 @@ flwr/common/secure_aggregation/ndarrays_arithmetic.py,sha256=zvVAIrIyI6OSzGhpCi8
137
138
  flwr/common/secure_aggregation/quantization.py,sha256=mC4uLf05zeONo8Ke-BY0Tj8UCMOS7VD93zHCzuv3MHU,2304
138
139
  flwr/common/secure_aggregation/secaggplus_constants.py,sha256=9MF-oQh62uD7rt9VeNB-rHf2gBLd5GL3S9OejCxmILY,2183
139
140
  flwr/common/secure_aggregation/secaggplus_utils.py,sha256=o7IhHH6J9xqinhQy3TdPgQpoj1XyEpyv3OQFyx81RVQ,3193
140
- flwr/common/serde.py,sha256=_z7-2XC-ecfEPzv2wEjJMTp9YH5FJqgQrTBZneDmhzA,30630
141
+ flwr/common/serde.py,sha256=K9ExsqcTPETESkt2HMaNtIQAIAfwmuwtJFlG-59I7Sw,31046
141
142
  flwr/common/telemetry.py,sha256=20AYNaePOBaSEh99PIuBrxRxtY53-kZ5-2Ej0JWUJmc,8731
142
- flwr/common/typing.py,sha256=gk9B685P9_TctGOU0wxTlCRTxHbeaESn5TZiR9v6S0E,5104
143
+ flwr/common/typing.py,sha256=RLq2f9jhE_Nndtk023cPMG0LpoQHaacEsww-3j0xs4Q,5710
143
144
  flwr/common/version.py,sha256=tCcl_FvxVK206C1dxIJCs4TjL06WmyaODBP19FRHE1c,1324
144
145
  flwr/proto/__init__.py,sha256=hbY7JYakwZwCkYgCNlmHdc8rtvfoJbAZLalMdc--CGc,683
145
146
  flwr/proto/clientappio_pb2.py,sha256=Y3PMv-JMaBGehpslgbvGY6l2u5vNpfCTFWu-fmAmBJ4,3703
@@ -158,10 +159,10 @@ flwr/proto/error_pb2.py,sha256=LarjKL90LbwkXKlhzNrDssgl4DXcvIPve8NVCXHpsKA,1084
158
159
  flwr/proto/error_pb2.pyi,sha256=ZNH4HhJTU_KfMXlyCeg8FwU-fcUYxTqEmoJPtWtHikc,734
159
160
  flwr/proto/error_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
160
161
  flwr/proto/error_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
161
- flwr/proto/exec_pb2.py,sha256=e6a-KKc5o7bI5BpdfxmZR-nIj2_RMcIBUVOUnaUU_vA,2976
162
- flwr/proto/exec_pb2.pyi,sha256=bz1Ld0GmofBRrkr04ustaRToCAWx1AWShxjhJYiwAo0,3906
163
- flwr/proto/exec_pb2_grpc.py,sha256=faAN19XEMP8GTKrcIU6jvlWkN44n2KiUsZh_OG0sYcg,4072
164
- flwr/proto/exec_pb2_grpc.pyi,sha256=VrFhT1Um3Nb8UC2YqnR9GIiM-Yyx0FqaxVOWljh-G_w,1208
162
+ flwr/proto/exec_pb2.py,sha256=uKvQah9kbPj9PpduEFqpxYX0t_yWjHDMa5IBwl7vqKA,4022
163
+ flwr/proto/exec_pb2.pyi,sha256=RJUqVsDKDZAxRSypeM4rhg4PCYsal_iVomps3GA_T_Y,6016
164
+ flwr/proto/exec_pb2_grpc.py,sha256=kPXb_vp2Swl-1nkQEHJaqXKXi9P8pauBFemboGFgI9Q,5621
165
+ flwr/proto/exec_pb2_grpc.pyi,sha256=qnefAjYPdWs-yYTPIfsbecoKWbVKjp6IFZHwN82ZGUo,1601
165
166
  flwr/proto/fab_pb2.py,sha256=3QSDq9pjbZoqVxsmCRDwHO5PrSjzn2vixjYxE-qPmb0,1589
166
167
  flwr/proto/fab_pb2.pyi,sha256=fXI108QaFtbl1WWTyslPbIx9c_19D0aYCoFn0xYtL4U,2277
167
168
  flwr/proto/fab_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
@@ -190,8 +191,8 @@ flwr/proto/recordset_pb2.py,sha256=XjEIDU-YlKSY59qNd0qXTFB4COvMHGiszQ5O1krJ1Ks,6
190
191
  flwr/proto/recordset_pb2.pyi,sha256=ypFNvroU4aIlnN0D6W4XAsOfm0UzTfXhxxL1v7u__Ac,15370
191
192
  flwr/proto/recordset_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
192
193
  flwr/proto/recordset_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
193
- flwr/proto/run_pb2.py,sha256=RDTp7PlvPT-1p0uUYpaQUk4bw1mYr7lktuKA7uRPfrg,5516
194
- flwr/proto/run_pb2.pyi,sha256=M9Zdokby10jr_sBlNIFBYad97Dre0sz5AB7JI4b9OgY,10903
194
+ flwr/proto/run_pb2.py,sha256=J2TQwf-S0o9ImGuQLrczw99S0GSXm6hk-npJ8rXAC0Y,5743
195
+ flwr/proto/run_pb2.pyi,sha256=i6TEwphuFH94_kT2hZWb_RjndLuphkPrT3C2VP-NnVs,11739
195
196
  flwr/proto/run_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
196
197
  flwr/proto/run_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
197
198
  flwr/proto/serverappio_pb2.py,sha256=zWnODeaj26oSx98-BFvwtWM_fYvsw9OeSIuV7JnKVvw,4822
@@ -212,7 +213,7 @@ flwr/proto/transport_pb2_grpc.py,sha256=vLN3EHtx2aEEMCO4f1Upu-l27BPzd3-5pV-u8wPc
212
213
  flwr/proto/transport_pb2_grpc.pyi,sha256=AGXf8RiIiW2J5IKMlm_3qT3AzcDa4F3P5IqUjve_esA,766
213
214
  flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
214
215
  flwr/server/__init__.py,sha256=cEg1oecBu4cKB69iJCqWEylC8b5XW47bl7rQiJsdTvM,1528
215
- flwr/server/app.py,sha256=WywamOGVl1vPPKU8oO0CxX_rurZ5D_hh-s9FrFGfLlI,27818
216
+ flwr/server/app.py,sha256=UAynn_AmJotTMS8ebY1Gqe7Qft9slSlSMKyWfnriB7M,28919
216
217
  flwr/server/client_manager.py,sha256=7Ese0tgrH-i-ms363feYZJKwB8gWnXSmg_hYF2Bju4U,6227
217
218
  flwr/server/client_proxy.py,sha256=4G-oTwhb45sfWLx2uZdcXD98IZwdTS6F88xe3akCdUg,2399
218
219
  flwr/server/compat/__init__.py,sha256=VxnJtJyOjNFQXMNi9hIuzNlZM5n0Hj1p3aq_Pm2udw4,892
@@ -223,15 +224,15 @@ flwr/server/compat/legacy_context.py,sha256=wBzBcfV6YO6IQGriM_FdJ5XZfiBBEEJdS_Od
223
224
  flwr/server/criterion.py,sha256=ypbAexbztzGUxNen9RCHF91QeqiEQix4t4Ih3E-42MM,1061
224
225
  flwr/server/driver/__init__.py,sha256=bikRv6CjTwSvYh7tf10gziU5o2YotOWhhftz2tr3KDc,886
225
226
  flwr/server/driver/driver.py,sha256=u_fMfqLYTroTafGCNwKPHI4lttRL-Z5CqeT3_FHSq-Q,5701
226
- flwr/server/driver/grpc_driver.py,sha256=4_bJGbeiLV2FTrJseClnsFf2TgitwjwYNO_5sm2FltY,9533
227
+ flwr/server/driver/grpc_driver.py,sha256=lIOeAPvTIRAebRitTONZE1ji4UTGjIsMor-dW_X8eDw,9300
227
228
  flwr/server/driver/inmemory_driver.py,sha256=gfB4jmkk1indhRa9XCdKCXghVcWBF1qBD-tAxMUyQm0,6404
228
229
  flwr/server/history.py,sha256=qSb5_pPTrwofpSYGsZWzMPkl_4uJ4mJFWesxXDrEvDU,5026
229
- flwr/server/run_serverapp.py,sha256=zvH7XEJt0WpTeDTTf-67VvugCRuaItMm7klSOcbhFIU,10559
230
+ flwr/server/run_serverapp.py,sha256=oDfHaHyVT5BRcckFFQKg8AVPCWR1ek7OhNceTC8qq9g,2493
230
231
  flwr/server/server.py,sha256=1ZsFEptmAV-L2vP2etNC9Ed5CLSxpuKzUFkAPQ4l5Xc,17893
231
232
  flwr/server/server_app.py,sha256=RsgS6PRS5Z74cMUAHzsm8r3LWddwn00MjRs6rlacHt8,6297
232
233
  flwr/server/server_config.py,sha256=CZaHVAsMvGLjpWVcLPkiYxgJN4xfIyAiUrCI3fETKY4,1349
233
234
  flwr/server/serverapp/__init__.py,sha256=L0K-94UDdTyEZ8LDtYybGIIIv3HW6AhSVjXMUfYJQnQ,800
234
- flwr/server/serverapp/app.py,sha256=nry-yzJIQZBacbln2cUO-mJ0qGvGvsWsdDXapjm8zI0,7067
235
+ flwr/server/serverapp/app.py,sha256=Fa26GCuq53cJYH7cII8iaEq8EtfLrNB90MOeHzU81EE,7554
235
236
  flwr/server/serverapp_components.py,sha256=-IV_CitOfrJclJj2jNdbN1Q65PyFmtKtrTIg1hc6WQw,2118
236
237
  flwr/server/strategy/__init__.py,sha256=tQer2SwjDnvgFFuJMZM-S01Z615N5XK6MaCvpm4BMU0,2836
237
238
  flwr/server/strategy/aggregate.py,sha256=PDvekufza13s9AsVmz9WASunaBs3yCtl8JVliFx9j6Q,13978
@@ -279,18 +280,18 @@ flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=iZlgW7L5oVG_0
279
280
  flwr/server/superlink/fleet/message_handler/__init__.py,sha256=h8oLD7uo5lKICPy0rRdKRjTYe62u8PKkT_fA4xF5JPA,731
280
281
  flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=WAis2WPj0L91HSfOZqX-k0n9Rs3igdARKRMsV1VlTnY,4465
281
282
  flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=5jbYbAn75sGv-gBwOPDySE0kz96F6dTYLeMrGqNi4lM,735
282
- flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=ob_LZopJPOtesWeE5MJkIJdFOi1G7C7T8SdOyf8Q5xE,6360
283
+ flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=WX-CiZVa4ntzMlZfBzKJtOsliP1Sm7GyHhPMqVXaehg,6605
283
284
  flwr/server/superlink/fleet/vce/__init__.py,sha256=36MHKiefnJeyjwMQzVUK4m06Ojon3WDcwZGQsAcyVhQ,783
284
285
  flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=Onq16E2M2Wha2K1zvhcquT1jOveQL2cgIrgqWvAPH9Y,1436
285
286
  flwr/server/superlink/fleet/vce/backend/backend.py,sha256=LBAQxnbfPAphVOVIvYMj0QIvVP5O-RQxKQlUGNUj974,2194
286
287
  flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=7kB3re3mR53b7E6L6DPSioTSKD3YGtS3uJsPD7Hn2Fw,7155
287
288
  flwr/server/superlink/fleet/vce/vce_api.py,sha256=VL6e_Jwf4uxA-X1EelxJZMv6Eji-_p2J9D0MdHG10a4,13029
288
289
  flwr/server/superlink/linkstate/__init__.py,sha256=v-2JyJlCB3qyhMNwMjmcNVOq4rkooqFU0LHH8Zo1jls,1064
289
- flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=BvjS1Bf99MqSU4URrK5GEuCVWzeIky0XRxg6p7T0rnI,21341
290
- flwr/server/superlink/linkstate/linkstate.py,sha256=dE82L6FTOiUqdQY1SejQwzrA0N5AwsoWw7Fm4TXfdTs,11861
290
+ flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=TRayqT_pKB0JfdsAYXwtuXyG4d3vYD_vhvYixhTlAec,22327
291
+ flwr/server/superlink/linkstate/linkstate.py,sha256=9tb80YM1XhVSuiE32PVqdG7fBulqtSGM3Hv01WaFLcQ,12548
291
292
  flwr/server/superlink/linkstate/linkstate_factory.py,sha256=ISSMjDlwuN7swxjOeYlTNpI_kuZ8PGkMcJnf1dbhUSE,2069
292
- flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=JX0I4nu4x4dT8GSJzOF--OtMmPCujjOdQWDX7tbRKy8,44812
293
- flwr/server/superlink/linkstate/utils.py,sha256=qaEVztjntArFz6hDJ1S_MfINS_dzrlzligIniFkAd6c,6645
293
+ flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=iha2p7hxGRvyl1Fc9fMjfW_nvbibstTDuHgMREsY8HA,43445
294
+ flwr/server/superlink/linkstate/utils.py,sha256=d5uqqIOCKfd54X8CFNfUr3AWqPLpgmzsC_RagRwFugM,13321
294
295
  flwr/server/superlink/simulation/__init__.py,sha256=mg-oapC9dkzEfjXPQFior5lpWj4g9kwbLovptyYM_g0,718
295
296
  flwr/server/superlink/simulation/simulationio_grpc.py,sha256=5wflYW_TS0mjmPG6OYuHMJwXD2_cYmUNhFkdOU0jMWQ,2237
296
297
  flwr/server/superlink/simulation/simulationio_servicer.py,sha256=LsW6Cl8qH_vq04F6CeOp3vBtjTGQn4tATKHfirDmJZQ,5942
@@ -305,23 +306,23 @@ flwr/server/workflow/secure_aggregation/__init__.py,sha256=3XlgDOjD_hcukTGl6Bc1B
305
306
  flwr/server/workflow/secure_aggregation/secagg_workflow.py,sha256=l2IdMdJjs1bgHs5vQgLSOVzar7v2oxUn46oCrnVE1rM,5839
306
307
  flwr/server/workflow/secure_aggregation/secaggplus_workflow.py,sha256=rfn2etO1nb7u-1oRl-H9q3enJZz3shMINZaBB7rPsC4,29671
307
308
  flwr/simulation/__init__.py,sha256=5UcDVJNjFoSwWqHbGM1hKfTTUUNdwAtuoNvNrfvdkUY,1556
308
- flwr/simulation/app.py,sha256=dVhYf6035OwQ73siV1kLymJkbiCsV9Tl0L6j9i0EDtI,9531
309
- flwr/simulation/legacy_app.py,sha256=9-D9wr7VmfXBjlAnzWxDe8d9z-TKT5_uVl1YoEmNZwE,15149
309
+ flwr/simulation/app.py,sha256=EGF20e-Uv7slJCRQeDI2erjFDiljE_RRo-4TFHOMouk,9576
310
+ flwr/simulation/legacy_app.py,sha256=ySggtKEtXe8L77n8qyGXDA7UPv840MXh-QoalzoGiLU,15780
310
311
  flwr/simulation/ray_transport/__init__.py,sha256=wzcEEwUUlulnXsg6raCA1nGpP3LlAQDtJ8zNkCXcVbA,734
311
312
  flwr/simulation/ray_transport/ray_actor.py,sha256=9-XBguAm5IFqm2ddPFsQtnuuFN6lzqdb00SnCxGUGBo,18996
312
313
  flwr/simulation/ray_transport/ray_client_proxy.py,sha256=2vjOKoom3B74C6XU-jC3N6DwYmsLdB-lmkHZ_Xrv96o,7367
313
314
  flwr/simulation/ray_transport/utils.py,sha256=TYdtfg1P9VfTdLMOJlifInGpxWHYs9UfUqIv2wfkRLA,2392
314
- flwr/simulation/run_simulation.py,sha256=BoG0lwaixe3g-xL4RZPl_6P47PKj2TiPHsDUtcNztkk,20247
315
- flwr/simulation/simulationio_connection.py,sha256=Uqtm2pRuZqEM8SxKS2TdBgsMUABSabhVIx9zzCPb_qc,3195
315
+ flwr/simulation/run_simulation.py,sha256=2EWlyoswFUpa-IV_vPu4FFfDbUZS4ADR77M3bXV91xM,20022
316
+ flwr/simulation/simulationio_connection.py,sha256=m31L9Iej-61va48E5x-wJypA6p5s82WM4PKIAmKizQA,3209
316
317
  flwr/superexec/__init__.py,sha256=fcj366jh4RFby_vDwLroU4kepzqbnJgseZD_jUr_Mko,715
317
318
  flwr/superexec/app.py,sha256=Tt3GonnTwHrMmicwx9XaP-crP78-bf4DUWl-N5cG6zY,1841
318
- flwr/superexec/deployment.py,sha256=e4yU0HSOEn0MqLnOwg8X1ViRJEJWUpD4u8pLAV_DU14,6631
319
+ flwr/superexec/deployment.py,sha256=7VYmmI12zEaTHp_cQtU1GLikmqhctUHhEdshBPRFHMs,6734
319
320
  flwr/superexec/exec_grpc.py,sha256=OuhBAk7hiky9rjGceinLGIXqchtzGPQThZnwyYv6Ei0,2241
320
- flwr/superexec/exec_servicer.py,sha256=zNcdPkqLXgJIANKvE9uGIzgxocIs31WAj1YDnwqI6jo,3958
321
+ flwr/superexec/exec_servicer.py,sha256=M3R3q5rg2kYz-gFN-nmiXkvjels4QbieEA0K5wks0kQ,4972
321
322
  flwr/superexec/executor.py,sha256=zH3_53il6Jh0ZscIVEB9f4GNnXMeBbCGyCoBCxLgiG0,3114
322
323
  flwr/superexec/simulation.py,sha256=WQDon15oqpMopAZnwRZoTICYCfHqtkvFSqiTQ2hLD_g,4088
323
- flwr_nightly-1.13.0.dev20241113.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
324
- flwr_nightly-1.13.0.dev20241113.dist-info/METADATA,sha256=nGtH2E9gPhSSJlsVtTmf2iXu26szJ5s-iMXhkeDPIwg,15701
325
- flwr_nightly-1.13.0.dev20241113.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
326
- flwr_nightly-1.13.0.dev20241113.dist-info/entry_points.txt,sha256=JlNxX3qhaV18_2yj5a3kJW1ESxm31cal9iS_N_pf1Rk,538
327
- flwr_nightly-1.13.0.dev20241113.dist-info/RECORD,,
324
+ flwr_nightly-1.13.0.dev20241115.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
325
+ flwr_nightly-1.13.0.dev20241115.dist-info/METADATA,sha256=dvkA91faJRQvO24aiRrwaX7mmyjV48NHNtTKsSDD5EE,15740
326
+ flwr_nightly-1.13.0.dev20241115.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
327
+ flwr_nightly-1.13.0.dev20241115.dist-info/entry_points.txt,sha256=JlNxX3qhaV18_2yj5a3kJW1ESxm31cal9iS_N_pf1Rk,538
328
+ flwr_nightly-1.13.0.dev20241115.dist-info/RECORD,,