flwr-nightly 1.10.0.dev20240721__py3-none-any.whl → 1.10.0.dev20240723__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 (74) hide show
  1. flwr/cli/config_utils.py +20 -18
  2. flwr/cli/new/new.py +1 -1
  3. flwr/cli/new/templates/app/code/{client.hf.py.tpl → client.huggingface.py.tpl} +7 -5
  4. flwr/cli/new/templates/app/code/client.mlx.py.tpl +28 -10
  5. flwr/cli/new/templates/app/code/client.pytorch.py.tpl +7 -5
  6. flwr/cli/new/templates/app/code/client.sklearn.py.tpl +2 -2
  7. flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +17 -7
  8. flwr/cli/new/templates/app/code/flwr_tune/app.py.tpl +20 -17
  9. flwr/cli/new/templates/app/code/flwr_tune/client.py.tpl +5 -3
  10. flwr/cli/new/templates/app/code/{server.hf.py.tpl → server.huggingface.py.tpl} +2 -1
  11. flwr/cli/new/templates/app/code/server.jax.py.tpl +2 -1
  12. flwr/cli/new/templates/app/code/server.mlx.py.tpl +2 -1
  13. flwr/cli/new/templates/app/code/server.numpy.py.tpl +2 -1
  14. flwr/cli/new/templates/app/code/server.pytorch.py.tpl +1 -1
  15. flwr/cli/new/templates/app/code/server.sklearn.py.tpl +2 -1
  16. flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +1 -1
  17. flwr/cli/new/templates/app/code/{task.hf.py.tpl → task.huggingface.py.tpl} +13 -1
  18. flwr/cli/new/templates/app/code/task.mlx.py.tpl +14 -1
  19. flwr/cli/new/templates/app/code/task.pytorch.py.tpl +13 -2
  20. flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +13 -1
  21. flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
  22. flwr/cli/new/templates/app/{pyproject.hf.toml.tpl → pyproject.huggingface.toml.tpl} +2 -2
  23. flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
  24. flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +6 -6
  25. flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
  26. flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +2 -2
  27. flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
  28. flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +4 -4
  29. flwr/cli/run/run.py +35 -28
  30. flwr/client/app.py +3 -3
  31. flwr/client/grpc_rere_client/connection.py +6 -2
  32. flwr/client/node_state.py +3 -3
  33. flwr/client/rest_client/connection.py +6 -2
  34. flwr/client/supernode/app.py +12 -43
  35. flwr/common/config.py +23 -17
  36. flwr/common/context.py +7 -7
  37. flwr/common/object_ref.py +84 -21
  38. flwr/common/serde.py +45 -0
  39. flwr/common/telemetry.py +17 -0
  40. flwr/common/typing.py +5 -1
  41. flwr/proto/common_pb2.py +13 -1
  42. flwr/proto/common_pb2.pyi +114 -0
  43. flwr/proto/driver_pb2.py +22 -21
  44. flwr/proto/driver_pb2.pyi +7 -4
  45. flwr/proto/exec_pb2.py +18 -13
  46. flwr/proto/exec_pb2.pyi +27 -5
  47. flwr/proto/run_pb2.py +10 -9
  48. flwr/proto/run_pb2.pyi +7 -4
  49. flwr/proto/task_pb2.py +7 -8
  50. flwr/server/compat/legacy_context.py +5 -4
  51. flwr/server/driver/grpc_driver.py +6 -2
  52. flwr/server/run_serverapp.py +3 -5
  53. flwr/server/superlink/driver/driver_servicer.py +14 -3
  54. flwr/server/superlink/fleet/message_handler/message_handler.py +13 -2
  55. flwr/server/superlink/fleet/vce/backend/__init__.py +1 -1
  56. flwr/server/superlink/fleet/vce/vce_api.py +4 -4
  57. flwr/server/superlink/state/in_memory_state.py +2 -2
  58. flwr/server/superlink/state/sqlite_state.py +2 -2
  59. flwr/server/superlink/state/state.py +3 -3
  60. flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +18 -2
  61. flwr/simulation/__init__.py +1 -1
  62. flwr/simulation/ray_transport/ray_client_proxy.py +1 -1
  63. flwr/simulation/run_simulation.py +39 -11
  64. flwr/superexec/app.py +4 -5
  65. flwr/superexec/deployment.py +19 -8
  66. flwr/superexec/exec_grpc.py +3 -2
  67. flwr/superexec/exec_servicer.py +3 -1
  68. flwr/superexec/executor.py +10 -5
  69. flwr/superexec/simulation.py +41 -15
  70. {flwr_nightly-1.10.0.dev20240721.dist-info → flwr_nightly-1.10.0.dev20240723.dist-info}/METADATA +1 -1
  71. {flwr_nightly-1.10.0.dev20240721.dist-info → flwr_nightly-1.10.0.dev20240723.dist-info}/RECORD +74 -74
  72. {flwr_nightly-1.10.0.dev20240721.dist-info → flwr_nightly-1.10.0.dev20240723.dist-info}/LICENSE +0 -0
  73. {flwr_nightly-1.10.0.dev20240721.dist-info → flwr_nightly-1.10.0.dev20240723.dist-info}/WHEEL +0 -0
  74. {flwr_nightly-1.10.0.dev20240721.dist-info → flwr_nightly-1.10.0.dev20240723.dist-info}/entry_points.txt +0 -0
@@ -17,7 +17,7 @@
17
17
  import subprocess
18
18
  from logging import ERROR, INFO
19
19
  from pathlib import Path
20
- from typing import Dict, Optional
20
+ from typing import Optional
21
21
 
22
22
  from typing_extensions import override
23
23
 
@@ -25,6 +25,8 @@ from flwr.cli.config_utils import get_fab_metadata
25
25
  from flwr.cli.install import install_from_fab
26
26
  from flwr.common.grpc import create_channel
27
27
  from flwr.common.logger import log
28
+ from flwr.common.serde import user_config_to_proto
29
+ from flwr.common.typing import UserConfig
28
30
  from flwr.proto.driver_pb2 import CreateRunRequest # pylint: disable=E0611
29
31
  from flwr.proto.driver_pb2_grpc import DriverStub
30
32
  from flwr.server.driver.grpc_driver import DEFAULT_SERVER_ADDRESS_DRIVER
@@ -65,13 +67,13 @@ class DeploymentEngine(Executor):
65
67
  @override
66
68
  def set_config(
67
69
  self,
68
- config: Dict[str, str],
70
+ config: UserConfig,
69
71
  ) -> None:
