flwr-nightly 1.8.0.dev20240221__py3-none-any.whl → 1.8.0.dev20240222__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.
flwr/client/app.py CHANGED
@@ -506,9 +506,7 @@ def start_numpy_client(
506
506
  )
507
507
 
508
508
 
509
- def _init_connection(
510
- transport: Optional[str], server_address: str
511
- ) -> Tuple[
509
+ def _init_connection(transport: Optional[str], server_address: str) -> Tuple[
512
510
  Callable[
513
511
  [str, bool, int, Union[bytes, str, None]],
514
512
  ContextManager[
flwr/common/constant.py CHANGED
@@ -28,10 +28,12 @@ To use the REST API, install `flwr` with the `rest` extra:
28
28
  TRANSPORT_TYPE_GRPC_BIDI = "grpc-bidi"
29
29
  TRANSPORT_TYPE_GRPC_RERE = "grpc-rere"
30
30
  TRANSPORT_TYPE_REST = "rest"
31
+ TRANSPORT_TYPE_VCE = "vce"
31
32
  TRANSPORT_TYPES = [
32
33
  TRANSPORT_TYPE_GRPC_BIDI,
33
34
  TRANSPORT_TYPE_GRPC_RERE,
34
35
  TRANSPORT_TYPE_REST,
36
+ TRANSPORT_TYPE_VCE,
35
37
  ]
36
38
 
37
39
  MESSAGE_TYPE_GET_PROPERTIES = "get_properties"
flwr/common/version.py CHANGED
@@ -1,6 +1,5 @@
1
1
  """Flower package version helper."""
2
2
 
3
-
4
3
  import importlib.metadata as importlib_metadata
5
4
  from typing import Tuple
6
5
 
flwr/server/app.py CHANGED
@@ -34,6 +34,7 @@ from flwr.common.constant import (
34
34
  MISSING_EXTRA_REST,
35
35
  TRANSPORT_TYPE_GRPC_RERE,
36
36
  TRANSPORT_TYPE_REST,
37
+ TRANSPORT_TYPE_VCE,
37
38
  )
38
39
  from flwr.common.logger import log
39
40
  from flwr.proto.driver_pb2_grpc import ( # pylint: disable=E0611
@@ -43,17 +44,18 @@ from flwr.proto.fleet_pb2_grpc import ( # pylint: disable=E0611
43
44
  add_FleetServicer_to_server,
44
45
  )
45
46
 
46
- from .client_manager import ClientManager, SimpleClientManager
47
+ from .client_manager import ClientManager
47
48
  from .history import History
48
- from .server import Server
49
+ from .server import Server, init_defaults, run_fl
49
50
  from .server_config import ServerConfig
50
- from .strategy import FedAvg, Strategy
51
+ from .strategy import Strategy
51
52
  from .superlink.driver.driver_servicer import DriverServicer
52
53
  from .superlink.fleet.grpc_bidi.grpc_server import (
53
54
  generic_create_grpc_server,
54
55
  start_grpc_server,
55
56
  )
56
57
  from .superlink.fleet.grpc_rere.fleet_servicer import FleetServicer
58
+ from .superlink.fleet.vce import start_vce
57
59
  from .superlink.state import StateFactory
58
60
 
59
61
  ADDRESS_DRIVER_API = "0.0.0.0:9091"
@@ -183,47 +185,6 @@ def start_server( # pylint: disable=too-many-arguments,too-many-locals
183
185
  return hist
184
186
 
185
187
 
186
- def init_defaults(
187
- server: Optional[Server],
188
- config: Optional[ServerConfig],
189
- strategy: Optional[Strategy],
190
- client_manager: Optional[ClientManager],
191
- ) -> Tuple[Server, ServerConfig]:
192
- """Create server instance if none was given."""
193
- if server is None:
194
- if client_manager is None:
195
- client_manager = SimpleClientManager()
196
- if strategy is None:
197
- strategy = FedAvg()
198
- server = Server(client_manager=client_manager, strategy=strategy)
199
- elif strategy is not None:
200
- log(WARN, "Both server and strategy were provided, ignoring strategy")
201
-
202
- # Set default config values
203
- if config is None:
204
- config = ServerConfig()
205
-
206
- return server, config
207
-
208
-
209
- def run_fl(
210
- server: Server,
211
- config: ServerConfig,
212
- ) -> History:
213
- """Train a model on the given server and return the History object."""
214
- hist = server.fit(num_rounds=config.num_rounds, timeout=config.round_timeout)
215
- log(INFO, "app_fit: losses_distributed %s", str(hist.losses_distributed))
216
- log(INFO, "app_fit: metrics_distributed_fit %s", str(hist.metrics_distributed_fit))
217
- log(INFO, "app_fit: metrics_distributed %s", str(hist.metrics_distributed))
218
- log(INFO, "app_fit: losses_centralized %s", str(hist.losses_centralized))
219
- log(INFO, "app_fit: metrics_centralized %s", str(hist.metrics_centralized))
220
-
221
- # Graceful shutdown
222
- server.disconnect_all_clients(timeout=config.round_timeout)
223
-
224
- return hist
225
-
226
-
227
188
  def run_driver_api() -> None:
228
189
  """Run Flower server (Driver API)."""
229
190
  log(INFO, "Starting Flower server (Driver API)")
@@ -401,6 +362,15 @@ def run_superlink() -> None:
401
362
  certificates=certificates,
402
363
  )
403
364
  grpc_servers.append(fleet_server)
365
+ elif args.fleet_api_type == TRANSPORT_TYPE_VCE:
366
+ _run_fleet_api_vce(
367
+ num_supernodes=args.num_supernodes,
368
+ client_app_module_name=args.client_app,
369
+ backend_name=args.backend,
370
+ backend_config_json_stream=args.backend_config,
371
+ working_dir=args.dir,
372
+ state_factory=state_factory,
373
+ )
404
374
  else:
405
375
  raise ValueError(f"Unknown fleet_api_type: {args.fleet_api_type}")
406
376
 
@@ -537,6 +507,27 @@ def _run_fleet_api_grpc_rere(
537
507
  return fleet_grpc_server
538
508
 
539
509
 
510
+ # pylint: disable=too-many-arguments
511
+ def _run_fleet_api_vce(
512
+ num_supernodes: int,
513
+ client_app_module_name: str,
514
+ backend_name: str,
515
+ backend_config_json_stream: str,
516
+ working_dir: str,
517
+ state_factory: StateFactory,
518
+ ) -> None:
519
+ log(INFO, "Flower VCE: Starting Fleet API (VirtualClientEngine)")
520
+
521
+ start_vce(
522
+ num_supernodes=num_supernodes,
523
+ client_app_module_name=client_app_module_name,
524
+ backend_name=backend_name,
525
+ backend_config_json_stream=backend_config_json_stream,
526
+ state_factory=state_factory,
527
+ working_dir=working_dir,
528
+ )
529
+
530
+
540
531
  # pylint: disable=import-outside-toplevel,too-many-arguments
541
532
  def _run_fleet_api_rest(
542
533
  host: str,
@@ -714,6 +705,14 @@ def _add_args_fleet_api(parser: argparse.ArgumentParser) -> None:
714
705
  help="Start a Fleet API server (REST, experimental)",
715
706
  )
716
707
 
708
+ ex_group.add_argument(
709
+ "--vce",
710
+ action="store_const",
711
+ dest="fleet_api_type",
712
+ const=TRANSPORT_TYPE_VCE,
713
+ help="Start a Fleet API server (VirtualClientEngine)",
714
+ )
715
+
717
716
  # Fleet API gRPC-rere options
718
717
  grpc_rere_group = parser.add_argument_group(
719
718
  "Fleet API (gRPC-rere) server options", ""
@@ -749,3 +748,36 @@ def _add_args_fleet_api(parser: argparse.ArgumentParser) -> None:
749
748
  type=int,
750
749
  default=1,
751
750
  )
751
+
752
+ # Fleet API VCE options
753
+ vce_group = parser.add_argument_group("Fleet API (VCE) server options", "")
754
+ vce_group.add_argument(
755
+ "--client-app",
756
+ help="For example: `client:app` or `project.package.module:wrapper.app`.",
757
+ )
758
+ vce_group.add_argument(
759
+ "--num-supernodes",
760
+ type=int,
761
+ help="Number of simulated SuperNodes.",
762
+ )
763
+ vce_group.add_argument(
764
+ "--backend",
765
+ default="ray",
766
+ type=str,
767
+ help="Simulation backend that executes the ClientApp.",
768
+ )
769
+ vce_group.add_argument(
770
+ "--backend-config",
771
+ type=str,
772
+ default='{"client_resources": {"num_cpus":1, "num_gpus":0.0}, "tensorflow": 0}',
773
+ help='A JSON formatted stream, e.g \'{"<keyA>":<value>, "<keyB>":<value>}\' to '
774
+ "configure a backend. Values supported in <value> are those included by "
775
+ "`flwr.common.typing.ConfigsRecordValues`. ",
776
+ )
777
+ parser.add_argument(
778
+ "--dir",
779
+ default="",
780
+ help="Add specified directory to the PYTHONPATH and load"
781
+ "ClientApp from there."
782
+ " Default: current working directory.",
783
+ )
flwr/server/compat/app.py CHANGED
@@ -26,10 +26,9 @@ from flwr.common import EventType, event
26
26
  from flwr.common.address import parse_address
27
27
  from flwr.common.logger import log, warn_deprecated_feature
28
28
  from flwr.proto import driver_pb2 # pylint: disable=E0611
29
- from flwr.server.app import init_defaults, run_fl
30
29
  from flwr.server.client_manager import ClientManager
31
30
  from flwr.server.history import History
32
- from flwr.server.server import Server
31
+ from flwr.server.server import Server, init_defaults, run_fl
33
32
  from flwr.server.server_config import ServerConfig
34
33
  from flwr.server.strategy import Strategy
35
34
 
flwr/server/server.py CHANGED
@@ -17,7 +17,7 @@
17
17
 
18
18
  import concurrent.futures
19
19
  import timeit
20
- from logging import DEBUG, INFO
20
+ from logging import DEBUG, INFO, WARN
21
21
  from typing import Dict, List, Optional, Tuple, Union
22
22
 
23
23
  from flwr.common import (
@@ -33,11 +33,13 @@ from flwr.common import (
33
33
  )
34
34
  from flwr.common.logger import log
35
35
  from flwr.common.typing import GetParametersIns
36
- from flwr.server.client_manager import ClientManager
36
+ from flwr.server.client_manager import ClientManager, SimpleClientManager
37
37
  from flwr.server.client_proxy import ClientProxy
38
38
  from flwr.server.history import History
39
39
  from flwr.server.strategy import FedAvg, Strategy
40
40
 
41
+ from .server_config import ServerConfig
42
+
41
43
  FitResultsAndFailures = Tuple[
42
44
  List[Tuple[ClientProxy, FitRes]],
43
45
  List[Union[Tuple[ClientProxy, FitRes], BaseException]],
@@ -441,3 +443,44 @@ def _handle_finished_future_after_evaluate(
441
443
 
442
444
  # Not successful, client returned a result where the status code is not OK
443
445
  failures.append(result)
446
+
447
+
448
+ def init_defaults(
449
+ server: Optional[Server],
450
+ config: Optional[ServerConfig],
451
+ strategy: Optional[Strategy],
452
+ client_manager: Optional[ClientManager],
453
+ ) -> Tuple[Server, ServerConfig]:
454
+ """Create server instance if none was given."""
455
+ if server is None:
456
+ if client_manager is None:
457
+ client_manager = SimpleClientManager()
458
+ if strategy is None:
459
+ strategy = FedAvg()
460
+ server = Server(client_manager=client_manager, strategy=strategy)
461
+ elif strategy is not None:
462
+ log(WARN, "Both server and strategy were provided, ignoring strategy")
463
+
464
+ # Set default config values
465
+ if config is None:
466
+ config = ServerConfig()
467
+
468
+ return server, config
469
+
470
+
471
+ def run_fl(
472
+ server: Server,
473
+ config: ServerConfig,
474
+ ) -> History:
475
+ """Train a model on the given server and return the History object."""
476
+ hist = server.fit(num_rounds=config.num_rounds, timeout=config.round_timeout)
477
+ log(INFO, "app_fit: losses_distributed %s", str(hist.losses_distributed))
478
+ log(INFO, "app_fit: metrics_distributed_fit %s", str(hist.metrics_distributed_fit))
479
+ log(INFO, "app_fit: metrics_distributed %s", str(hist.metrics_distributed))
480
+ log(INFO, "app_fit: losses_centralized %s", str(hist.losses_centralized))
481
+ log(INFO, "app_fit: metrics_centralized %s", str(hist.metrics_centralized))
482
+
483
+ # Graceful shutdown
484
+ server.disconnect_all_clients(timeout=config.round_timeout)
485
+
486
+ return hist
@@ -104,9 +104,9 @@ class DPFedAvgFixed(Strategy):
104
104
  """
105
105
  additional_config = {"dpfedavg_clip_norm": self.clip_norm}
106
106
  if not self.server_side_noising:
107
- additional_config[
108
- "dpfedavg_noise_stddev"
109
- ] = self._calc_client_noise_stddev()
107
+ additional_config["dpfedavg_noise_stddev"] = (
108
+ self._calc_client_noise_stddev()
109
+ )
110
110
 
111
111
  client_instructions = self.strategy.configure_fit(
112
112
  server_round, parameters, client_manager
@@ -0,0 +1,21 @@
1
+ # Copyright 2024 Flower Labs GmbH. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # ==============================================================================
15
+ """Fleet VirtualClientEngine side."""
16
+
17
+ from .vce_api import start_vce
18
+
19
+ __all__ = [
20
+ "start_vce",
21
+ ]
@@ -0,0 +1,71 @@
1
+ # Copyright 2024 Flower Labs GmbH. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # ==============================================================================
15
+ """Fleet VirtualClientEngine API."""
16
+
17
+ import json
18
+ from logging import INFO
19
+ from typing import Dict
20
+
21
+ from flwr.client.clientapp import ClientApp, load_client_app
22
+ from flwr.client.node_state import NodeState
23
+ from flwr.common.logger import log
24
+ from flwr.server.superlink.state import StateFactory
25
+
26
+ NodeToPartitionMapping = Dict[int, int]
27
+
28
+
29
+ def _register_nodes(
30
+ num_nodes: int, state_factory: StateFactory
31
+ ) -> NodeToPartitionMapping:
32
+ """Register nodes with the StateFactory and create node-id:partition-id mapping."""
33
+ nodes_mapping: NodeToPartitionMapping = {}
34
+ state = state_factory.state()
35
+ for i in range(num_nodes):
36
+ node_id = state.create_node()
37
+ nodes_mapping[node_id] = i
38
+ log(INFO, "Registered %i nodes", len(nodes_mapping))
39
+ return nodes_mapping
40
+
41
+
42
+ # pylint: disable=too-many-arguments,unused-argument
43
+ def start_vce(
44
+ num_supernodes: int,
45
+ client_app_module_name: str,
46
+ backend_name: str,
47
+ backend_config_json_stream: str,
48
+ state_factory: StateFactory,
49
+ working_dir: str,
50
+ ) -> None:
51
+ """Start Fleet API with the VirtualClientEngine (VCE)."""
52
+ # Register SuperNodes
53
+ nodes_mapping = _register_nodes(
54
+ num_nodes=num_supernodes, state_factory=state_factory
55
+ )
56
+
57
+ # Construct mapping of NodeStates
58
+ node_states: Dict[int, NodeState] = {}
59
+ for node_id in nodes_mapping:
60
+ node_states[node_id] = NodeState()
61
+
62
+ # Load backend config
63
+ _ = json.loads(backend_config_json_stream)
64
+
65
+ log(INFO, "client_app_str = %s", client_app_module_name)
66
+
67
+ def _load() -> ClientApp:
68
+ app: ClientApp = load_client_app(client_app_module_name)
69
+ return app
70
+
71
+ # start backend
flwr/simulation/app.py CHANGED
@@ -28,10 +28,9 @@ from ray.util.scheduling_strategies import NodeAffinitySchedulingStrategy
28
28
  from flwr.client import ClientFn
29
29
  from flwr.common import EventType, event
30
30
  from flwr.common.logger import log
31
- from flwr.server import Server
32
- from flwr.server.app import init_defaults, run_fl
33
31
  from flwr.server.client_manager import ClientManager
34
32
  from flwr.server.history import History
33
+ from flwr.server.server import Server, init_defaults, run_fl
35
34
  from flwr.server.server_config import ServerConfig
36
35
  from flwr.server.strategy import Strategy
37
36
  from flwr.simulation.ray_transport.ray_actor import (
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.8.0.dev20240221
3
+ Version: 1.8.0.dev20240222
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -18,7 +18,7 @@ flwr/cli/new/templates/app/requirements.pytorch.txt.tpl,sha256=9Z70jsiCPdsbuorhi
18
18
  flwr/cli/new/templates/app/requirements.tensorflow.txt.tpl,sha256=WTbIgK5G_iG0W-xtvQLCZMxL_Og26rFXial2TkYH5dw,211
19
19
  flwr/cli/utils.py,sha256=9cCEIt8QmJXz85JNmPk1IHPd7p8E3KDn6h5CfF0nDL4,1926
20
20
  flwr/client/__init__.py,sha256=ypNGqhSDxEPX_6XwcQyVseBf8oS_Zvs_JkrLbVIeKxw,1186
21
- flwr/client/app.py,sha256=UQR3eQB5U3krn5S4jednr-agfrmdfA7Yk2o4rtmV8LQ,19989
21
+ flwr/client/app.py,sha256=BxQGhdhFiw9JrKu-TcgmyshN02K9QpgWPxFVEcQ4Mb8,19983
22
22
  flwr/client/client.py,sha256=Vp9UkOkoHdNfn6iMYZsj_5m_GICiFfUlKEVaLad-YhM,8183
23
23
  flwr/client/clientapp.py,sha256=jrDgJBswP2hD1YdGgQoI3GU_NkliYWVU8glBJLOVzQY,4205
24
24
  flwr/client/dpfedavg_numpy_client.py,sha256=9Tnig4iml2J88HBKNahegjXjbfvIQyBtaIQaqjbeqsA,7435
@@ -41,7 +41,7 @@ flwr/client/rest_client/connection.py,sha256=363X5FZPg2H8f9dZk_IhUrVK-DGiDHfIodJ
41
41
  flwr/client/typing.py,sha256=c9EvjlEjasxn1Wqx6bGl6Xg6vM1gMFfmXht-E2i5J-k,1006
42
42
  flwr/common/__init__.py,sha256=Pm7NIXPNUxQGe8mMv9L7xFi5VohYnJEpgR-RP7gMDQQ,3466
43
43
  flwr/common/address.py,sha256=iTAN9jtmIGMrWFnx9XZQl45ZEtQJVZZLYPRBSNVARGI,1882
44
- flwr/common/constant.py,sha256=sFkF_YcZgsUPUYA8CvqoM0vjMXlxT0K8m8r6pNBff40,1521
44
+ flwr/common/constant.py,sha256=jVUVKXo1cFb2HpRYqV70WKMG4RqCVrq7H6KC7zXs23Y,1572
45
45
  flwr/common/context.py,sha256=ounF-mWPPtXGwtae3sg5EhF58ScviOa3MVqxRpGVu-8,1313
46
46
  flwr/common/date.py,sha256=UWhBZj49yX9LD4BmatS_ZFZu_-kweGh0KQJ1djyWWH4,891
47
47
  flwr/common/differential_privacy.py,sha256=pVSKRhciVNtdBlhoz1H0--8N5PMLjdO_bA1PLGq4WZ8,2969
@@ -71,7 +71,7 @@ flwr/common/secure_aggregation/secaggplus_utils.py,sha256=PleDyDu7jHNAfbRoEaoQiO
71
71
  flwr/common/serde.py,sha256=0N2SG6T71rVIGPiUIBIZfyWyNGQTp-MjDpy9sDUvrXc,20622
72
72
  flwr/common/telemetry.py,sha256=JkFB6WBOskqAJfzSM-l6tQfRiSi2oiysClfg0-5T7NY,7782
73
73
  flwr/common/typing.py,sha256=3Wu6Ol1Ja6Gb0WdlcXVEn1EHYJbc4oRRJA81vEegxBo,4382
74
- flwr/common/version.py,sha256=A0MKvyKPrV8wLg0YCAODTqM71v26NEH36c6JYtfgg0o,667
74
+ flwr/common/version.py,sha256=_RDSMGZPEuGKYViZuXPotDtXMvh4iyDH9XOCO4qtPO8,666
75
75
  flwr/proto/__init__.py,sha256=hbY7JYakwZwCkYgCNlmHdc8rtvfoJbAZLalMdc--CGc,683
76
76
  flwr/proto/driver_pb2.py,sha256=JHIdjNPTgp6YHD-_lz5ZZFB0VIOR3_GmcaOTN4jndc4,3115
77
77
  flwr/proto/driver_pb2.pyi,sha256=xwl2AqIWn0SwAlg-x5RUQeqr6DC48eywnqmD7gbaaFs,4670
@@ -99,11 +99,11 @@ flwr/proto/transport_pb2_grpc.py,sha256=vLN3EHtx2aEEMCO4f1Upu-l27BPzd3-5pV-u8wPc
99
99
  flwr/proto/transport_pb2_grpc.pyi,sha256=AGXf8RiIiW2J5IKMlm_3qT3AzcDa4F3P5IqUjve_esA,766
100
100
  flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
101
  flwr/server/__init__.py,sha256=_Wv3UkZzSXzbKWXyl2yY8tU6oqf_XqIruggpHjnmikE,1662
102
- flwr/server/app.py,sha256=ymCT16agP_R4MpWnFDP9BHW940fELzQ-zVc5Q5wHDcI,25409
102
+ flwr/server/app.py,sha256=0-p--_yF8rHTPxjrwZnBkEZgEeyAAqJ-i18vdCHTq5g,26328
103
103
  flwr/server/client_manager.py,sha256=T8UDSRJBVD3fyIDI7NTAA-NA7GPrMNNgH2OAF54RRxE,6127
104
104
  flwr/server/client_proxy.py,sha256=8ScGDvP3jHbl8DV3hyFID5N5VEVlXn8ZTQXtkdOfssI,2234
105
105
  flwr/server/compat/__init__.py,sha256=KNvRFANbIc8LFRKHsBVfxcbOSekEImWgNq_gapCkbic,812
106
- flwr/server/compat/app.py,sha256=vhHN5hijhYjfOQdynDB0MloW4zsVzx9roysk2JQtEk4,7886
106
+ flwr/server/compat/app.py,sha256=lfPCbY4WVMvKdscBxraikBn97SEuSwR_dUDoTHTMe7w,7859
107
107
  flwr/server/compat/driver_client_proxy.py,sha256=S3lI6Wi7fpkbg6GEi6TSzB6RHsrIdg1w44sLe-94UUk,6148
108
108
  flwr/server/criterion.py,sha256=ypbAexbztzGUxNen9RCHF91QeqiEQix4t4Ih3E-42MM,1061
109
109
  flwr/server/driver/__init__.py,sha256=yYyVX1FcDiDFM6rw0-DSZpuRy0EoWRfG9puwlQUswFA,820
@@ -111,7 +111,7 @@ flwr/server/driver/driver.py,sha256=DApIRFeEzReZpdAsbFQ68haSUONMstblyOt6qcseMNc,
111
111
  flwr/server/driver/grpc_driver.py,sha256=Ekcxx4Miqume02fiBjBRJhItaOFNpn120WT3uRIPWIc,4585
112
112
  flwr/server/history.py,sha256=W7PHCFX7dLXrdnaVfl5V4tuzmtxh6zArkWYxVXvTZ1c,4904
113
113
  flwr/server/run_serverapp.py,sha256=tYNbz11xMvkbcMty6u5nkLHmZhwIjSO78CfW-Aas5R8,4488
114
- flwr/server/server.py,sha256=skrNgQp9vlCVHruovlaB0Rh1W7xdH7KqEfVCMZGpK7c,15965
114
+ flwr/server/server.py,sha256=kUIqgLIXnWcSrhEhXXkaZPRooYhTGGX-RDCYzG9J76g,17495
115
115
  flwr/server/server_app.py,sha256=avNQ7AMMKsn09ly81C3UBgOfHhM_R29l4MrzlalGoj8,5892
116
116
  flwr/server/server_config.py,sha256=yOHpkdyuhOm--Gy_4Vofvu6jCDxhyECEDpIy02beuCg,1018
117
117
  flwr/server/strategy/__init__.py,sha256=qYOURtpO5DtaDXzvo0wd1lv0cP3wGQxbhqn3s5i8--k,2220
@@ -119,7 +119,7 @@ flwr/server/strategy/aggregate.py,sha256=QyRIJtI5gnuY1NbgrcrOvkHxGIxBvApq7d9Y4xl
119
119
  flwr/server/strategy/bulyan.py,sha256=8GsSVJzRSoSWE2zQUKqC3Z795grdN9xpmc3MSGGXnzM,6532
120
120
  flwr/server/strategy/dp_fixed_clipping.py,sha256=185P6F17uOtRByDaQSCpKj6jCGgP4271xhoMLUl2oR8,6671
121
121
  flwr/server/strategy/dpfedavg_adaptive.py,sha256=hLJkPQJl1bHjwrBNg3PSRFKf3no0hg5EHiFaWhHlWqw,4877
122
- flwr/server/strategy/dpfedavg_fixed.py,sha256=mV_UimlGigUJjc2a9dmUig5EuVZ4yGIb9pkq31bKG1A,7217
122
+ flwr/server/strategy/dpfedavg_fixed.py,sha256=G0yYxrPoM-MHQ889DYN3OeNiEeU0yQrjgAzcq0G653w,7219
123
123
  flwr/server/strategy/fault_tolerant_fedavg.py,sha256=veGcehB6rXT_MihNDrD1v5JY-TxJi7fybdDl-OZooDQ,5900
124
124
  flwr/server/strategy/fedadagrad.py,sha256=9yoVdZOFTjQ7DpaVrYLH9ca88WgJVWepld6UXybGQMY,6505
125
125
  flwr/server/strategy/fedadam.py,sha256=Zvqo6oChwB2aDGHeLXHNE74nHGwkFAWODLZ8f6Dtq1g,6763
@@ -152,6 +152,8 @@ flwr/server/superlink/fleet/message_handler/__init__.py,sha256=hEY0l61ojH8Iz30_K
152
152
  flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=iUBTJ2fzVL0XB8vfaEzCNJ6okeuOWrK6LJe__ElP9x8,2833
153
153
  flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=VKDvDq5H8koOUztpmQacVzGJXPLEEkL1Vmolxt3mvnY,735
154
154
  flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=7JCs7NW4Qq8W5QhXxqsQNFiCLlRY-b_iD420vH1Mu-U,5906
155
+ flwr/server/superlink/fleet/vce/__init__.py,sha256=bogHbcWSXkD7wZkqUXiLRKQTJUs7jtr5uwaGlmoA-Yc,785
156
+ flwr/server/superlink/fleet/vce/vce_api.py,sha256=okSRawmpRD5FntvBYFgAv55dQtXJbZLzHr2XxEqGArM,2351
155
157
  flwr/server/superlink/state/__init__.py,sha256=ij-7Ms-hyordQdRmGQxY1-nVa4OhixJ0jr7_YDkys0s,1003
156
158
  flwr/server/superlink/state/in_memory_state.py,sha256=viGGGyg7LwwxKfCnndV6Tp9poVeZTrbN9z0tt-4qrqI,7903
157
159
  flwr/server/superlink/state/sqlite_state.py,sha256=Adc2g1DecAN9Cl9F8lekuTb885mIHiOi6sQv4nxbmSc,21203
@@ -162,13 +164,13 @@ flwr/server/utils/__init__.py,sha256=RQVbo-bcsVtp_lJBf7dL5w01FbLrr7v3YedeGp5_YMs
162
164
  flwr/server/utils/tensorboard.py,sha256=k0G6bqsLx7wfYbH2KtXsDYcOCfyIeE12-hefXA7lZdg,5485
163
165
  flwr/server/utils/validator.py,sha256=IJN2475yyD_i_9kg_SJ_JodIuZh58ufpWGUDQRAqu2s,4740
164
166
  flwr/simulation/__init__.py,sha256=E2eD5FlTmZZ80u21FmWCkacrM7O4mrEHD8iXqeCaBUQ,1278
165
- flwr/simulation/app.py,sha256=nY_WCwyVWBNB_Tn1AkIle2s5DNyU2W_MaUZSVNNNZ7o,13924
167
+ flwr/simulation/app.py,sha256=WqJxdXTEuehwMW605p5NMmvBbKYx5tuqnV3Mp7jSWXM,13904
166
168
  flwr/simulation/ray_transport/__init__.py,sha256=FsaAnzC4cw4DqoouBCix6496k29jACkfeIam55BvW9g,734
167
169
  flwr/simulation/ray_transport/ray_actor.py,sha256=mg-vsqt8w6ZtGLkHlz6SnZtZz5HcQY0gYiKSlzYT27A,16591
168
170
  flwr/simulation/ray_transport/ray_client_proxy.py,sha256=8I1g8nK0Vz7ygpOSzGZ1oXTfwi1vez8fxYWCdSXBrXE,6290
169
171
  flwr/simulation/ray_transport/utils.py,sha256=TYdtfg1P9VfTdLMOJlifInGpxWHYs9UfUqIv2wfkRLA,2392
170
- flwr_nightly-1.8.0.dev20240221.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
171
- flwr_nightly-1.8.0.dev20240221.dist-info/METADATA,sha256=SGmJbWtZhkOHTdSeH91Uh60KC-JimR-VWgZoedwa-SM,15040
172
- flwr_nightly-1.8.0.dev20240221.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
173
- flwr_nightly-1.8.0.dev20240221.dist-info/entry_points.txt,sha256=S1zLNFLrz0uPWs4Zrgo2EPY0iQiIcCJHrIAlnQkkOBI,262
174
- flwr_nightly-1.8.0.dev20240221.dist-info/RECORD,,
172
+ flwr_nightly-1.8.0.dev20240222.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
173
+ flwr_nightly-1.8.0.dev20240222.dist-info/METADATA,sha256=GyA7xLs4BePK4FYLf19kYaR5vZT9SmSl3Qj5sZ6eosc,15040
174
+ flwr_nightly-1.8.0.dev20240222.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
175
+ flwr_nightly-1.8.0.dev20240222.dist-info/entry_points.txt,sha256=S1zLNFLrz0uPWs4Zrgo2EPY0iQiIcCJHrIAlnQkkOBI,262
176
+ flwr_nightly-1.8.0.dev20240222.dist-info/RECORD,,