flwr-nightly 1.10.0.dev20240708__py3-none-any.whl → 1.10.0.dev20240710__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.

flwr/cli/new/new.py CHANGED
@@ -264,9 +264,11 @@ def new(
264
264
  bold=True,
265
265
  )
266
266
  )
267
+
268
+ _add = " huggingface-cli login\n" if framework_str == "flowertune" else ""
267
269
  print(
268
270
  typer.style(
269
- f" cd {package_name}\n" + " pip install -e .\n flwr run\n",
271
+ f" cd {package_name}\n" + " pip install -e .\n" + _add + " flwr run\n",
270
272
  fg=typer.colors.BRIGHT_CYAN,
271
273
  bold=True,
272
274
  )
flwr/client/node_state.py CHANGED
@@ -32,7 +32,7 @@ class NodeState:
32
32
  """Register new run context for this node."""
33
33
  if run_id not in self.run_contexts:
34
34
  self.run_contexts[run_id] = Context(
35
- state=RecordSet(), partition_id=self._partition_id
35
+ state=RecordSet(), run_config={}, partition_id=self._partition_id
36
36
  )
37
37
 
38
38
  def retrieve_context(self, run_id: int) -> Context:
@@ -178,7 +178,7 @@ def _get_load_client_app_fn(
178
178
  else:
179
179
  flwr_dir = Path(args.flwr_dir).absolute()
180
180
 
181
- sys.path.insert(0, str(flwr_dir.absolute()))
181
+ inserted_path = None
182
182
 
183
183
  default_app_ref: str = getattr(args, "client-app")
184
184
 
@@ -188,6 +188,11 @@ def _get_load_client_app_fn(
188
188
  "Flower SuperNode will load and validate ClientApp `%s`",
189
189
  getattr(args, "client-app"),
190
190
  )
191
+ # Insert sys.path
192
+ dir_path = Path(args.dir).absolute()
193
+ sys.path.insert(0, str(dir_path))
194
+ inserted_path = str(dir_path)
195
+
191
196
  valid, error_msg = validate(default_app_ref)
192
197
  if not valid and error_msg:
193
198
  raise LoadClientAppError(error_msg) from None
@@ -196,7 +201,7 @@ def _get_load_client_app_fn(
196
201
  # If multi-app feature is disabled
197
202
  if not multi_app:
198
203
  # Get sys path to be inserted
199
- sys_path = Path(args.dir).absolute()
204
+ dir_path = Path(args.dir).absolute()
200
205
 
201
206
  # Set app reference
202
207
  client_app_ref = default_app_ref
@@ -209,7 +214,7 @@ def _get_load_client_app_fn(
209
214
 
210
215
  log(WARN, "FAB ID is not provided; the default ClientApp will be loaded.")
211
216
  # Get sys path to be inserted
212
- sys_path = Path(args.dir).absolute()
217
+ dir_path = Path(args.dir).absolute()
213
218
 
214
219
  # Set app reference
215
220
  client_app_ref = default_app_ref
@@ -222,13 +227,21 @@ def _get_load_client_app_fn(
222
227
  raise LoadClientAppError("Failed to load ClientApp") from e
223
228
 
224
229
  # Get sys path to be inserted
225
- sys_path = Path(project_dir).absolute()
230
+ dir_path = Path(project_dir).absolute()
226
231
 
227
232
  # Set app reference
228
233
  client_app_ref = config["flower"]["components"]["clientapp"]
229
234
 
230
235
  # Set sys.path
231
- sys.path.insert(0, str(sys_path))
236
+ nonlocal inserted_path
237
+ if inserted_path != str(dir_path):
238
+ # Remove the previously inserted path
239
+ if inserted_path is not None:
240
+ sys.path.remove(inserted_path)
241
+ # Insert the new path
242
+ sys.path.insert(0, str(dir_path))
243
+
244
+ inserted_path = str(dir_path)
232
245
 
233
246
  # Load ClientApp
234
247
  log(
@@ -236,7 +249,7 @@ def _get_load_client_app_fn(
236
249
  "Loading ClientApp `%s`",
237
250
  client_app_ref,
238
251
  )
239
- client_app = load_app(client_app_ref, LoadClientAppError, sys_path)
252
+ client_app = load_app(client_app_ref, LoadClientAppError, dir_path)
240
253
 
241
254
  if not isinstance(client_app, ClientApp):
242
255
  raise LoadClientAppError(
flwr/common/context.py CHANGED
@@ -34,6 +34,10 @@ class Context:
34
34
  executing mods. It can also be used as a memory to access
35
35
  at different points during the lifecycle of this entity (e.g. across
36
36
  multiple rounds)
37
+ run_config : Dict[str, str]
38
+ A config (key/value mapping) held by the entity in a given run and that will
39
+ stay local. It can be used at any point during the lifecycle of this entity
40
+ (e.g. across multiple rounds)
37
41
  partition_id : Optional[int] (default: None)
38
42
  An index that specifies the data partition that the ClientApp using this Context
39
43
  object should make use of. Setting this attribute is better suited for
@@ -47,8 +51,9 @@ class Context:
47
51
  def __init__(
48
52
  self,
49
53
  state: RecordSet,
54
+ run_config: Dict[str, str],
50
55
  partition_id: Optional[int] = None,
51
56
  ) -> None:
52
57
  self.state = state
58
+ self.run_config = run_config
53
59
  self.partition_id = partition_id
54
- self.run_config = {}
@@ -52,4 +52,4 @@ class LegacyContext(Context):
52
52
  self.strategy = strategy
53
53
  self.client_manager = client_manager
54
54
  self.history = History()
55
- super().__init__(state)
55
+ super().__init__(state, run_config={})
@@ -19,10 +19,15 @@ import argparse
19
19
  import sys
20
20
  from logging import DEBUG, INFO, WARN
21
21
  from pathlib import Path
22
- from typing import Optional
22
+ from typing import Dict, Optional
23
23
 
24
24
  from flwr.common import Context, EventType, RecordSet, event
25
- from flwr.common.config import get_flwr_dir, get_project_config, get_project_dir
25
+ from flwr.common.config import (
26
+ get_flwr_dir,
27
+ get_fused_config,
28
+ get_project_config,
29
+ get_project_dir,
30
+ )
26
31
  from flwr.common.logger import log, update_console_handler, warn_deprecated_feature
27
32
  from flwr.common.object_ref import load_app
28
33
  from flwr.proto.driver_pb2 import ( # pylint: disable=E0611
@@ -40,6 +45,7 @@ ADDRESS_DRIVER_API = "0.0.0.0:9091"
40
45
  def run(
41
46
  driver: Driver,
42
47
  server_app_dir: str,
48
+ server_app_run_config: Dict[str, str],
43
49
  server_app_attr: Optional[str] = None,
44
50
  loaded_server_app: Optional[ServerApp] = None,
45
51
  ) -> None:
@@ -72,7 +78,7 @@ def run(
72
78
  server_app = _load()
73
79
 
74
80
  # Initialize Context
75
- context = Context(state=RecordSet())
81
+ context = Context(state=RecordSet(), run_config=server_app_run_config)
76
82
 
77
83
  # Call ServerApp
78
84
  server_app(driver=driver, context=context)
@@ -169,6 +175,8 @@ def run_server_app() -> None: # pylint: disable=too-many-branches
169
175
  # Overwrite driver._run_id
170
176
  driver._run_id = res.run_id # pylint: disable=W0212
171
177
 
178
+ server_app_run_config = {}
179
+
172
180
  # Dynamically obtain ServerApp path based on run_id
173
181
  if args.run_id is not None:
174
182
  # User provided `--run-id`, but not `server-app`
@@ -177,6 +185,7 @@ def run_server_app() -> None: # pylint: disable=too-many-branches
177
185
  server_app_dir = str(get_project_dir(run_.fab_id, run_.fab_version, flwr_dir))
178
186
  config = get_project_config(server_app_dir)
179
187
  server_app_attr = config["flower"]["components"]["serverapp"]
188
+ server_app_run_config = get_fused_config(run_, flwr_dir)
180
189
  else:
181
190
  # User provided `server-app`, but not `--run-id`
182
191
  server_app_dir = str(Path(args.dir).absolute())
@@ -190,7 +199,12 @@ def run_server_app() -> None: # pylint: disable=too-many-branches
190
199
  )
191
200
 
192
201
  # Run the ServerApp with the Driver
193
- run(driver=driver, server_app_dir=server_app_dir, server_app_attr=server_app_attr)
202
+ run(
203
+ driver=driver,
204
+ server_app_dir=server_app_dir,
205
+ server_app_run_config=server_app_run_config,
206
+ server_app_attr=server_app_attr,
207
+ )
194
208
 
195
209
  # Clean up
196
210
  driver.close()
flwr/server/server_app.py CHANGED
@@ -80,7 +80,7 @@ class ServerApp:
80
80
  return
81
81
 
82
82
  # New execution mode
83
- context = Context(state=RecordSet())
83
+ context = Context(state=RecordSet(), run_config={})
84
84
  self._main(driver, context)
85
85
 
86
86
  def main(self) -> Callable[[ServerAppCallable], ServerAppCallable]:
@@ -30,7 +30,7 @@ from flwr.common.logger import log
30
30
  from flwr.common.message import Error
31
31
  from flwr.common.object_ref import load_app
32
32
  from flwr.common.serde import message_from_taskins, message_to_taskres
33
- from flwr.proto.task_pb2 import TaskIns # pylint: disable=E0611
33
+ from flwr.proto.task_pb2 import TaskIns, TaskRes # pylint: disable=E0611
34
34
  from flwr.server.superlink.state import StateFactory
35
35
 
36
36
  from .backend import Backend, error_messages_backends, supported_backends
@@ -54,17 +54,16 @@ def _register_nodes(
54
54
  # pylint: disable=too-many-arguments,too-many-locals
55
55
  async def worker(
56
56
  app_fn: Callable[[], ClientApp],
57
- queue: "asyncio.Queue[TaskIns]",
57
+ taskins_queue: "asyncio.Queue[TaskIns]",
58
+ taskres_queue: "asyncio.Queue[TaskRes]",
58
59
  node_states: Dict[int, NodeState],
59
- state_factory: StateFactory,
60
60
  backend: Backend,
61
61
  ) -> None:
62
62
  """Get TaskIns from queue and pass it to an actor in the pool to execute it."""
63
- state = state_factory.state()
64
63
  while True:
65
64
  out_mssg = None
66
65
  try:
67
- task_ins: TaskIns = await queue.get()
66
+ task_ins: TaskIns = await taskins_queue.get()
68
67
  node_id = task_ins.task.consumer.node_id
69
68
 
70
69
  # Register and retrieve runstate
@@ -111,7 +110,7 @@ async def worker(
111
110
  task_res = message_to_taskres(out_mssg)
112
111
  # Store TaskRes in state
113
112
  task_res.task.pushed_at = time.time()
114
- state.store_task_res(task_res)
113
+ await taskres_queue.put(task_res)
115
114
 
116
115
 
117
116
  async def add_taskins_to_queue(
@@ -162,6 +161,21 @@ async def add_taskins_to_queue(
162
161
  log(DEBUG, "Async producer: Stopped pulling from StateFactory.")
163
162
 
164
163
 
164
+ async def put_taskres_into_state(
165
+ queue: "asyncio.Queue[TaskRes]",
166
+ state_factory: StateFactory,
167
+ f_stop: asyncio.Event,
168
+ ) -> None:
169
+ """Remove TaskRes from queue and add into State."""
170
+ state = state_factory.state()
171
+ while not f_stop.is_set():
172
+ if queue.qsize():
173
+ task_res = await queue.get()
174
+ state.store_task_res(task_res)
175
+ else:
176
+ await asyncio.sleep(0.1)
177
+
178
+
165
179
  async def run(
166
180
  app_fn: Callable[[], ClientApp],
167
181
  backend_fn: Callable[[], Backend],
@@ -171,7 +185,8 @@ async def run(
171
185
  f_stop: asyncio.Event,
172
186
  ) -> None:
173
187
  """Run the VCE async."""
174
- queue: "asyncio.Queue[TaskIns]" = asyncio.Queue(128)
188
+ taskins_queue: "asyncio.Queue[TaskIns]" = asyncio.Queue(128)
189
+ taskres_queue: "asyncio.Queue[TaskRes]" = asyncio.Queue(128)
175
190
 
176
191
  try:
177
192
 
@@ -184,22 +199,37 @@ async def run(
184
199
  # Add workers (they submit Messages to Backend)
185
200
  worker_tasks = [
186
201
  asyncio.create_task(
187
- worker(app_fn, queue, node_states, state_factory, backend)
202
+ worker(
203
+ app_fn,
204
+ taskins_queue,
205
+ taskres_queue,
206
+ node_states,
207
+ backend,
208
+ )
188
209
  )
189
210
  for _ in range(backend.num_workers)
190
211
  ]
191
212
  # Create producer (adds TaskIns into Queue)
192
- producer = asyncio.create_task(
213
+ taskins_producer = asyncio.create_task(
193
214
  add_taskins_to_queue(
194
- queue, state_factory, nodes_mapping, backend, worker_tasks, f_stop
215
+ taskins_queue,
216
+ state_factory,
217
+ nodes_mapping,
218
+ backend,
219
+ worker_tasks,
220
+ f_stop,
195
221
  )
196
222
  )
197
223
 
198
- # Wait for producer to finish
199
- # The producer runs forever until f_stop is set or until
224
+ taskres_consumer = asyncio.create_task(
225
+ put_taskres_into_state(taskres_queue, state_factory, f_stop)
226
+ )
227
+
228
+ # Wait for asyncio taks pulling/pushing TaskIns/TaskRes.
229
+ # These run forever until f_stop is set or until
200
230
  # all worker (consumer) coroutines are completed. Workers
201
231
  # also run forever and only end if an exception is raised.
202
- await asyncio.gather(producer)
232
+ await asyncio.gather(*(taskins_producer, taskres_consumer))
203
233
 
204
234
  except Exception as ex:
205
235
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.10.0.dev20240708
3
+ Version: 1.10.0.dev20240710
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -6,7 +6,7 @@ flwr/cli/config_utils.py,sha256=ugUlqH52yxTPMtKw6q4xv5k2OVWUy89cwyJ5LB2RLgk,6037
6
6
  flwr/cli/example.py,sha256=1bGDYll3BXQY2kRqSN-oICqS5n1b9m0g0RvXTopXHl4,2215
7
7
  flwr/cli/install.py,sha256=Wz7Hqg2PE9N-w5CnqlH9Zr8mzADN2J7NLcUhgldZLWU,6579
8
8
  flwr/cli/new/__init__.py,sha256=cQzK1WH4JP2awef1t2UQ2xjl1agVEz9rwutV18SWV1k,789
9
- flwr/cli/new/new.py,sha256=ySz3yu-3IF_wencjajr4mA2VNoM6hKZZ5scKYZKzAII,9340
9
+ flwr/cli/new/new.py,sha256=vSLxyWOtD33U8mTGeqOhw5OjeDpFStekAVLUH9GJq6k,9432
10
10
  flwr/cli/new/templates/__init__.py,sha256=4luU8RL-CK8JJCstQ_ON809W9bNTkY1l9zSaPKBkgwY,725
11
11
  flwr/cli/new/templates/app/.gitignore.tpl,sha256=XixnHdyeMB2vwkGtGnwHqoWpH-9WChdyG0GXe57duhc,3078
12
12
  flwr/cli/new/templates/app/README.flowertune.md.tpl,sha256=PqzkGm0g6Zy-vZK9_0EO3f_U6g1r69lGc4UL8kds5Q8,2696
@@ -77,19 +77,19 @@ flwr/client/mod/secure_aggregation/__init__.py,sha256=A7DzZ3uvXTUkuHBzrxJMWQQD4R
77
77
  flwr/client/mod/secure_aggregation/secagg_mod.py,sha256=wI9tuIEvMUETz-wVIEbPYvh-1nK9CEylBLGoVpNhL94,1095
78
78
  flwr/client/mod/secure_aggregation/secaggplus_mod.py,sha256=fZTfIELkYS64lpgxQKL66s-QHjCn-159qfLoNoIMJjc,19699
79
79
  flwr/client/mod/utils.py,sha256=UAJXiB0wwVyLkCkpW_i5BXikdBR65p8sNFr7VNHm2nk,1226
80
- flwr/client/node_state.py,sha256=z4ol2a20wvspTkn53q24Gnt-1csZRR8JjWnk4A_-Agk,1922
80
+ flwr/client/node_state.py,sha256=f_zZaoSCLUVwbJDqQGZbRvQkEK82UlhSVtgtCKFVM3s,1937
81
81
  flwr/client/node_state_tests.py,sha256=fadnOTT3VAuzzs_UAbOukcuyx-oQPv2lBq92qTuUecw,2212
82
82
  flwr/client/numpy_client.py,sha256=u76GWAdHmJM88Agm2EgLQSvO8Jnk225mJTk-_TmPjFE,10283
83
83
  flwr/client/rest_client/__init__.py,sha256=5KGlp7pjc1dhNRkKlaNtUfQmg8wrRFh9lS3P3uRS-7Q,735
84
84
  flwr/client/rest_client/connection.py,sha256=nowX8_TMnaiIhBMU5f60sIOkvcS3DHOHBT_YrvCnxnw,12096
85
85
  flwr/client/supernode/__init__.py,sha256=SUhWOzcgXRNXk1V9UgB5-FaWukqqrOEajVUHEcPkwyQ,865
86
- flwr/client/supernode/app.py,sha256=WuTp0vt2ILyKHOCl9OUtFfdlUExt-eEUy9SOFVlJAEw,14857
86
+ flwr/client/supernode/app.py,sha256=jVg5vWJnE50jUJPOlK_hwA_RsGo_heygZeWHGsWH76g,15275
87
87
  flwr/client/typing.py,sha256=RJGVF64Z0nqW-qmdFuFaY4Jig3dMUFgNhFi-5dq-8-I,1069
88
88
  flwr/common/__init__.py,sha256=4cBLNNnNTwHDnL_HCxhU5ILCSZ6fYh3A_aMBtlvHTVw,3721
89
89
  flwr/common/address.py,sha256=wRu1Luezx1PWadwV9OA_KNko01oVvbRnPqfzaDn8QOk,1882
90
90
  flwr/common/config.py,sha256=GTmXfeCi6Xt1CTUzg8TUshOHVv2vP8X8e6uCcLBWoX4,5024
91
91
  flwr/common/constant.py,sha256=qNmxEV3_pOO7MeTAA9qwIh4KoCPStcX3Gm8GRPIRx_4,2890
92
- flwr/common/context.py,sha256=uJ9lr-XIjFmp24vBAAOcwxXKGVZIaUzjOMD0G56V4h8,1887
92
+ flwr/common/context.py,sha256=dd37Q_0rngvGTzIwQ2M50jfhGGV0vV2-uGlL-gC4Y_Y,2170
93
93
  flwr/common/date.py,sha256=OcQuwpb2HxcblTqYm6H223ufop5UZw5N_fzalbpOVzY,891
94
94
  flwr/common/differential_privacy.py,sha256=WZWrL7C9XaB9l9NDkLDI5PvM7jwcoTTFu08ZVG8-M5Q,6113
95
95
  flwr/common/differential_privacy_constants.py,sha256=c7b7tqgvT7yMK0XN9ndiTBs4mQf6d3qk6K7KBZGlV4Q,1074
@@ -180,16 +180,16 @@ flwr/server/compat/__init__.py,sha256=VxnJtJyOjNFQXMNi9hIuzNlZM5n0Hj1p3aq_Pm2udw
180
180
  flwr/server/compat/app.py,sha256=u0elxfiLjGouCMQIy5KnCpeCHdc3s0qvojUm8unInIs,3421
181
181
  flwr/server/compat/app_utils.py,sha256=B9pec7LnYACzowXKZTZNu3SNS-fSaHfefwvRyAQa4Nc,3456
182
182
  flwr/server/compat/driver_client_proxy.py,sha256=BxTDo7i89VAG2tuF4x7zogSVn2bXPMr0H2H0lERzW9c,5444
183
- flwr/server/compat/legacy_context.py,sha256=D2s7PvQoDnTexuRmf1uG9Von7GUj4Qqyr7qLklSlKAM,1766
183
+ flwr/server/compat/legacy_context.py,sha256=3T_vON4qXt31To0dd9ygULvxL9l1hmDSED6ZqBiLhxI,1781
184
184
  flwr/server/criterion.py,sha256=ypbAexbztzGUxNen9RCHF91QeqiEQix4t4Ih3E-42MM,1061
185
185
  flwr/server/driver/__init__.py,sha256=bikRv6CjTwSvYh7tf10gziU5o2YotOWhhftz2tr3KDc,886
186
186
  flwr/server/driver/driver.py,sha256=NT_yaeit7_kZEIsCEqOWPID1GrVD3ywH4xZ2wtIh5lM,5217
187
187
  flwr/server/driver/grpc_driver.py,sha256=4Azmzq4RWzcLbOqBBEF-I78krWVWZ6bT0U42S25zMvY,9659
188
188
  flwr/server/driver/inmemory_driver.py,sha256=RcK94_NtjGZ4aZDIscnU7A3Uv1u8jGx29-xcbjQvZTM,6444
189
189
  flwr/server/history.py,sha256=bBOHKyX1eQONIsUx4EUU-UnAk1i0EbEl8ioyMq_UWQ8,5063
190
- flwr/server/run_serverapp.py,sha256=d4kFybZBiPqUkPKusU_Nmzq6nPzds6nwt67BvndDlGQ,9142
190
+ flwr/server/run_serverapp.py,sha256=s8KyWbANv9kyj8_tJoDiLkUj9D6QrPWfC5M_xDCOtYU,9445
191
191
  flwr/server/server.py,sha256=wsXsxMZ9SQ0B42nBnUlcV83NJPycgrgg5bFwcQ4BYBE,17821
192
- flwr/server/server_app.py,sha256=Re5Y9ftXlBRJXYHY_8TrNWsjyOUCPC5F_93H0xiZDhI,4400
192
+ flwr/server/server_app.py,sha256=WdsLcMsdi_pKk2y9fKkaWqT3CgCPX55-C8qhkDXCet8,4415
193
193
  flwr/server/server_config.py,sha256=CZaHVAsMvGLjpWVcLPkiYxgJN4xfIyAiUrCI3fETKY4,1349
194
194
  flwr/server/strategy/__init__.py,sha256=tQer2SwjDnvgFFuJMZM-S01Z615N5XK6MaCvpm4BMU0,2836
195
195
  flwr/server/strategy/aggregate.py,sha256=QyRIJtI5gnuY1NbgrcrOvkHxGIxBvApq7d9Y4xl-6W4,13468
@@ -238,7 +238,7 @@ flwr/server/superlink/fleet/vce/__init__.py,sha256=36MHKiefnJeyjwMQzVUK4m06Ojon3
238
238
  flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=oBIzmnrSSRvH_H0vRGEGWhWzQQwqe3zn6e13RsNwlIY,1466
239
239
  flwr/server/superlink/fleet/vce/backend/backend.py,sha256=LJsKl7oixVvptcG98Rd9ejJycNWcEVB0ODvSreLGp-A,2260
240
240
  flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=dwaebZfzvzlvjkMflH5hJ19-Sszvxt0AWwIEGk9BliU,7495
241
- flwr/server/superlink/fleet/vce/vce_api.py,sha256=skPxli2QKTn-zElEt7lak5Q4N5v8NZB-EeROKac2bAs,12387
241
+ flwr/server/superlink/fleet/vce/vce_api.py,sha256=JvkrLB26-sXbrsQKG4iGwgBYDIfuix3PJ1P6qd_nqxQ,13296
242
242
  flwr/server/superlink/state/__init__.py,sha256=Gj2OTFLXvA-mAjBvwuKDM3rDrVaQPcIoybSa2uskMTE,1003
243
243
  flwr/server/superlink/state/in_memory_state.py,sha256=fb-f4RGiqXON0DC7aSEMNuNIjH406BhBYrNNX5Kza2g,13061
244
244
  flwr/server/superlink/state/sqlite_state.py,sha256=dO374mTkvhWQSiwbqwUXVnAYHev-j2mHaX9v8wFmmMA,29044
@@ -268,8 +268,8 @@ flwr/superexec/deployment.py,sha256=xv5iQWuaMeeL0XE5KMLWq3gRU4lvsGu1-_oPIXi5x9E,
268
268
  flwr/superexec/exec_grpc.py,sha256=u-rztpOleqSGqgvNE-ZLw1HchNsBHU1-eB3m52GZ0pQ,1852
269
269
  flwr/superexec/exec_servicer.py,sha256=4R1f_9v0vly_bXpIYaXAeV1tO5LAy1AYygGGGNZmlQk,2194
270
270
  flwr/superexec/executor.py,sha256=TMQMMf-vv0htlv6v-eEBI67J1WL3Yz7dp_Fm1lgMEyU,1718
271
- flwr_nightly-1.10.0.dev20240708.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
272
- flwr_nightly-1.10.0.dev20240708.dist-info/METADATA,sha256=PTCizQrpDKKp9_ZqsxqP7APWdLMwsRk31PKfU-8QKgk,15614
273
- flwr_nightly-1.10.0.dev20240708.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
274
- flwr_nightly-1.10.0.dev20240708.dist-info/entry_points.txt,sha256=7qBQcA-bDGDxnJmLd9FYqglFQubjCNqyg9M8a-lukps,336
275
- flwr_nightly-1.10.0.dev20240708.dist-info/RECORD,,
271
+ flwr_nightly-1.10.0.dev20240710.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
272
+ flwr_nightly-1.10.0.dev20240710.dist-info/METADATA,sha256=d1HBDVTaENA9E7Peceqo7v7bNogHZJCWA4dKq581OCo,15614
273
+ flwr_nightly-1.10.0.dev20240710.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
274
+ flwr_nightly-1.10.0.dev20240710.dist-info/entry_points.txt,sha256=7qBQcA-bDGDxnJmLd9FYqglFQubjCNqyg9M8a-lukps,336
275
+ flwr_nightly-1.10.0.dev20240710.dist-info/RECORD,,