70
72
  """Set executor config arguments.
71
73
 
72
74
  Parameters
73
75
  ----------
74
- config : Dict[str, str]
76
+ config : UserConfig
75
77
  A dictionary for configuration values.
76
78
  Supported configuration key/value pairs:
77
79
  - "superlink": str
@@ -84,12 +86,20 @@ class DeploymentEngine(Executor):
84
86
  if not config:
85
87
  return
86
88
  if superlink_address := config.get("superlink"):
89
+ if not isinstance(superlink_address, str):
90
+ raise ValueError("The `superlink` value should be of type `str`.")
87
91
  self.superlink = superlink_address
88
92
  if root_certificates := config.get("root-certificates"):
93
+ if not isinstance(root_certificates, str):
94
+ raise ValueError(
95
+ "The `root-certificates` value should be of type `str`."
96
+ )
89
97
  self.root_certificates = root_certificates
90
- self.root_certificates_bytes = Path(root_certificates).read_bytes()
98
+ self.root_certificates_bytes = Path(str(root_certificates)).read_bytes()
91
99
  if flwr_dir := config.get("flwr-dir"):
92
- self.flwr_dir = flwr_dir
100
+ if not isinstance(flwr_dir, str):
101
+ raise ValueError("The `flwr-dir` value should be of type `str`.")
102
+ self.flwr_dir = str(flwr_dir)
93
103
 
94
104
  def _connect(self) -> None:
95
105
  if self.stub is not None:
@@ -105,7 +115,7 @@ class DeploymentEngine(Executor):
105
115
  self,
106
116
  fab_id: str,
107
117
  fab_version: str,
108
- override_config: Dict[str, str],
118
+ override_config: UserConfig,
109
119
  ) -> int:
110
120
  if self.stub is None:
111
121
  self._connect()
@@ -115,7 +125,7 @@ class DeploymentEngine(Executor):
115
125
  req = CreateRunRequest(
116
126
  fab_id=fab_id,
117
127
  fab_version=fab_version,
118
- override_config=override_config,
128
+ override_config=user_config_to_proto(override_config),
119
129
  )
120
130
  res = self.stub.CreateRun(request=req)
121
131
  return int(res.run_id)
@@ -124,7 +134,8 @@ class DeploymentEngine(Executor):
124
134
  def start_run(
125
135
  self,
126
136
  fab_file: bytes,
127
- override_config: Dict[str, str],
137
+ override_config: UserConfig,
138
+ federation_config: UserConfig,
128
139
  ) -> Optional[RunTracker]:
129
140
  """Start run using the Flower Deployment Engine."""
130
141
  try:
@@ -15,12 +15,13 @@
15
15
  """SuperExec gRPC API."""
16
16
 
17
17
  from logging import INFO
18
- from typing import Dict, Optional, Tuple
18
+ from typing import Optional, Tuple
19
19
 
20
20
  import grpc
21
21
 
22
22
  from flwr.common import GRPC_MAX_MESSAGE_LENGTH
23
23
  from flwr.common.logger import log
24
+ from flwr.common.typing import UserConfig
24
25
  from flwr.proto.exec_pb2_grpc import add_ExecServicer_to_server
25
26
  from flwr.server.superlink.fleet.grpc_bidi.grpc_server import generic_create_grpc_server
26
27
 
@@ -32,7 +33,7 @@ def run_superexec_api_grpc(
32
33
  address: str,
33
34
  executor: Executor,
34
35
  certificates: Optional[Tuple[bytes, bytes, bytes]],
35
- config: Dict[str, str],
36
+ config: UserConfig,
36
37
  ) -> grpc.Server:
37
38
  """Run SuperExec API (gRPC, request-response)."""
38
39
  executor.set_config(config)
@@ -21,6 +21,7 @@ from typing import Any, Dict, Generator
21
21
  import grpc
22
22
 
23
23
  from flwr.common.logger import log
24
+ from flwr.common.serde import user_config_from_proto
24
25
  from flwr.proto import exec_pb2_grpc # pylint: disable=E0611
25
26
  from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
26
27
  StartRunRequest,
@@ -47,7 +48,8 @@ class ExecServicer(exec_pb2_grpc.ExecServicer):
47
48
 
48
49
  run = self.executor.start_run(
49
50
  request.fab_file,
50
- dict(request.override_config.items()),
51
+ user_config_from_proto(request.override_config),
52
+ user_config_from_proto(request.federation_config),
51
53
  )
52
54
 
53
55
  if run is None:
@@ -17,7 +17,9 @@
17
17
  from abc import ABC, abstractmethod
18
18
  from dataclasses import dataclass
19
19
  from subprocess import Popen
20
- from typing import Dict, Optional
20
+ from typing import Optional
21
+
22
+ from flwr.common.typing import UserConfig
21
23
 
22
24
 
23
25
  @dataclass
@@ -34,13 +36,13 @@ class Executor(ABC):
34
36
  @abstractmethod
35
37
  def set_config(
36
38
  self,
37
- config: Dict[str, str],
39
+ config: UserConfig,
38
40
  ) -> None:
39
41
  """Register provided config as class attributes.
40
42
 
41
43
  Parameters
42
44
  ----------
43
- config : Optional[Dict[str, str]]
45
+ config : UserConfig
44
46
  A dictionary for configuration values.
45
47
  """
46
48
 
@@ -48,7 +50,8 @@ class Executor(ABC):
48
50
  def start_run(
49
51
  self,
50
52
  fab_file: bytes,
51
- override_config: Dict[str, str],
53
+ override_config: UserConfig,
54
+ federation_config: UserConfig,
52
55
  ) -> Optional[RunTracker]:
53
56
  """Start a run using the given Flower FAB ID and version.
54
57
 
@@ -59,8 +62,10 @@ class Executor(ABC):
59
62
  ----------
60
63
  fab_file : bytes
61
64
  The Flower App Bundle file bytes.
62
- override_config: Dict[str, str]
65
+ override_config: UserConfig
63
66
  The config overrides dict sent by the user (using `flwr run`).
67
+ federation_config: UserConfig
68
+ The federation options dict sent by the user (using `flwr run`).
64
69
 
65
70
  Returns
66
71
  -------
@@ -18,7 +18,7 @@
18
18
  import subprocess
19
19
  import sys
20
20
  from logging import ERROR, INFO, WARN
21
- from typing import Dict, Optional
21
+ from typing import Optional
22
22
 
23
23
  from typing_extensions import override
24
24
 
@@ -26,11 +26,31 @@ from flwr.cli.config_utils import load_and_validate
26
26
  from flwr.cli.install import install_from_fab
27
27
  from flwr.common.constant import RUN_ID_NUM_BYTES
28
28
  from flwr.common.logger import log
29
+ from flwr.common.typing import UserConfig
29
30
  from flwr.server.superlink.state.utils import generate_rand_int_from_bytes
30
31
 
31
32
  from .executor import Executor, RunTracker
32
33
 
33
34
 
35
+ def _user_config_to_str(user_config: UserConfig) -> str:
36
+ """Convert override user config to string."""
37
+ user_config_list_str = []
38
+ for key, value in user_config.items():
39
+ if isinstance(value, bool):
40
+ user_config_list_str.append(f"{key}={str(value).lower()}")
41
+ elif isinstance(value, (int, float)):
42
+ user_config_list_str.append(f"{key}={value}")
43
+ elif isinstance(value, str):
44
+ user_config_list_str.append(f'{key}="{value}"')
45
+ else:
46
+ raise ValueError(
47
+ "Only types `bool`, `float`, `int` and `str` are supported"
48
+ )
49
+
50
+ user_config_str = ",".join(user_config_list_str)
51
+ return user_config_str
52
+
53
+
34
54
  class SimulationEngine(Executor):
35
55
  """Simulation engine executor.
36
56
 
@@ -42,43 +62,49 @@ class SimulationEngine(Executor):
42
62
 
43
63
  def __init__(
44
64
  self,
45
- num_supernodes: Optional[str] = None,
65
+ num_supernodes: Optional[int] = None,
46
66
  ) -> None:
47
67
  self.num_supernodes = num_supernodes
48
68
 
49
69
  @override
50
70
  def set_config(
51
71
  self,
52
- config: Dict[str, str],
72
+ config: UserConfig,
53
73
  ) -> None:
54
74
  """Set executor config arguments.
55
75
 
56
76
  Parameters
