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

@@ -1,17 +1,19 @@
1
1
  """$project_name: A Flower / HuggingFace Transformers app."""
2
2
 
3
+ from flwr.common import Context
3
4
  from flwr.server.strategy import FedAvg
4
- from flwr.server import ServerApp, ServerConfig
5
+ from flwr.server import ServerApp, ServerAppComponents, ServerConfig
5
6
 
6
7
 
7
- # Define strategy
8
- strategy = FedAvg(
9
- fraction_fit=1.0,
10
- fraction_evaluate=1.0,
11
- )
8
+ def server_fn(context: Context):
9
+ # Define strategy
10
+ strategy = FedAvg(
11
+ fraction_fit=1.0,
12
+ fraction_evaluate=1.0,
13
+ )
14
+ config = ServerConfig(num_rounds=3)
12
15
 
13
- # Start server
14
- app = ServerApp(
15
- config=ServerConfig(num_rounds=3),
16
- strategy=strategy,
17
- )
16
+ return ServerAppComponents(strategy=strategy, config=config)
17
+
18
+ # Create ServerApp
19
+ app = ServerApp(server_fn=server_fn)
@@ -1,12 +1,16 @@
1
1
  """$project_name: A Flower / JAX app."""
2
2
 
3
- import flwr as fl
3
+ from flwr.common import Context
4
+ from flwr.server.strategy import FedAvg
5
+ from flwr.server import ServerApp, ServerAppComponents, ServerConfig
4
6
 
5
- # Configure the strategy
6
- strategy = fl.server.strategy.FedAvg()
7
7
 
8
- # Flower ServerApp
9
- app = fl.server.ServerApp(
10
- config=fl.server.ServerConfig(num_rounds=3),
11
- strategy=strategy,
12
- )
8
+ def server_fn(context: Context):
9
+ # Define strategy
10
+ strategy = FedAvg()
11
+ config = ServerConfig(num_rounds=3)
12
+
13
+ return ServerAppComponents(strategy=strategy, config=config)
14
+
15
+ # Create ServerApp
16
+ app = ServerApp(server_fn=server_fn)
@@ -1,15 +1,16 @@
1
1
  """$project_name: A Flower / MLX app."""
2
2
 
3
- from flwr.server import ServerApp, ServerConfig
3
+ from flwr.common import Context
4
+ from flwr.server import ServerApp, ServerAppComponents, ServerConfig
4
5
  from flwr.server.strategy import FedAvg
5
6
 
6
7
 
7
- # Define strategy
8
- strategy = FedAvg()
8
+ def server_fn(context: Context):
9
+ # Define strategy
10
+ strategy = FedAvg()
11
+ config = ServerConfig(num_rounds=3)
9
12
 
13
+ return ServerAppComponents(strategy=strategy, config=config)
10
14
 
11
15
  # Create ServerApp
12
- app = ServerApp(
13
- config=ServerConfig(num_rounds=3),
14
- strategy=strategy,
15
- )
16
+ app = ServerApp(server_fn=server_fn)
@@ -1,12 +1,16 @@
1
1
  """$project_name: A Flower / NumPy app."""
2
2
 
3
- import flwr as fl
3
+ from flwr.common import Context
4
+ from flwr.server import ServerApp, ServerAppComponents, ServerConfig
5
+ from flwr.server.strategy import FedAvg
4
6
 
5
- # Configure the strategy
6
- strategy = fl.server.strategy.FedAvg()
7
7
 
8
- # Flower ServerApp
9
- app = fl.server.ServerApp(
10
- config=fl.server.ServerConfig(num_rounds=1),
11
- strategy=strategy,
12
- )
8
+ def server_fn(context: Context):
9
+ # Define strategy
10
+ strategy = FedAvg()
11
+ config = ServerConfig(num_rounds=3)
12
+
13
+ return ServerAppComponents(strategy=strategy, config=config)
14
+
15
+ # Create ServerApp
16
+ app = ServerApp(server_fn=server_fn)
@@ -1,7 +1,7 @@
1
1
  """$project_name: A Flower / PyTorch app."""
2
2
 
3
- from flwr.common import ndarrays_to_parameters
4
- from flwr.server import ServerApp, ServerConfig
3
+ from flwr.common import Context, ndarrays_to_parameters
4
+ from flwr.server import ServerApp, ServerAppComponents, ServerConfig
5
5
  from flwr.server.strategy import FedAvg
6
6
 
7
7
  from $import_name.task import Net, get_weights
@@ -11,18 +11,17 @@ from $import_name.task import Net, get_weights
11
11
  ndarrays = get_weights(Net())
12
12
  parameters = ndarrays_to_parameters(ndarrays)
13
13
 
14
+ def server_fn(context: Context):
15
+ # Define strategy
16
+ strategy = FedAvg(
17
+ fraction_fit=1.0,
18
+ fraction_evaluate=1.0,
19
+ min_available_clients=2,
20
+ initial_parameters=parameters,
21
+ )
22
+ config = ServerConfig(num_rounds=3)
14
23
 
15
- # Define strategy
16
- strategy = FedAvg(
17
- fraction_fit=1.0,
18
- fraction_evaluate=1.0,
19
- min_available_clients=2,
20
- initial_parameters=parameters,
21
- )
22
-
24
+ return ServerAppComponents(strategy=strategy, config=config)
23
25
 
24
26
  # Create ServerApp
25
- app = ServerApp(
26
- config=ServerConfig(num_rounds=3),
27
- strategy=strategy,
28
- )
27
+ app = ServerApp(server_fn=server_fn)
@@ -1,17 +1,20 @@
1
1
  """$project_name: A Flower / Scikit-Learn app."""
2
2
 
3
- from flwr.server import ServerApp, ServerConfig
3
+ from flwr.common import Context
4
+ from flwr.server import ServerApp, ServerAppComponents, ServerConfig
4
5
  from flwr.server.strategy import FedAvg
5
6
 
6
7
 
7
- strategy = FedAvg(
8
- fraction_fit=1.0,
9
- fraction_evaluate=1.0,
10
- min_available_clients=2,
11
- )
8
+ def server_fn(context: Context):
9
+ # Define strategy
10
+ strategy = FedAvg(
11
+ fraction_fit=1.0,
12
+ fraction_evaluate=1.0,
13
+ min_available_clients=2,
14
+ )
15
+ config = ServerConfig(num_rounds=3)
16
+
17
+ return ServerAppComponents(strategy=strategy, config=config)
12
18
 
13
19
  # Create ServerApp
14
- app = ServerApp(
15
- config=ServerConfig(num_rounds=3),
16
- strategy=strategy,
17
- )
20
+ app = ServerApp(server_fn=server_fn)
@@ -1,7 +1,7 @@
1
1
  """$project_name: A Flower / TensorFlow app."""
2
2
 
3
- from flwr.common import ndarrays_to_parameters
4
- from flwr.server import ServerApp, ServerConfig
3
+ from flwr.common import Context, ndarrays_to_parameters
4
+ from flwr.server import ServerApp, ServerAppComponents, ServerConfig
5
5
  from flwr.server.strategy import FedAvg
6
6
 
7
7
  from $import_name.task import load_model
@@ -11,17 +11,17 @@ config = ServerConfig(num_rounds=3)
11
11
 
12
12
  parameters = ndarrays_to_parameters(load_model().get_weights())
13
13
 
14
- # Define strategy
15
- strategy = FedAvg(
16
- fraction_fit=1.0,
17
- fraction_evaluate=1.0,
18
- min_available_clients=2,
19
- initial_parameters=parameters,
20
- )
14
+ def server_fn(context: Context):
15
+ # Define strategy
16
+ strategy = strategy = FedAvg(
17
+ fraction_fit=1.0,
18
+ fraction_evaluate=1.0,
19
+ min_available_clients=2,
20
+ initial_parameters=parameters,
21
+ )
22
+ config = ServerConfig(num_rounds=3)
21
23
 