57
77
  ----------
58
- config : Dict[str, str]
78
+ config : UserConfig
59
79
  A dictionary for configuration values.
60
80
  Supported configuration key/value pairs:
61
- - "num-supernodes": str
81
+ - "num-supernodes": int
62
82
  Number of nodes to register for the simulation.
63
83
  """
64
84
  if not config:
65
85
  return
66
86
  if num_supernodes := config.get("num-supernodes"):
87
+ if not isinstance(num_supernodes, int):
88
+ raise ValueError("The `num-supernodes` value should be of type `int`.")
67
89
  self.num_supernodes = num_supernodes
68
-
69
- # Validate config
70
- if self.num_supernodes is None:
90
+ else:
71
91
  log(
72
92
  ERROR,
73
93
  "To start a run with the simulation plugin, please specify "
74
94
  "the number of SuperNodes. This can be done by using the "
75
95
  "`--executor-config` argument when launching the SuperExec.",
76
96
  )
77
- raise ValueError("`num-supernodes` must not be `None`")
97
+ raise ValueError(
98
+ "`num-supernodes` must not be `None`, it must be a valid "
99
+ "positive integer."
100
+ )
78
101
 
79
102
  @override
80
103
  def start_run(
81
- self, fab_file: bytes, override_config: Dict[str, str]
104
+ self,
105
+ fab_file: bytes,
106
+ override_config: UserConfig,
107
+ federation_config: UserConfig,
82
108
  ) -> Optional[RunTracker]:
83
109
  """Start run using the Flower Simulation Engine."""
84
110
  try:
@@ -116,18 +142,18 @@ class SimulationEngine(Executor):
116
142
  "--app",
117
143
  f"{str(fab_path)}",
118
144
  "--num-supernodes",
119
- f"{self.num_supernodes}",
145
+ f"{federation_config.get('num-supernodes', self.num_supernodes)}",
120
146
  "--run-id",
121
147
  str(run_id),
122
148
  ]
123
149
 
124
150
  if override_config:
125
- command.extend(["--run-config", f"{override_config}"])
151
+ override_config_str = _user_config_to_str(override_config)
152
+ command.extend(["--run-config", f"{override_config_str}"])
126
153
 
127
154
  # Start Simulation
128
- proc = subprocess.run( # pylint: disable=consider-using-with
155
+ proc = subprocess.Popen( # pylint: disable=consider-using-with
129
156
  command,
130
- check=True,
131
157
  text=True,
132
158
  )
133
159
 
@@ -135,7 +161,7 @@ class SimulationEngine(Executor):
135
161
 
136
162
  return RunTracker(
137
163
  run_id=run_id,
138
- proc=proc, # type:ignore
164
+ proc=proc,
139
165
  )
140
166
 
141
167
  # pylint: disable-next=broad-except
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.10.0.dev20240721
3
+ Version: 1.10.0.dev20240723
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -2,11 +2,11 @@ flwr/__init__.py,sha256=VmBWedrCxqmt4QvUHBLqyVEH6p7zaFMD_oCHerXHSVw,937
2
2
  flwr/cli/__init__.py,sha256=cZJVgozlkC6Ni2Hd_FAIrqefrkCGOV18fikToq-6iLw,720
3
3
  flwr/cli/app.py,sha256=FBcSrE35ll88VE11ib67qgsJe2GYDN25UswV9-cYcX8,1267
4
4
  flwr/cli/build.py,sha256=5igi2013fLH-TlR6MNpbxNEMaVqdBbts-E-WdY3JPsE,5167
5
- flwr/cli/config_utils.py,sha256=6g5gxdEKSYVomwG9w8Pfa-RzMWdbV6XchdUpJ5rzDhg,6817
5
+ flwr/cli/config_utils.py,sha256=kSgAMA4KE2SEKmfKLEvMcYQVdT8fTEnX5JTq2t04wGM,7057
6
6
  flwr/cli/example.py,sha256=1bGDYll3BXQY2kRqSN-oICqS5n1b9m0g0RvXTopXHl4,2215
7
7
  flwr/cli/install.py,sha256=AI6Zv2dQVDHpLDX1Z_vX5XHVxmZo1OU3ndCSrD2stzQ,7059
8
8
  flwr/cli/new/__init__.py,sha256=cQzK1WH4JP2awef1t2UQ2xjl1agVEz9rwutV18SWV1k,789
9
- flwr/cli/new/new.py,sha256=gUz0qiqDyVrb107pDnBAJwYhWcQXM3K4a533KXhsYxI,9614
9
+ flwr/cli/new/new.py,sha256=LIUAIxhqc04rxl8sOr-9JbUlOWNiHf6UUpiDQD1hH-s,9623
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
@@ -14,46 +14,46 @@ flwr/cli/new/templates/app/README.md.tpl,sha256=_qGtgpKYKoCJVjQnvlBMKvFs_1gzTcL9
14
14
  flwr/cli/new/templates/app/__init__.py,sha256=DU7QMY7IhMQyuwm_tja66xU0KXTWQFqzfTqwg-_NJdE,729
15
15
  flwr/cli/new/templates/app/code/__init__.py,sha256=EM6vfvgAILKPaPn7H1wMV1Wi01WyZCP_Eg6NxD6oWg8,736
16
16
  flwr/cli/new/templates/app/code/__init__.py.tpl,sha256=olwrBeJemHNBWvjc6gJURloFRqW40dAy7FRQA5pDqHU,21
17
- flwr/cli/new/templates/app/code/client.hf.py.tpl,sha256=_x-V6EcSgX2nPo-0ODHaKFgt9n_aONNrWpkbQPrTxE0,1727
17
+ flwr/cli/new/templates/app/code/client.huggingface.py.tpl,sha256=gELeNHzJQLMhBIMxnW7rqKGHf-jE9oLMWA2-UesVCao,1813
18
18
  flwr/cli/new/templates/app/code/client.jax.py.tpl,sha256=i_SZykD42vqEvv2ZyX655szuikXJXLc6uV1T-LWiYLU,1479
19
- flwr/cli/new/templates/app/code/client.mlx.py.tpl,sha256=rrRXIU-jrx4FuzbMjqlMCrWi9ctEmtI9UCwol-U0oPg,2513
19
+ flwr/cli/new/templates/app/code/client.mlx.py.tpl,sha256=2NBg3Q7siU-SsReTMZ6W1VwcuVImaxH7L2r1AkSJyYQ,2895
20
20
  flwr/cli/new/templates/app/code/client.numpy.py.tpl,sha256=ov9mtWJGjaQ9ZVlQ5jsuCjHDeETf13GFla5jbP3KimE,561
21
- flwr/cli/new/templates/app/code/client.pytorch.py.tpl,sha256=CJXi89YbOEirevOSy-VmfCpN59vV5Q3iM2TwCTgWkGc,1472
22
- flwr/cli/new/templates/app/code/client.sklearn.py.tpl,sha256=44NQwBGHT1hTunUXQIvmv1EWDvKLw4Z40J1QnFRqIao,2986
23
- flwr/cli/new/templates/app/code/client.tensorflow.py.tpl,sha256=Rb0St2Hp-ftQyYR_Ao6okT8lkiQto76M66fp_y3Etgo,1664
21
+ flwr/cli/new/templates/app/code/client.pytorch.py.tpl,sha256=-Q41F1fqt_RzqM_C3qA-dKl4AoRev9jZq-pFo7LCaVU,1558
22
+ flwr/cli/new/templates/app/code/client.sklearn.py.tpl,sha256=9JUQc_qAoo7dizeAhaHC_Ml06dYtEIxHZrCNxl5xTDs,2976
23
+ flwr/cli/new/templates/app/code/client.tensorflow.py.tpl,sha256=yIK9nE5YUaidM5YPtlfBbfMBSYDp-h7adjmT599TtR8,1891
24
24
  flwr/cli/new/templates/app/code/flwr_tune/__init__.py,sha256=JgNgBtKdm1jKM9625WxappCAVUGtYAmcjKSsXJ1u3ZQ,748
25
- flwr/cli/new/templates/app/code/flwr_tune/app.py.tpl,sha256=p5ImtKbFXw3x64n9xehvMwqXUmjLcwYfUPvRqKK2owU,2655
26
- flwr/cli/new/templates/app/code/flwr_tune/client.py.tpl,sha256=MvQ5tt1r7CBUR8y-nBcZs4as2m1YimxegLYw_nHmXzc,4048
25
+ flwr/cli/new/templates/app/code/flwr_tune/app.py.tpl,sha256=LOtmEYYayMCpF4rJRdo059n5w_cZRmzyuEkCN2qpTyQ,2826
26
+ flwr/cli/new/templates/app/code/flwr_tune/client.py.tpl,sha256=3s41XYHRvmcLhyA60tZyGCNK2wxo2shl6mwmPfZANlA,4155
27
27
  flwr/cli/new/templates/app/code/flwr_tune/config.yaml.tpl,sha256=aPjrwFU020tPkJmOjzSUjb9dSi2bhs4ZTMEyd0uRlCA,867
28
28
  flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl,sha256=kPG4AIXQfNNHZGYC3amet3ttI23N72N6jjoDkp_wYIA,2028
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=tz4hgAGV6pn5cOFW10ELRNRsUzLBSssHxrH_gSs_jtk,1552
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=oYJpB0Y_F6nSgelf7NQ1BWZxxW5E6rBrQVmIQNQUPfc,605
33
- flwr/cli/new/templates/app/code/server.jax.py.tpl,sha256=z9q6AHu_1vMRBVMlnDshPScV6GPTBdwuV49L5ekDVAI,522
34
- flwr/cli/new/templates/app/code/server.mlx.py.tpl,sha256=2C4KeLiJMr2fQaXHXdpTf6fpHpeMRv4JWpxQJy_VI20,522
35
- flwr/cli/new/templates/app/code/server.numpy.py.tpl,sha256=MYXAJDIDw5mRLSG-B3trJZoC3krPPWpvinYHeiUbAmA,524
36
- flwr/cli/new/templates/app/code/server.pytorch.py.tpl,sha256=lBNcTJL01x90bjQ2ITv_pMFzzSSd1Pboy-72h7ejRk4,839
37
- flwr/cli/new/templates/app/code/server.sklearn.py.tpl,sha256=1Zg0SNqLEGryCjhCs9hUNGIVWUQgmxVz4ImE8utH_Ck,626
38
- flwr/cli/new/templates/app/code/server.tensorflow.py.tpl,sha256=IRhPa0JzlmAs8j55h2mp2VeT6tNXoRkmpNL7kBlaK5c,857
39
- flwr/cli/new/templates/app/code/task.hf.py.tpl,sha256=B5CrA7L5PSOWnluYoAAL7LCeKvP8t-Rhwt6t2ZTYP3g,2873
32
+ flwr/cli/new/templates/app/code/server.huggingface.py.tpl,sha256=r-sO6W-K-apf3byEQDh70ANHfPwsRgArJgTuctFFBi4,601
33
+ flwr/cli/new/templates/app/code/server.jax.py.tpl,sha256=hg6GrJu4B1Lifc-WyZq9vb3c5FnrTjkz3rdr3HxrJwo,518
34
+ flwr/cli/new/templates/app/code/server.mlx.py.tpl,sha256=qyo_Nla-AVC1Yf7sJJ-xlOHLLE7e0FRNkWcoltB68ag,518
35
+ flwr/cli/new/templates/app/code/server.numpy.py.tpl,sha256=R_-xdu9eEvrN_lhyqK4akSCQaj7sPP4QIACZkUZ7Ihw,520
36
+ flwr/cli/new/templates/app/code/server.pytorch.py.tpl,sha256=FH6jQsUliJueMVzXlrvr1aFwXWq6Mp_6jjmNbolkEcA,834
37
+ flwr/cli/new/templates/app/code/server.sklearn.py.tpl,sha256=blkpvISjmPNOaJCyZf5Ezrg8VyxXdHUzxb3vMxcD3Lg,622
38
+ flwr/cli/new/templates/app/code/server.tensorflow.py.tpl,sha256=LGQaVsfo5rVzgiFTew0z3O6AVwIoDG5rdobnwMpb1yE,852
39
+ flwr/cli/new/templates/app/code/task.huggingface.py.tpl,sha256=jiCZobChVJkm9OomI9_Q0bCsdGfXMgVh5bY_OulsLMk,3163
40
40
  flwr/cli/new/templates/app/code/task.jax.py.tpl,sha256=u4o3V019EH79szOw2xzVeC5r9xgQiayPi9ZTIopV2TA,1519
41
- flwr/cli/new/templates/app/code/task.mlx.py.tpl,sha256=nrfZ1aGOs_ayb70j7XdAmwFYa-rN10d9GIMIKLzctUE,2614
42
- flwr/cli/new/templates/app/code/task.pytorch.py.tpl,sha256=TU4uNtJ9wtxeVvoHD3_K89EFWmrIvdECdASzRX-4Uvk,3694
43
- flwr/cli/new/templates/app/code/task.tensorflow.py.tpl,sha256=cPOUUS07QbblT9PGFucwu9lY1clRA4-W4DQGA7cpcao,1044
44
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=XBcU_XPYt7GecNjeBmD915fZGsF189QMb_IzFl4ATTA,777
45
- flwr/cli/new/templates/app/pyproject.hf.toml.tpl,sha256=T9LczlVvebZv10YHPi5Yd1K_MGen7kj6QEkGych7nmU,780
46
- flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=fbVZTD5mYghFWpS3nFjHjqBTbD9VzEbnn1HTdznRUWU,651
47
- flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=ztZC5kQhjzVUUnvlfhOPebn1dx9QJOHRP4JARuZ_5EQ,750
48
- flwr/cli/new/templates/app/pyproject.numpy.toml.tpl,sha256=5KiJUl6gm7rmW4xIBgF5qK5s2YMnMkouHBdOHuWUmcw,604
49
- flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=Ur0D2S98AnoiVcy_pTQnxSuLssioQe6yzGWQ1rLkTU8,692
50
- flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=lOi7R32xbO6MF5_BF6-bUbjWoC_z3XtJhRj1REHmL5w,653
51
- flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=svb0YkuTACGh_PWn_tbiH8T05xrnn0MyVEnuQsQH4h0,730
41
+ flwr/cli/new/templates/app/code/task.mlx.py.tpl,sha256=r-GWvlhWo1VuqgtLUnT2pUTAGGsXdlISfzM8puuf7sQ,2935
42
+ flwr/cli/new/templates/app/code/task.pytorch.py.tpl,sha256=LEBb0-IOAlnRnn-aTAYv80Fgs67wHCSP6PlhNBdsH2k,3939
43
+ flwr/cli/new/templates/app/code/task.tensorflow.py.tpl,sha256=8sZ8Y5kkaptzwfhAeuoBdth7VFQmD9jjjUrRvcyRrEk,1330
44
+ flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=YIiSHT8F22WLMqxg0ckGhSMKppne_8--j5ybqX9EXp4,775
45
+ flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl,sha256=X82t0bKRzsTG1w5kjkZhCLneyFJouX41-6Uvsj1sb8Q,776
46
+ flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=lPnpQpgNf4hVfLlgxPT8fQNMuVC1SqgZTA_SsU0pixE,649
47
+ flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=7f7nmPVtqzBmg4q5dhCSK5Ofepg3HjnOy27BQcbQC_I,738
48
+ flwr/cli/new/templates/app/pyproject.numpy.toml.tpl,sha256=_p-Pn36F3i-tgbmw496FyW9RSxhJQ4TWuVdgkhh-_VU,602
49
+ flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=2bBdohcxbVgKClrbCuOi37PKlb86wSx8tpsdfcmJg2M,688
50
+ flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=NGCsJQYSwGLGy8y2du7DDKmSju25FbCwGDt8lzzJHHo,651
51
+ flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=UJ9oGPeGFMdH6IGECAy7SSV2xc4J4BVkJW1BKpUdWDM,699
52
52
  flwr/cli/run/__init__.py,sha256=oCd6HmQDx-sqver1gecgx-uMA38BLTSiiKpl7RGNceg,789
53
- flwr/cli/run/run.py,sha256=DnABj0eJMNj_05nxzP8CCodocHe-EmDlAZhylGceauY,6983
53
+ flwr/cli/run/run.py,sha256=s6I2EU6dmjJHPJ_LNdjIBe9UZlCwvf5RA5O61nAgO3g,7483
54
54
  flwr/cli/utils.py,sha256=l65Ul0YsSBPuypk0uorAtEDmLEYiUrzpCXi6zCg9mJ4,4506
55
55
  flwr/client/__init__.py,sha256=wzJZsYJIHf_8-PMzvfbinyzzjgh1UP1vLrAw2_yEbKI,1345
56
- flwr/client/app.py,sha256=jobLLjUGV3pkSYpd2wGyzG8e1KZPk2_O47IjTsXnk6Y,26106
56
+ flwr/client/app.py,sha256=VJ_vPMVfur5_SqUjHa18VWLB6I9kOav78f5myC_iWuk,26110
57
57
  flwr/client/client.py,sha256=Vp9UkOkoHdNfn6iMYZsj_5m_GICiFfUlKEVaLad-YhM,8183
58
58
  flwr/client/client_app.py,sha256=WcO4r6wrdfaus__3s22D2sYjfcptdgmVujUAYdNE6HU,10393
59
59
  flwr/client/dpfedavg_numpy_client.py,sha256=ylZ-LpBIKmL1HCiS8kq4pkp2QGalc8rYEzDHdRG3VRQ,7435
@@ -63,7 +63,7 @@ flwr/client/grpc_client/__init__.py,sha256=LsnbqXiJhgQcB0XzAlUQgPx011Uf7Y7yabIC1
63
63
  flwr/client/grpc_client/connection.py,sha256=7J3YlvvBrky3f8UJ99U9IsPECGtcY8rvXsyr_Ol8qyY,9311
64
64
  flwr/client/grpc_rere_client/__init__.py,sha256=MK-oSoV3kwUEQnIwl0GN4OpiHR7eLOrMA8ikunET130,752
65
65
  flwr/client/grpc_rere_client/client_interceptor.py,sha256=sYPEznuQPdy2BPDlvM9FK0ZRRucb4NfwUee1Z_mN82E,4954
66
- flwr/client/grpc_rere_client/connection.py,sha256=nC4Usb1qok2liVxwlbQokUNwRRRD10_GIscbspqqz_c,10338
66
+ flwr/client/grpc_rere_client/connection.py,sha256=MFDfvYQX-ges2rOgsn1GIOTGY3Py0g2GTnHRtdOdjVA,10389
67
67
  flwr/client/grpc_rere_client/grpc_adapter.py,sha256=woljH8yr1pyLH4W4Azogyy7Nafn6y9DHBnDCIIVKwCw,4711
68
68
  flwr/client/heartbeat.py,sha256=cx37mJBH8LyoIN4Lks85wtqT1mnU5GulQnr4pGCvAq0,2404
69
69
  flwr/client/message_handler/__init__.py,sha256=QxxQuBNpFPTHx3KiUNvQSlqMKlEnbRR1kFfc1KVje08,719
@@ -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=4WUQv0_bcKKEs5Vk4j7YsHMpoxV8oAUAhBIY4gW--sM,3488
80
+ flwr/client/node_state.py,sha256=Z0ZUPL5BWde9nfAPwR7cSV9YiNQeiEHbuMKDxqpy6-M,3492
81
81
  flwr/client/node_state_tests.py,sha256=-4fVsn7y-z9NYBuhq-cjepgxgVuPqqQgDOL4SofrdIo,2239
82
82
  flwr/client/numpy_client.py,sha256=u76GWAdHmJM88Agm2EgLQSvO8Jnk225mJTk-_TmPjFE,10283
83
83
  flwr/client/rest_client/__init__.py,sha256=5KGlp7pjc1dhNRkKlaNtUfQmg8wrRFh9lS3P3uRS-7Q,735
84
- flwr/client/rest_client/connection.py,sha256=aY_UzrNyE8g-xPAK_POZZZ93mERHTe-pOhNP-uZ8GyU,12147
84
+ flwr/client/rest_client/connection.py,sha256=8LPk7zPvX3l3-5QQXNym8DkIe6V14uEHmTzQ8jCcsnQ,12198
85
85
  flwr/client/supernode/__init__.py,sha256=SUhWOzcgXRNXk1V9UgB5-FaWukqqrOEajVUHEcPkwyQ,865
86
- flwr/client/supernode/app.py,sha256=4qOYa3pA_iBCSd6fWuIqeZidArVjLQ5kTNhEdtARHbo,15610
86
+ flwr/client/supernode/app.py,sha256=GI2jnttoUt31v39Q-F2dS-WZuesG7IhGXfhP0oylaUU,14694
87
87
  flwr/client/typing.py,sha256=dxoTBnTMfqXr5J7G3y-uNjqxYCddvxhu89spfj4Lm2U,1048
88
88
  flwr/common/__init__.py,sha256=4cBLNNnNTwHDnL_HCxhU5ILCSZ6fYh3A_aMBtlvHTVw,3721
89
89
  flwr/common/address.py,sha256=wRu1Luezx1PWadwV9OA_KNko01oVvbRnPqfzaDn8QOk,1882
90
- flwr/common/config.py,sha256=PAZcJy4-n_XzzRycu2cCs7N7chniooRclHiX0lUlnZc,5442
90
+ flwr/common/config.py,sha256=IN3UVfC4h-ItpbAOhJXNsVA63ZOJ05twsmIv3AbSU04,5599
91
91
  flwr/common/constant.py,sha256=1XxuRezsr9fl3xvQNPR2kyFkwNeG_f5vZayv0PFh0kY,3012
92
- flwr/common/context.py,sha256=CQt4uzCDvCIr2WdkrWq0obAz92k2_ucXGrWtBZCxP_M,2256
92
+ flwr/common/context.py,sha256=5Bd9RCrhLkYZOVR7vr97OVhzVBHQkS1fUsYiIKTwpxU,2239
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
@@ -98,7 +98,7 @@ flwr/common/exit_handlers.py,sha256=2Nt0wLhc17KQQsLPFSRAjjhUiEFfJK6tNozdGiIY4Fs,
98
98
  flwr/common/grpc.py,sha256=_9838_onFLx7W6_lakUN35ziKpdcKp7fA-0jE0EhcEQ,2460
99
99
  flwr/common/logger.py,sha256=42rLD69BetRkVKYXZLUaTgyjPxsCn6phVbndMC1fWjk,8130
100
100
  flwr/common/message.py,sha256=QmFYYXA-3e9M8tGO-3NPyAI8yvdmcpdYaA_noR1DE88,13194
101
- flwr/common/object_ref.py,sha256=PQR0tztVOkD1nn_uGuNz4bHm7z4fwsosTsUKvWIGF5Y,6506
101
+ flwr/common/object_ref.py,sha256=qXwF441qulzl18pggrj9LDLtz92K83xjAuSA0HfPKP0,8724
102
102
  flwr/common/parameter.py,sha256=-bFAUayToYDF50FZGrBC1hQYJCQDtB2bbr3ZuVLMtdE,2095
103
103
  flwr/common/pyproject.py,sha256=EI_ovbCHGmhYrdPx0RSDi5EkFZFof-8m1PA54c0ZTjc,1385
104
104
  flwr/common/record/__init__.py,sha256=ejDBQOIA0OkwZAC5cK_tTPHA4oAM0Ju7Oi13-NneMlE,1054
@@ -118,25 +118,25 @@ flwr/common/secure_aggregation/ndarrays_arithmetic.py,sha256=7Y0WnWcYi8UWZEKnUb4
118
118
  flwr/common/secure_aggregation/quantization.py,sha256=1obYr9qneaI8r-A0F_pghrPNG9FcAwM5svSLbzMw6C4,2310
119
119
  flwr/common/secure_aggregation/secaggplus_constants.py,sha256=9MF-oQh62uD7rt9VeNB-rHf2gBLd5GL3S9OejCxmILY,2183
120
120
  flwr/common/secure_aggregation/secaggplus_utils.py,sha256=3VssKgYF7HQIkSpROnEUoYWVt47p12PE_Rj4nYqqg04,3221
121
- flwr/common/serde.py,sha256=Yn83kbSf9vJndTa5ldL4DR_bL_wy_bD4lTlD3ZbB658,22250
122
- flwr/common/telemetry.py,sha256=IGzOp87BYReCj5bEoZS6zDSKH0aXsmhMvhHx8fdC1v0,7948
123
- flwr/common/typing.py,sha256=2ilsaLfuQ0Okrj6PDaqzIyYiLr8RoKZiFyNUhYTvIv4,4519
121
+ flwr/common/serde.py,sha256=0lXwbnILK16r1uFeV62pKJGxN78pArfOxo1AxAtGs6Q,23679
122
+ flwr/common/telemetry.py,sha256=nSjJHDitPhzB2qUl6LeSMT9Zld5lIk9uW98RpxQwiZw,8366
123
+ flwr/common/typing.py,sha256=tnpUbcAVFA-ic3yjoxwlQ-jjLPVUYN0B4ftUQzBVUY0,4633
124
124
  flwr/common/version.py,sha256=W1ntylR04xkCP6zeSet6sRtBn7P1cje2lOqBJgYBjJY,1349
125
125
  flwr/proto/__init__.py,sha256=hbY7JYakwZwCkYgCNlmHdc8rtvfoJbAZLalMdc--CGc,683
126
- flwr/proto/common_pb2.py,sha256=uBZV8af4kxDDhJ8rAsGTHI9Iy9tIbPhsscIVXyVa5Jg,913
127
- flwr/proto/common_pb2.pyi,sha256=XbFvpZvvrS7QcH5AFXfpRGl4hQvhd3QdKO6x0oTlCCU,165
126
+ flwr/proto/common_pb2.py,sha256=uzSmq0FJdC-MriN9UGPFs7QVIFTKJmX5lyLnzcyZ5WE,2405
127
+ flwr/proto/common_pb2.pyi,sha256=0ylFO7G79qqLuRg9IQUCBdgyIIFv4m8VzrfoWad4xXU,5394
128
128
  flwr/proto/common_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
129
129
  flwr/proto/common_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
130
- flwr/proto/driver_pb2.py,sha256=uatMt8OjAw27Fe3v4OEK1Vll3sqGAulzVJmWvXnkfyY,3911
131
- flwr/proto/driver_pb2.pyi,sha256=tzOuzI_Pv7m35F6lMzUp4vFu1iD_kZBTXG75dm74NNk,5824
130
+ flwr/proto/driver_pb2.py,sha256=X564Q-YgZp3n9P2tFRlfgqmwgtc8RGsoeKCF_nr-ZOA,4046
131
+ flwr/proto/driver_pb2.pyi,sha256=7puRl1C2bowtW0vAu0cWZGrmOA8cQLZ9l5HaH5_QIKs,6095
132
132
  flwr/proto/driver_pb2_grpc.py,sha256=lEaiX6MAHC-GzGSh0S6949jrYyBEB0ox6hWQgw1iOdQ,8887
133
133
  flwr/proto/driver_pb2_grpc.pyi,sha256=__NCO_mAPMZt3_X_6CUIwWzOm7TmRfghoSs6syEsyAo,2425
134
134
  flwr/proto/error_pb2.py,sha256=LarjKL90LbwkXKlhzNrDssgl4DXcvIPve8NVCXHpsKA,1084
135
135
  flwr/proto/error_pb2.pyi,sha256=ZNH4HhJTU_KfMXlyCeg8FwU-fcUYxTqEmoJPtWtHikc,734
136
136
  flwr/proto/error_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
137
137
  flwr/proto/error_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
138
- flwr/proto/exec_pb2.py,sha256=zMOZVuPqKuDfaaDBUyjYlxNBHc1XFykFwuweLTfJEhM,2419
139
- flwr/proto/exec_pb2.pyi,sha256=we99SGJLBu7oYZp-ZkLE42gL-YSWtCis11zSdnXoWoI,2780
138
+ flwr/proto/exec_pb2.py,sha256=7b1JUZgt04lBxdXpnd3WOOwmY2egUausm4G1wbmXFPs,3120
139
+ flwr/proto/exec_pb2.pyi,sha256=R9xCAUxkLvuXcvQfhNGZ5Qy8qiUCdjN-gp3Iy5BmkNo,4110
140
140
  flwr/proto/exec_pb2_grpc.py,sha256=faAN19XEMP8GTKrcIU6jvlWkN44n2KiUsZh_OG0sYcg,4072
141
141
  flwr/proto/exec_pb2_grpc.pyi,sha256=VrFhT1Um3Nb8UC2YqnR9GIiM-Yyx0FqaxVOWljh-G_w,1208
142
142
  flwr/proto/fab_pb2.py,sha256=k1L3z4L3pJGRIUmgt609xUe-UAtSKFwT0C7wXnb12IY,1427
@@ -159,11 +159,11 @@ flwr/proto/recordset_pb2.py,sha256=un8L0kvBcgFXQIiQweOseeIJBjlOozUvQY9uTQ42Dqo,6
159
159
  flwr/proto/recordset_pb2.pyi,sha256=NPzCJWAj1xLWzeZ_xZ6uaObQjQfWGnnqlLtn4J-SoFY,14161
160
160
  flwr/proto/recordset_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
161
161
  flwr/proto/recordset_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
162
- flwr/proto/run_pb2.py,sha256=813Vt7cgaAyecLaHLjf7fQCW36tYS7L-mBkJfAUxIl4,1920
163
- flwr/proto/run_pb2.pyi,sha256=Jahn2HBPIaVIe5xM_P24hnxQSLB3yDmn0QGr3Jz8gbs,2666
162
+ flwr/proto/run_pb2.py,sha256=4mSz75pYB8hM9lvPnqJmM3XL9cY7FfzAJieu3akk4Lg,2055
163
+ flwr/proto/run_pb2.pyi,sha256=sffgYQOJAmX7HclA8Qkr4mNiGC0a7h72sAFqaTQj9ww,2937
164
164
  flwr/proto/run_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
165
165
  flwr/proto/run_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
166
- flwr/proto/task_pb2.py,sha256=6-HLTXleiG65fhlLZdvwEW30Bcgm46KO7E1NfLrl4NI,2472
166
+ flwr/proto/task_pb2.py,sha256=xuXMmfPAWd7lhyyqhGrmjsfn_j_s5HRz21vMXtxziNE,2361
167
167
  flwr/proto/task_pb2.pyi,sha256=KJVsLm-THY5QjHreHDm_-OS1tyZyD61mx6BzOpoeMjw,4320
168
168
  flwr/proto/task_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
169
169
  flwr/proto/task_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
@@ -180,14 +180,14 @@ 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=-c2J_tPDFahDILl80XFrgkdRLfpHWDu5W3DQP3nKdls,1814
183
+ flwr/server/compat/legacy_context.py,sha256=wBzBcfV6YO6IQGriM_FdJ5XZfiBBEEJdS_OdAiF47dY,1804
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
- flwr/server/driver/grpc_driver.py,sha256=4Azmzq4RWzcLbOqBBEF-I78krWVWZ6bT0U42S25zMvY,9659
187
+ flwr/server/driver/grpc_driver.py,sha256=4LMLDXjMU1VdHsj9nyqFIF71GWVsUR85fsO6biWMHRU,9710
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=5_Upd-Qp9b_oM49v6RwJxR8ivcTb3Hh_pfhyO0EWAB0,9499
190
+ flwr/server/run_serverapp.py,sha256=khrB9bQ42p8DMRJLGoY_pQJ5bkpXyBPL0eyPdZJo29Y,9430
191
191
  flwr/server/server.py,sha256=wsXsxMZ9SQ0B42nBnUlcV83NJPycgrgg5bFwcQ4BYBE,17821
192
192
  flwr/server/server_app.py,sha256=1hul76ospG8L_KooK_ewn1sWPNTNYLTtZMeGNOBNruA,6267
193
193
  flwr/server/server_config.py,sha256=CZaHVAsMvGLjpWVcLPkiYxgJN4xfIyAiUrCI3fETKY4,1349
@@ -219,7 +219,7 @@ flwr/server/strategy/strategy.py,sha256=g6VoIFogEviRub6G4QsKdIp6M_Ek6GhBhqcdNx5u
219
219
  flwr/server/superlink/__init__.py,sha256=8tHYCfodUlRD8PCP9fHgvu8cz5N31A2QoRVL0jDJ15E,707
220
220
  flwr/server/superlink/driver/__init__.py,sha256=_JaRW-FdyikHc7souUrnk3mwTGViraEJCeUBY_M_ocs,712
221
221
  flwr/server/superlink/driver/driver_grpc.py,sha256=wMqYVeDwIc_FEfQPbCzd9p1YyIcjwiFUMX4QZjGSx5k,1932
222
- flwr/server/superlink/driver/driver_servicer.py,sha256=SY7YPr7GeHnN_bv6drXnfd8n3PztKBde96ixE_ua2VM,5433
222
+ flwr/server/superlink/driver/driver_servicer.py,sha256=oqqn0ifYBKuO6qj-auPjdZJu6J7ChuYVmR0qHPvLHDY,5739
223
223
  flwr/server/superlink/fleet/__init__.py,sha256=76od-HhYjOUoZFLFDFCFnNHI4JLAmaXQEAyp7LWlQpc,711
224
224
  flwr/server/superlink/fleet/grpc_adapter/__init__.py,sha256=spBQQJeYz8zPOBOfyMLv87kqWPASGB73AymcLXdFaYA,742
225
225
  flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py,sha256=K4LkOsVzIdsR7Py_9cfo6CR-bDocpP15ktHTc2UnJ9k,4957
@@ -232,18 +232,18 @@ flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=j2hyC342am-_Hgp1g80Y3fG
232
232
  flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=1BIUy1HAcvQ6-OhAj88jjRgwWdxnYVzQHkM3xrWZGCk,3434
233
233
  flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=v54f7yEX0Xwqh9KRDPzKgJdSBsosus4RzUyzTl-_u5Q,7738
234
234
  flwr/server/superlink/fleet/message_handler/__init__.py,sha256=h8oLD7uo5lKICPy0rRdKRjTYe62u8PKkT_fA4xF5JPA,731
235
- flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=l7OaIUznhUA6kqkCe636E9jUUTPxgd94_nHADWeCwt0,3653
235
+ flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=KgNah2AaNDiqsTEa653wQqVGUy8hvNAOFzeUfaQR6-Y,3893
236
236
  flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=5jbYbAn75sGv-gBwOPDySE0kz96F6dTYLeMrGqNi4lM,735
237
237
  flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=yoSU-6nCJF9ASHGNpSY69nZbUhPGXkMIKYDgybKQX3c,7672
238
238
  flwr/server/superlink/fleet/vce/__init__.py,sha256=36MHKiefnJeyjwMQzVUK4m06Ojon3WDcwZGQsAcyVhQ,783
239
- flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=oBIzmnrSSRvH_H0vRGEGWhWzQQwqe3zn6e13RsNwlIY,1466
239
+ flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=psQjI1DQHOM5uWVXM27l_wPHjfEkMUTP-_8-lEFH1JA,1466
240
240
  flwr/server/superlink/fleet/vce/backend/backend.py,sha256=iG3KSIY7DzNfcxmuLfTs7VdQJnqPCvvn5DFkTWKG5lI,2227
241
241
  flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=SnjZ1WOcrfMZNgiDdTHcFeXJqrY7UHx8kvO62mqU9S4,7489
242
- flwr/server/superlink/fleet/vce/vce_api.py,sha256=B_xnbaPKWuuovaNnkH21PYNrDKc0gtaWMQu_5kjYW5w,12780
242
+ flwr/server/superlink/fleet/vce/vce_api.py,sha256=jTAUX472qRIZefSL64rwLkhRe01PX_YwhFpWoLwk6Tc,12770
243
243
  flwr/server/superlink/state/__init__.py,sha256=Gj2OTFLXvA-mAjBvwuKDM3rDrVaQPcIoybSa2uskMTE,1003
244
- flwr/server/superlink/state/in_memory_state.py,sha256=fb-f4RGiqXON0DC7aSEMNuNIjH406BhBYrNNX5Kza2g,13061
245
- flwr/server/superlink/state/sqlite_state.py,sha256=dO374mTkvhWQSiwbqwUXVnAYHev-j2mHaX9v8wFmmMA,29044
246
- flwr/server/superlink/state/state.py,sha256=mwvYPLK_udk4-yV8Q2MLX5FfTlgLG0P9biyyOZGibRY,8115
244
+ flwr/server/superlink/state/in_memory_state.py,sha256=LnKlnXe9JjVHb5_XOo6eD1RQhlCvJVKgz_CkXrMz8DY,13069
245
+ flwr/server/superlink/state/sqlite_state.py,sha256=LdLnHtF8C-1L1IAglfZPqIuKa782Qo7qAYzTXMdMYGM,29052
246
+ flwr/server/superlink/state/state.py,sha256=juv9a8pQLxylfcZcXRaDBLG5gFG4MXytIcG6NlZTn4E,8117
247
247
  flwr/server/superlink/state/state_factory.py,sha256=Fo8pBQ1WWrVJK5TOEPZ_zgJE69_mfTGjTO6czh6571o,2021
248
248
  flwr/server/superlink/state/utils.py,sha256=155ngcaSePy7nD8X4LHgpuVok6fcH5_CPNRiFAbLWDA,2407
249
249
  flwr/server/typing.py,sha256=5kaRLZuxTEse9A0g7aVna2VhYxU3wTq1f3d3mtw7kXs,1019
@@ -255,23 +255,23 @@ flwr/server/workflow/constant.py,sha256=q4DLdR8Krlxuewq2AQjwTL75hphxE5ODNz4AhViH
255
255
  flwr/server/workflow/default_workflows.py,sha256=_GqFCaxtiq3_UVCvZWgJ200QroGSI9qibeVcT2R71ao,14003
256
256
  flwr/server/workflow/secure_aggregation/__init__.py,sha256=3XlgDOjD_hcukTGl6Bc1B-8M_dPlVSJuTbvXIbiO-Ic,880
257
257
  flwr/server/workflow/secure_aggregation/secagg_workflow.py,sha256=wpAkYPId0nfK6SgpUAtsCni4_MQLd-uqJ81tUKu3xlI,5838
258
- flwr/server/workflow/secure_aggregation/secaggplus_workflow.py,sha256=BRqhlnVe8CYNoUvb_KCfRXay02NTT6a-pCrMaOqAxGc,29038
259
- flwr/simulation/__init__.py,sha256=9x8OCkK3jpFAPJB1aeEMOddz6V58bExQPtwE8Z3q-RY,1359
258
+ flwr/server/workflow/secure_aggregation/secaggplus_workflow.py,sha256=LLW4LfPAVdpMhIjJBopHVl-OltYuVSqsESw3PULcrN8,29694
259
+ flwr/simulation/__init__.py,sha256=ybVBW3xT6cg_IasJV4_ymI3bVrCbFhw1mmcfrdfl3q0,1359
260
260
  flwr/simulation/app.py,sha256=te3dQB3eodPwzsv1y4daPyaskIAaOtgoHaQLobrqoqY,15163
261
261
  flwr/simulation/ray_transport/__init__.py,sha256=wzcEEwUUlulnXsg6raCA1nGpP3LlAQDtJ8zNkCXcVbA,734
262
262
  flwr/simulation/ray_transport/ray_actor.py,sha256=3j0HgzjrlYjnzdTRy8aA4Nf6VoUvxi1hGRQkGSU5z6c,19020
263
- flwr/simulation/ray_transport/ray_client_proxy.py,sha256=4KWWGSnfEBe3aGc0Ln5_1yRcZ52wKmOA7gXJKkMglvM,7302
263
+ flwr/simulation/ray_transport/ray_client_proxy.py,sha256=0abIsU0VBk9rNJZOKHIyzYGy3ZnWBgqYocX_oct1EP0,7307
264
264
  flwr/simulation/ray_transport/utils.py,sha256=TYdtfg1P9VfTdLMOJlifInGpxWHYs9UfUqIv2wfkRLA,2392
265
- flwr/simulation/run_simulation.py,sha256=efscduj2l9c2v3_f4al0Hqkm-Y_BPKDr6YNbmCUt8yo,22319
265
+ flwr/simulation/run_simulation.py,sha256=BPW_zn5xuGlOHKZDvl8J-IuwH7E8ZZAIR2zcXNjsLMo,23391
266
266
  flwr/superexec/__init__.py,sha256=9h94ogLxi6eJ3bUuJYq3E3pApThSabTPiSmPAGlTkHE,800
267
- flwr/superexec/app.py,sha256=xam9I3SKFGoFXfM_UE-Z92N-fVc6n1T69_Ihz8bFMfQ,6404
268
- flwr/superexec/deployment.py,sha256=Nqzzm9N5zPZy9wH7SLgdaDod0-B9ixlsiCUYX6JhmNw,5845
269
- flwr/superexec/exec_grpc.py,sha256=vYbZyV89MuvYDH1XzVYHkKmGfOcU6FWh8rTcIJk2TIQ,1910
270
- flwr/superexec/exec_servicer.py,sha256=4R1f_9v0vly_bXpIYaXAeV1tO5LAy1AYygGGGNZmlQk,2194
271
- flwr/superexec/executor.py,sha256=5ua0AU2cfisyD79dosP-POF3w0FRH2I5Wko_PPKLWqU,2153
272
- flwr/superexec/simulation.py,sha256=yOykF9zqFwHwkEN5gKHf7dMYdc1BVOysKpFPwlXIoOY,4663
273
- flwr_nightly-1.10.0.dev20240721.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
274
- flwr_nightly-1.10.0.dev20240721.dist-info/METADATA,sha256=AWSB0EXC_gLxvDfXzUMiS-0BUVBBOMgS8lFRI-jyN9w,15672
275
- flwr_nightly-1.10.0.dev20240721.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
276
- flwr_nightly-1.10.0.dev20240721.dist-info/entry_points.txt,sha256=7qBQcA-bDGDxnJmLd9FYqglFQubjCNqyg9M8a-lukps,336
277
- flwr_nightly-1.10.0.dev20240721.dist-info/RECORD,,
267
+ flwr/superexec/app.py,sha256=bmYl8zABnWka9WhRQxX4p1YAI76cYG655dP09ro-V0o,6485
268
+ flwr/superexec/deployment.py,sha256=1vuLnbHqLPjWekgEeGek_ota96H4521o8hd58n12MyI,6437
269
+ flwr/superexec/exec_grpc.py,sha256=PhqGoZEpTMxSQmUSV8Wgtzb1Za_pHJ-adZqo5RYnDyE,1942
270
+ flwr/superexec/exec_servicer.py,sha256=fxQAKfgmQRSnYq5anjryfGeRbsZrNFEkuiNcTZhRwiE,2320
271
+ flwr/superexec/executor.py,sha256=k_adivto6R2U82DADOHNvdtobehBYreRek1gOEBIQnQ,2318
272
+ flwr/superexec/simulation.py,sha256=3z1Icam6gv6iO1h3HjqM3t_vsmtY8iinpb-Wt2b4CvI,5701
273
+ flwr_nightly-1.10.0.dev20240723.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
274
+ flwr_nightly-1.10.0.dev20240723.dist-info/METADATA,sha256=ir3pLlawQzY8UiKnnhJmgX1nAaxD55MILwUAb6VyAFg,15672
275
+ flwr_nightly-1.10.0.dev20240723.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
276
+ flwr_nightly-1.10.0.dev20240723.dist-info/entry_points.txt,sha256=7qBQcA-bDGDxnJmLd9FYqglFQubjCNqyg9M8a-lukps,336
277
+ flwr_nightly-1.10.0.dev20240723.dist-info/RECORD,,