24
+ return ServerAppComponents(strategy=strategy, config=config)
22
25
 
23
26
  # Create ServerApp
24
- app = ServerApp(
25
- config=config,
26
- strategy=strategy,
27
- )
27
+ app = ServerApp(server_fn=server_fn)
flwr/cli/run/run.py CHANGED
@@ -62,7 +62,7 @@ def run(
62
62
  config_overrides: Annotated[
63
63
  Optional[str],
64
64
  typer.Option(
65
- "--config",
65
+ "--run-config",
66
66
  "-c",
67
67
  help="Override configuration key-value pairs",
68
68
  ),
flwr/superexec/app.py CHANGED
@@ -24,6 +24,7 @@ import grpc
24
24
 
25
25
  from flwr.common import EventType, event, log
26
26
  from flwr.common.address import parse_address
27
+ from flwr.common.config import parse_config_args
27
28
  from flwr.common.constant import SUPEREXEC_DEFAULT_ADDRESS
28
29
  from flwr.common.exit_handlers import register_exit_handlers
29
30
  from flwr.common.object_ref import load_app, validate
@@ -55,6 +56,7 @@ def run_superexec() -> None:
55
56
  address=address,
56
57
  executor=_load_executor(args),
57
58
  certificates=certificates,
59
+ config=parse_config_args(args.executor_config),
58
60
  )
59
61
 
60
62
  grpc_servers = [superexec_server]
@@ -74,21 +76,25 @@ def _parse_args_run_superexec() -> argparse.ArgumentParser:
74
76
  parser = argparse.ArgumentParser(
75
77
  description="Start a Flower SuperExec",
76
78
  )
77
- parser.add_argument(
78
- "executor",
79
- help="For example: `deployment:exec` or `project.package.module:wrapper.exec`.",
80
- default="flwr.superexec.deployment:executor",
81
- )
82
79
  parser.add_argument(
83
80
  "--address",
84
81
  help="SuperExec (gRPC) server address (IPv4, IPv6, or a domain name)",
85
82
  default=SUPEREXEC_DEFAULT_ADDRESS,
86
83
  )
84
+ parser.add_argument(
85
+ "--executor",
86
+ help="For example: `deployment:exec` or `project.package.module:wrapper.exec`.",
87
+ default="flwr.superexec.deployment:executor",
88
+ )
87
89
  parser.add_argument(
88
90
  "--executor-dir",
89
91
  help="The directory for the executor.",
90
92
  default=".",
91
93
  )
94
+ parser.add_argument(
95
+ "--executor-config",
96
+ help="Key-value pairs for the executor config, separated by commas.",
97
+ )
92
98
  parser.add_argument(
93
99
  "--insecure",
94
100
  action="store_true",
@@ -17,6 +17,7 @@
17
17
  import subprocess
18
18
  import sys
19
19
  from logging import ERROR, INFO
20
+ from pathlib import Path
20
21
  from typing import Dict, Optional
21
22
 
22
23
  from typing_extensions import override
@@ -33,25 +34,73 @@ from .executor import Executor, RunTracker
33
34
 
34
35
 
35
36
  class DeploymentEngine(Executor):
36
- """Deployment engine executor."""
37
+ """Deployment engine executor.
38
+
39
+ Parameters
40
+ ----------
41
+ superlink: str (default: "0.0.0.0:9091")
42
+ Address of the SuperLink to connect to.
43
+ root_certificates: Optional[str] (default: None)
44
+ Specifies the path to the PEM-encoded root certificate file for
45
+ establishing secure HTTPS connections.
46
+ flwr_dir: Optional[str] (default: None)
47
+ The path containing installed Flower Apps.
48
+ """
37
49
 
38
50
  def __init__(
39
51
  self,
40
- address: str = DEFAULT_SERVER_ADDRESS_DRIVER,
41
- root_certificates: Optional[bytes] = None,
52
+ superlink: str = DEFAULT_SERVER_ADDRESS_DRIVER,
53
+ root_certificates: Optional[str] = None,
54
+ flwr_dir: Optional[str] = None,
42
55
  ) -> None:
43
- self.address = address
44
- self.root_certificates = root_certificates
56
+ self.superlink = superlink
57
+ if root_certificates is None:
58
+ self.root_certificates = None
59
+ self.root_certificates_bytes = None
60
+ else:
61
+ self.root_certificates = root_certificates
62
+ self.root_certificates_bytes = Path(root_certificates).read_bytes()
63
+ self.flwr_dir = flwr_dir
45
64
  self.stub: Optional[DriverStub] = None
46
65
 
66
+ @override
67
+ def set_config(
68
+ self,
69
+ config: Dict[str, str],
70
+ ) -> None:
71
+ """Set executor config arguments.
72
+
73
+ Parameters
74
+ ----------
75
+ config : Dict[str, str]
76
+ A dictionary for configuration values.
77
+ Supported configuration key/value pairs:
78
+ - "superlink": str
79
+ The address of the SuperLink Driver API.
80
+ - "root-certificates": str
81
+ The path to the root certificates.
82
+ - "flwr-dir": str
83
+ The path to the Flower directory.
84
+ """
85
+ if not config:
86
+ return
87
+ if superlink_address := config.get("superlink"):
88
+ self.superlink = superlink_address
89
+ if root_certificates := config.get("root-certificates"):
90
+ self.root_certificates = root_certificates
91
+ self.root_certificates_bytes = Path(root_certificates).read_bytes()
92
+ if flwr_dir := config.get("flwr-dir"):
93
+ self.flwr_dir = flwr_dir
94
+
47
95
  def _connect(self) -> None:
48
- if self.stub is None:
49
- channel = create_channel(
50
- server_address=self.address,
51
- insecure=(self.root_certificates is None),
52
- root_certificates=self.root_certificates,
53
- )
54
- self.stub = DriverStub(channel)
96
+ if self.stub is not None:
97
+ return
98
+ channel = create_channel(
99
+ server_address=self.superlink,
100
+ insecure=(self.root_certificates_bytes is None),
101
+ root_certificates=self.root_certificates_bytes,
102
+ )
103
+ self.stub = DriverStub(channel)
55
104
 
56
105
  def _create_run(
57
106
  self,
@@ -74,7 +123,9 @@ class DeploymentEngine(Executor):
74
123
 
75
124
  @override
76
125
  def start_run(
77
- self, fab_file: bytes, override_config: Dict[str, str]
126
+ self,
127
+ fab_file: bytes,
128
+ override_config: Dict[str, str],
78
129
  ) -> Optional[RunTracker]:
79
130
  """Start run using the Flower Deployment Engine."""
80
131
  try:
@@ -84,7 +135,7 @@ class DeploymentEngine(Executor):
84
135
 
85
136
  # Install FAB Python package
86
137
  subprocess.check_call(
87
- [sys.executable, "-m", "pip", "install", str(fab_path)],
138
+ [sys.executable, "-m", "pip", "install", "--no-deps", str(fab_path)],
88
139
  stdout=subprocess.DEVNULL,
89
140
  stderr=subprocess.DEVNULL,
90
141
  )
@@ -93,14 +144,27 @@ class DeploymentEngine(Executor):
93
144
  run_id: int = self._create_run(fab_id, fab_version, override_config)
94
145
  log(INFO, "Created run %s", str(run_id))
95
146
 
96
- # Start ServerApp
147
+ command = [
148
+ "flower-server-app",
149
+ "--run-id",
150
+ str(run_id),
151
+ "--superlink",
152
+ str(self.superlink),
153
+ ]
154
+
155
+ if self.flwr_dir:
156
+ command.append("--flwr-dir")
157
+ command.append(self.flwr_dir)
158
+
159
+ if self.root_certificates is None:
160
+ command.append("--insecure")
161
+ else:
162
+ command.append("--root-certificates")
163
+ command.append(self.root_certificates)
164
+
165
+ # Execute the command
97
166
  proc = subprocess.Popen( # pylint: disable=consider-using-with
98
- [
99
- "flower-server-app",
100
- "--run-id",
101
- str(run_id),
102
- "--insecure",
103
- ],
167
+ command,
104
168
  stdout=subprocess.PIPE,
105
169
  stderr=subprocess.PIPE,
106
170
  text=True,
@@ -15,7 +15,7 @@
15
15
  """SuperExec gRPC API."""
16
16
 
17
17
  from logging import INFO
18
- from typing import Optional, Tuple
18
+ from typing import Dict, Optional, Tuple
19
19
 
20
20
  import grpc
21
21
 
@@ -32,8 +32,11 @@ def run_superexec_api_grpc(
32
32
  address: str,
33
33
  executor: Executor,
34
34
  certificates: Optional[Tuple[bytes, bytes, bytes]],
35
+ config: Dict[str, str],
35
36
  ) -> grpc.Server:
36
37
  """Run SuperExec API (gRPC, request-response)."""
38
+ executor.set_config(config)
39
+
37
40
  exec_servicer: grpc.Server = ExecServicer(
38
41
  executor=executor,
39
42
  )
@@ -45,7 +48,7 @@ def run_superexec_api_grpc(
45
48
  certificates=certificates,
46
49
  )
47
50
 
48
- log(INFO, "Flower ECE: Starting SuperExec API (gRPC-rere) on %s", address)
51
+ log(INFO, "Starting Flower SuperExec gRPC server on %s", address)
49
52
  superexec_grpc_server.start()
50
53
 
51
54
  return superexec_grpc_server
@@ -31,9 +31,24 @@ class RunTracker:
31
31
  class Executor(ABC):
32
32
  """Execute and monitor a Flower run."""
33
33
 
34
+ @abstractmethod
35
+ def set_config(
36
+ self,
37
+ config: Dict[str, str],
38
+ ) -> None:
39
+ """Register provided config as class attributes.
40
+
41
+ Parameters
42
+ ----------
43
+ config : Optional[Dict[str, str]]
44
+ A dictionary for configuration values.
45
+ """
46
+
34
47
  @abstractmethod
35
48
  def start_run(
36
- self, fab_file: bytes, override_config: Dict[str, str]
49
+ self,
50
+ fab_file: bytes,
51
+ override_config: Dict[str, str],
37
52
  ) -> Optional[RunTracker]:
38
53
  """Start a run using the given Flower FAB ID and version.
39
54
 
@@ -44,6 +59,8 @@ class Executor(ABC):
44
59
  ----------
45
60
  fab_file : bytes
46
61
  The Flower App Bundle file bytes.
62
+ override_config: Dict[str, str]
63
+ The config overrides dict sent by the user (using `flwr run`).
47
64
 
48
65
  Returns
49
66
  -------
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.10.0.dev20240713
3
+ Version: 1.10.0.dev20240714
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -29,13 +29,13 @@ flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl,sha256=kPG4AIXQfNNHZGYC
29
29
  flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl,sha256=cEq9ZWM3zImJVceNtxHC_bYBLE8OChK0BdjpWs5Wz-0,1881
30
30
  flwr/cli/new/templates/app/code/flwr_tune/server.py.tpl,sha256=Z_JC7-YdjCnnUJPKILwT5Iqc70byJpthbye8RsQp9L0,1548
31
31
  flwr/cli/new/templates/app/code/flwr_tune/static_config.yaml.tpl,sha256=cBPpBVN_N7p4T2a3rqChlngmE0dB_jveOLHesNcEHvs,268
32
- flwr/cli/new/templates/app/code/server.hf.py.tpl,sha256=Mld452y3SUkejlFzac5hpCjT7_mbA0ZEEMJIUyHtSTI,338
33
- flwr/cli/new/templates/app/code/server.jax.py.tpl,sha256=YTi-wroUpjRDY_AZqnoN5X-n3U5V7laL6UJgqFLEbKE,246
34
- flwr/cli/new/templates/app/code/server.mlx.py.tpl,sha256=Cqk3PvM0e7hzohXPqD5hG_cthXoxCfc30bpEThqMy7M,272
35
- flwr/cli/new/templates/app/code/server.numpy.py.tpl,sha256=fRxrDXV7pB1aDhQUXMBmrCsC1zp0uKwsBxZBx1JzbHA,248
36
- flwr/cli/new/templates/app/code/server.pytorch.py.tpl,sha256=ltdsnFSvFGPcycVmRL4ITlr-TV0CmmXcperZe7Vamow,593
37
- flwr/cli/new/templates/app/code/server.sklearn.py.tpl,sha256=cLzOpQzGIUzEazuFsjBpXAQUNPy6in6zR33SCqhix6o,341
38
- flwr/cli/new/templates/app/code/server.tensorflow.py.tpl,sha256=gsNrWCKTU77_65_gw9nlp1LSQojgP5QQIWILvqdjx2s,579
32
+ flwr/cli/new/templates/app/code/server.hf.py.tpl,sha256=BQmQy7UR8B1mNojUaTNVM4ci1pdKCk1Znw4bH_3nE1c,510
33
+ flwr/cli/new/templates/app/code/server.jax.py.tpl,sha256=stWCaIZCqdw-RnLtpa7hdz24JaiG65z2OSTB1yz6NdA,427
34
+ flwr/cli/new/templates/app/code/server.mlx.py.tpl,sha256=P1Odp3SYl0CQt5tX4fcrY4nxOBOejOMMerRvbrOq-KA,427
35
+ flwr/cli/new/templates/app/code/server.numpy.py.tpl,sha256=oZ_KBcvv0NRINjCKbwNCnSz7xcquDRQEgSh7yOEWZ5E,429
36
+ flwr/cli/new/templates/app/code/server.pytorch.py.tpl,sha256=wcekFyR4qMc3zfi39_AmSps8ahL_NpIzfvfI5iKj_vE,744
37
+ flwr/cli/new/templates/app/code/server.sklearn.py.tpl,sha256=SmlGeCnpPlfx0x0P3RgO2jPlablovp0ugMDcPDgXVmk,531
38
+ flwr/cli/new/templates/app/code/server.tensorflow.py.tpl,sha256=DHTIcUzA0XbtUVWvZ8LYABpzwdubsyxkNk42OiWG7vs,762
39
39
  flwr/cli/new/templates/app/code/task.hf.py.tpl,sha256=B5CrA7L5PSOWnluYoAAL7LCeKvP8t-Rhwt6t2ZTYP3g,2873
40
40
  flwr/cli/new/templates/app/code/task.jax.py.tpl,sha256=u4o3V019EH79szOw2xzVeC5r9xgQiayPi9ZTIopV2TA,1519
41
41
  flwr/cli/new/templates/app/code/task.mlx.py.tpl,sha256=nrfZ1aGOs_ayb70j7XdAmwFYa-rN10d9GIMIKLzctUE,2614
@@ -50,7 +50,7 @@ flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=wxN6I8uvWZ4MErvTbQJ
50
50
  flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=wFeJuhqnBPQtKCBvnE3ySBpxmbeNdxcsq2Eb_RmSDIg,655
51
51
  flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=zkxLTQRvujF76sIlzNNGPVU7Y9nVCwNBxAx82AOBaJY,654
52
52
  flwr/cli/run/__init__.py,sha256=oCd6HmQDx-sqver1gecgx-uMA38BLTSiiKpl7RGNceg,789
53
- flwr/cli/run/run.py,sha256=eFYZwHOw9pHo_jxtS-UQIf7LVIOiNwjnJdaykcZQz5Q,4969
53
+ flwr/cli/run/run.py,sha256=b_TcqJAGOiF0RDO5f25HCWYYdG54CxSjtsXwcRYN_J8,4973
54
54
  flwr/cli/utils.py,sha256=l65Ul0YsSBPuypk0uorAtEDmLEYiUrzpCXi6zCg9mJ4,4506
55
55
  flwr/client/__init__.py,sha256=wzJZsYJIHf_8-PMzvfbinyzzjgh1UP1vLrAw2_yEbKI,1345
56
56
  flwr/client/app.py,sha256=5v5EsA1zbViJAp998dCVRXvsyigZ-x3JEIKQ_fLeA48,26102
@@ -264,13 +264,13 @@ flwr/simulation/ray_transport/ray_client_proxy.py,sha256=4KWWGSnfEBe3aGc0Ln5_1yR
264
264
  flwr/simulation/ray_transport/utils.py,sha256=TYdtfg1P9VfTdLMOJlifInGpxWHYs9UfUqIv2wfkRLA,2392
265
265
  flwr/simulation/run_simulation.py,sha256=qGP8sHKAzJT9nGeqMw36iCsVXm4ZFMBisCORuTswr-g,17277
266
266
  flwr/superexec/__init__.py,sha256=9h94ogLxi6eJ3bUuJYq3E3pApThSabTPiSmPAGlTkHE,800
267
- flwr/superexec/app.py,sha256=1ZGSErFo3AQeIQOARKM1DN99fCuH451PeM1bDasBjRQ,6157
268
- flwr/superexec/deployment.py,sha256=xv5iQWuaMeeL0XE5KMLWq3gRU4lvsGu1-_oPIXi5x9E,3955
269
- flwr/superexec/exec_grpc.py,sha256=u-rztpOleqSGqgvNE-ZLw1HchNsBHU1-eB3m52GZ0pQ,1852
267
+ flwr/superexec/app.py,sha256=Zh9I64XfCoghWoT1k2DKDrcVCXIGOpw03v0WKCOg-mg,6402
268
+ flwr/superexec/deployment.py,sha256=o_FYkB_vamBPjeVpPbqvzr4kBYID26sXVDrLO3Ac4R0,6130
269
+ flwr/superexec/exec_grpc.py,sha256=vYbZyV89MuvYDH1XzVYHkKmGfOcU6FWh8rTcIJk2TIQ,1910
270
270
  flwr/superexec/exec_servicer.py,sha256=4R1f_9v0vly_bXpIYaXAeV1tO5LAy1AYygGGGNZmlQk,2194
271
- flwr/superexec/executor.py,sha256=TMQMMf-vv0htlv6v-eEBI67J1WL3Yz7dp_Fm1lgMEyU,1718
272
- flwr_nightly-1.10.0.dev20240713.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
273
- flwr_nightly-1.10.0.dev20240713.dist-info/METADATA,sha256=jmUv-NLDPXbUdEGIEy5HZ94y-UfQzpFziq6s4bj7PEE,15632
274
- flwr_nightly-1.10.0.dev20240713.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
275
- flwr_nightly-1.10.0.dev20240713.dist-info/entry_points.txt,sha256=7qBQcA-bDGDxnJmLd9FYqglFQubjCNqyg9M8a-lukps,336
276
- flwr_nightly-1.10.0.dev20240713.dist-info/RECORD,,
271
+ flwr/superexec/executor.py,sha256=5ua0AU2cfisyD79dosP-POF3w0FRH2I5Wko_PPKLWqU,2153
272
+ flwr_nightly-1.10.0.dev20240714.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
273
+ flwr_nightly-1.10.0.dev20240714.dist-info/METADATA,sha256=9aI10DHtz4gZbec9re5g_yizKlPUjDQptMpkYOShtHE,15632
274
+ flwr_nightly-1.10.0.dev20240714.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
275
+ flwr_nightly-1.10.0.dev20240714.dist-info/entry_points.txt,sha256=7qBQcA-bDGDxnJmLd9FYqglFQubjCNqyg9M8a-lukps,336
276
+ flwr_nightly-1.10.0.dev20240714.dist-info/RECORD,,