flwr-nightly 1.21.0.dev20250905__py3-none-any.whl → 1.21.0.dev20250908__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/app/__init__.py CHANGED
@@ -13,3 +13,31 @@
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
15
  """Public Flower App APIs."""
16
+
17
+
18
+ from flwr.common.constant import MessageType
19
+ from flwr.common.context import Context
20
+ from flwr.common.message import Message
21
+ from flwr.common.record import (
22
+ Array,
23
+ ArrayRecord,
24
+ ConfigRecord,
25
+ MetricRecord,
26
+ RecordDict,
27
+ )
28
+
29
+ from .error import Error
30
+ from .metadata import Metadata
31
+
32
+ __all__ = [
33
+ "Array",
34
+ "ArrayRecord",
35
+ "ConfigRecord",
36
+ "Context",
37
+ "Error",
38
+ "Message",
39
+ "MessageType",
40
+ "Metadata",
41
+ "MetricRecord",
42
+ "RecordDict",
43
+ ]
@@ -1,8 +1,8 @@
1
1
  """$project_name: A Flower / $framework_str app."""
2
2
 
3
3
  import torch
4
- from flwr.client import ClientApp
5
- from flwr.common import ArrayRecord, Context, Message, MetricRecord, RecordDict
4
+ from flwr.app import ArrayRecord, Context, Message, MetricRecord, RecordDict
5
+ from flwr.clientapp import ClientApp
6
6
 
7
7
  from $import_name.task import Net, load_data
8
8
  from $import_name.task import test as test_fn
@@ -1,8 +1,8 @@
1
1
  """$project_name: A Flower / $framework_str app."""
2
2
 
3
3
  import torch
4
- from flwr.common import ArrayRecord, ConfigRecord, Context
5
- from flwr.server import Grid, ServerApp
4
+ from flwr.app import ArrayRecord, ConfigRecord, Context
5
+ from flwr.serverapp import Grid, ServerApp
6
6
  from flwr.serverapp.strategy import FedAvg
7
7
 
8
8
  from $import_name.task import Net
flwr/cli/utils.py CHANGED
@@ -32,6 +32,7 @@ from flwr.common.constant import (
32
32
  AUTH_TYPE_JSON_KEY,
33
33
  CREDENTIALS_DIR,
34
34
  FLWR_DIR,
35
+ NO_USER_AUTH_MESSAGE,
35
36
  RUN_ID_NOT_FOUND_MESSAGE,
36
37
  )
37
38
  from flwr.common.grpc import (
@@ -312,11 +313,21 @@ def flwr_cli_grpc_exc_handler() -> Iterator[None]:
312
313
  )
313
314
  raise typer.Exit(code=1) from None
314
315
  if e.code() == grpc.StatusCode.UNIMPLEMENTED:
315
- typer.secho(
316
- "❌ User authentication is not enabled on this SuperLink.",
317
- fg=typer.colors.RED,
318
- bold=True,
319
- )
316
+ if e.details() == NO_USER_AUTH_MESSAGE: # pylint: disable=E1101
317
+ typer.secho(
318
+ "❌ User authentication is not enabled on this SuperLink.",
319
+ fg=typer.colors.RED,
320
+ bold=True,
321
+ )
322
+ else:
323
+ typer.secho(
324
+ "❌ The SuperLink cannot process this request. Please verify that "
325
+ "you set the address to its Control API endpoint correctly in your "
326
+ "`pyproject.toml`, and ensure that the Flower versions used by "
327
+ "the CLI and SuperLink are compatible.",
328
+ fg=typer.colors.RED,
329
+ bold=True,
330
+ )
320
331
  raise typer.Exit(code=1) from None
321
332
  if e.code() == grpc.StatusCode.PERMISSION_DENIED:
322
333
  typer.secho(
@@ -324,7 +335,7 @@ def flwr_cli_grpc_exc_handler() -> Iterator[None]:
324
335
  fg=typer.colors.RED,
325
336
  bold=True,
326
337
  )
327
- # pylint: disable=E1101
338
+ # pylint: disable-next=E1101
328
339
  typer.secho(e.details(), fg=typer.colors.RED, bold=True)
329
340
  raise typer.Exit(code=1) from None
330
341
  if e.code() == grpc.StatusCode.UNAVAILABLE:
@@ -337,7 +348,7 @@ def flwr_cli_grpc_exc_handler() -> Iterator[None]:
337
348
  raise typer.Exit(code=1) from None
338
349
  if (
339
350
  e.code() == grpc.StatusCode.NOT_FOUND
340
- and e.details() == RUN_ID_NOT_FOUND_MESSAGE
351
+ and e.details() == RUN_ID_NOT_FOUND_MESSAGE # pylint: disable=E1101
341
352
  ):
342
353
  typer.secho(
343
354
  "❌ Run ID not found.",
@@ -14,6 +14,14 @@
14
14
  # ==============================================================================
15
15
  """Public Flower ClientApp APIs."""
16
16
 
17
+
18
+ from flwr.client import mod
19
+ from flwr.client.client_app import ClientApp
20
+
17
21
  from .centraldp_mods import fixedclipping_mod
18
22
 
19
- __all__ = ["fixedclipping_mod"]
23
+ __all__ = [
24
+ "ClientApp",
25
+ "fixedclipping_mod",
26
+ "mod",
27
+ ]
flwr/common/constant.py CHANGED
@@ -154,6 +154,7 @@ PULL_BACKOFF_CAP = 10 # Maximum backoff time for pulling objects
154
154
 
155
155
  # ControlServicer constants
156
156
  RUN_ID_NOT_FOUND_MESSAGE = "Run ID not found"
157
+ NO_USER_AUTH_MESSAGE = "ControlServicer initialized without user authentication"
157
158
 
158
159
 
159
160
  class MessageType:
@@ -21,6 +21,7 @@ from pathlib import Path
21
21
  from queue import Queue
22
22
  from typing import Optional
23
23
 
24
+ from flwr.app.exception import AppExitException
24
25
  from flwr.cli.config_utils import get_fab_metadata
25
26
  from flwr.cli.install import install_from_fab
26
27
  from flwr.cli.utils import get_sha256_hash
@@ -37,7 +38,6 @@ from flwr.common.constant import (
37
38
  Status,
38
39
  SubStatus,
39
40
  )
40
- from flwr.common.exception import AppExitException
41
41
  from flwr.common.exit import ExitCode, add_exit_handler, flwr_exit
42
42
  from flwr.common.heartbeat import HeartbeatSender, get_grpc_app_heartbeat_fn
43
43
  from flwr.common.logger import (
@@ -14,8 +14,14 @@
14
14
  # ==============================================================================
15
15
  """Public Flower ServerApp APIs."""
16
16
 
17
+
18
+ from flwr.server.grid import Grid
19
+ from flwr.server.server_app import ServerApp
20
+
17
21
  from . import strategy
18
22
 
19
23
  __all__ = [
24
+ "Grid",
25
+ "ServerApp",
20
26
  "strategy",
21
27
  ]
@@ -0,0 +1,38 @@
1
+ # Copyright 2025 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
+ """Flower ServerApp exceptions."""
16
+
17
+
18
+ from flwr.app.exception import AppExitException
19
+ from flwr.common.exit import ExitCode
20
+
21
+
22
+ class InconsistentMessageReplies(AppExitException):
23
+ """Exception triggered when replies are inconsistent and therefore aggregation must
24
+ be skipped."""
25
+
26
+ exit_code = ExitCode.SERVERAPP_STRATEGY_PRECONDITION_UNMET
27
+
28
+ def __init__(self, reason: str):
29
+ super().__init__(reason)
30
+
31
+
32
+ class AggregationError(AppExitException):
33
+ """Exception triggered when aggregation fails."""
34
+
35
+ exit_code = ExitCode.SERVERAPP_STRATEGY_AGGREGATION_ERROR
36
+
37
+ def __init__(self, reason: str):
38
+ super().__init__(reason)
@@ -27,8 +27,8 @@ import numpy as np
27
27
 
28
28
  from flwr.common import Array, ArrayRecord, Message, MetricRecord, RecordDict
29
29
 
30
+ from ..exception import AggregationError
30
31
  from .fedopt import FedOpt
31
- from .strategy_utils import AggregationError
32
32
 
33
33
 
34
34
  # pylint: disable=line-too-long
@@ -27,8 +27,8 @@ import numpy as np
27
27
 
28
28
  from flwr.common import Array, ArrayRecord, Message, MetricRecord, RecordDict
29
29
 
30
+ from ..exception import AggregationError
30
31
  from .fedopt import FedOpt
31
- from .strategy_utils import AggregationError
32
32
 
33
33
 
34
34
  # pylint: disable=line-too-long
@@ -34,8 +34,8 @@ from flwr.common import (
34
34
  )
35
35
  from flwr.server import Grid
36
36
 
37
+ from ..exception import AggregationError
37
38
  from .fedavg import FedAvg
38
- from .strategy_utils import AggregationError
39
39
 
40
40
 
41
41
  # pylint: disable=line-too-long
@@ -26,8 +26,8 @@ import numpy as np
26
26
 
27
27
  from flwr.common import Array, ArrayRecord, Message, MetricRecord, RecordDict
28
28
 
29
+ from ..exception import AggregationError
29
30
  from .fedopt import FedOpt
30
- from .strategy_utils import AggregationError
31
31
 
32
32
 
33
33
  # pylint: disable=line-too-long
@@ -30,28 +30,9 @@ from flwr.common import (
30
30
  RecordDict,
31
31
  log,
32
32
  )
33
- from flwr.common.exception import AppExitException
34
- from flwr.common.exit import ExitCode
35
33
  from flwr.server import Grid
36
34
 
37
-
38
- class InconsistentMessageReplies(AppExitException):
39
- """Exception triggered when replies are inconsistent and therefore aggregation must
40
- be skipped."""
41
-
42
- exit_code = ExitCode.SERVERAPP_STRATEGY_PRECONDITION_UNMET
43
-
44
- def __init__(self, reason: str):
45
- super().__init__(reason)
46
-
47
-
48
- class AggregationError(AppExitException):
49
- """Exception triggered when aggregation fails."""
50
-
51
- exit_code = ExitCode.SERVERAPP_STRATEGY_AGGREGATION_ERROR
52
-
53
- def __init__(self, reason: str):
54
- super().__init__(reason)
35
+ from ..exception import InconsistentMessageReplies
55
36
 
56
37
 
57
38
  def config_to_str(config: ConfigRecord) -> str:
@@ -23,8 +23,8 @@ from parameterized import parameterized
23
23
 
24
24
  from flwr.common import Array, ArrayRecord, ConfigRecord, MetricRecord, RecordDict
25
25
 
26
+ from ..exception import InconsistentMessageReplies
26
27
  from .strategy_utils import (
27
- InconsistentMessageReplies,
28
28
  aggregate_arrayrecords,
29
29
  aggregate_metricrecords,
30
30
  config_to_str,
@@ -29,6 +29,7 @@ from flwr.common.auth_plugin import ControlAuthPlugin
29
29
  from flwr.common.constant import (
30
30
  FAB_MAX_SIZE,
31
31
  LOG_STREAM_INTERVAL,
32
+ NO_USER_AUTH_MESSAGE,
32
33
  RUN_ID_NOT_FOUND_MESSAGE,
33
34
  Status,
34
35
  SubStatus,
@@ -291,7 +292,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
291
292
  if self.auth_plugin is None:
292
293
  context.abort(
293
294
  grpc.StatusCode.UNIMPLEMENTED,
294
- "ControlServicer initialized without user authentication",
295
+ NO_USER_AUTH_MESSAGE,
295
296
  )
296
297
  raise grpc.RpcError() # This line is unreachable
297
298
 
@@ -318,7 +319,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
318
319
  if self.auth_plugin is None:
319
320
  context.abort(
320
321
  grpc.StatusCode.UNIMPLEMENTED,
321
- "ControlServicer initialized without user authentication",
322
+ NO_USER_AUTH_MESSAGE,
322
323
  )
323
324
  raise grpc.RpcError() # This line is unreachable
324
325
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.21.0.dev20250905
3
+ Version: 1.21.0.dev20250908
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  License: Apache-2.0
6
6
  Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
@@ -1,6 +1,7 @@
1
1
  flwr/__init__.py,sha256=CXTKPZSm83CVKTxw9j_ge6AEVnqgd1rlcsm_2kPoVkU,1009
2
- flwr/app/__init__.py,sha256=VNahoTMYIbIQt8EMit-UvliLoJib7uSsvKANJJXUWzM,713
2
+ flwr/app/__init__.py,sha256=Pqg1iWx_TiBuGYeGJnS1QgYYWcAnPnZ2h4Y5iacNSls,1195
3
3
  flwr/app/error.py,sha256=0PwA-E_CAs5P_nWAA0kksVO1A44t4CNLEf7u-Su-uJ0,2342
4
+ flwr/app/exception.py,sha256=dAKSNrdh9YqKZTdYaN8hts4dAMVZHfNDV-ytzYby0LQ,1246
4
5
  flwr/app/metadata.py,sha256=rdMBn0zhIOYmCvmGENQWSQqDwcxwsMJzCle4PQdlc_Y,7331
5
6
  flwr/cli/__init__.py,sha256=EfMGmHoobET6P2blBt_eOByXL8299MgFfB7XNdaPQ6I,720
6
7
  flwr/cli/app.py,sha256=AKCP45Dkbpvdil_4Ir9S93L3HP3iUOnHmcZjscoM8uU,1856
@@ -35,7 +36,7 @@ flwr/cli/new/templates/app/code/client.jax.py.tpl,sha256=4EkcGGmbPAa6dgw8GYII-Gf
35
36
  flwr/cli/new/templates/app/code/client.mlx.py.tpl,sha256=gOxt_QUTfGFpofdNaxdwTSLZlkTWHPYGix2OGHC1hYE,2376
36
37
  flwr/cli/new/templates/app/code/client.numpy.py.tpl,sha256=DKcnz5-KUf693Va056QTKVofFV3ozJZutK4rQyfvRXc,548
37
38
  flwr/cli/new/templates/app/code/client.pytorch.py.tpl,sha256=fuxVmZpjHIueNy_aHWF81531vmi8DGu4CYjYDqmUwWo,1705
38
- flwr/cli/new/templates/app/code/client.pytorch_msg_api.py.tpl,sha256=iOTWSzArdw70QI7BEhRJbB-eNGjzdEOA020x6Q75OMU,2473
39
+ flwr/cli/new/templates/app/code/client.pytorch_msg_api.py.tpl,sha256=fYoh-dTu07LkqNYvwcxQnbgVvH4Yo4eiGEcyHECbsnU,2473
39
40
  flwr/cli/new/templates/app/code/client.sklearn.py.tpl,sha256=MfhMN-hayGCc3cZ1XpN0A6f67GRveI_tGbq5kjOeP0Q,1871
40
41
  flwr/cli/new/templates/app/code/client.tensorflow.py.tpl,sha256=yBiiU7B9Kf70U52cPkNs_dUpYrrTwbUi2os-PAyheaM,1680
41
42
  flwr/cli/new/templates/app/code/dataset.baseline.py.tpl,sha256=jbd_exHAk2-Blu_kVutjPO6a_dkJQWb232zxSeXIZ1k,1453
@@ -52,7 +53,7 @@ flwr/cli/new/templates/app/code/server.jax.py.tpl,sha256=IHk57syZhvO4nWVHGxE9S8f
52
53
  flwr/cli/new/templates/app/code/server.mlx.py.tpl,sha256=GAqalaI-U2uRdttNeRn75k1FzdEW3rmgT-ywuKkFdK4,988
53
54
  flwr/cli/new/templates/app/code/server.numpy.py.tpl,sha256=xbQlLCKutnOqlbLQPZsaL9WM7vnebTceiU8a0HaUcZk,740
54
55
  flwr/cli/new/templates/app/code/server.pytorch.py.tpl,sha256=gvBsGA_Jg9kAH8xTxjzTjMcvBtciuccOwQFbO7ey8tU,916
55
- flwr/cli/new/templates/app/code/server.pytorch_msg_api.py.tpl,sha256=268EzqUOM0mdiXsf0WWniNu7DiDHh_JGHLe9o-t6ru4,1158
56
+ flwr/cli/new/templates/app/code/server.pytorch_msg_api.py.tpl,sha256=epARqfcQ-EQsdZwaaaUp5y4OSTBT6CiFGlNRocw-23A,1158
56
57
  flwr/cli/new/templates/app/code/server.sklearn.py.tpl,sha256=JoDYjPU99aKTTfjKsCtKHzMICiOR9pi8JGVBsxFpWO4,1133
57
58
  flwr/cli/new/templates/app/code/server.tensorflow.py.tpl,sha256=xMhQ7AumowgLkgUilgjVK7IbpRhPjslhVJU-vID6NY8,856
58
59
  flwr/cli/new/templates/app/code/strategy.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
@@ -78,7 +79,7 @@ flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=mK8wOWqoQOVxZG6-
78
79
  flwr/cli/run/__init__.py,sha256=RPyB7KbYTFl6YRiilCch6oezxrLQrl1kijV7BMGkLbA,790
79
80
  flwr/cli/run/run.py,sha256=ECa0kup9dn15O70H74QdgUsEaeErbzDqVX_U0zZO5IM,8173
80
81
  flwr/cli/stop.py,sha256=TR9F61suTxNUzGIktUdoBhXwdRtCdvzGhy3qCuvcfBg,5000
81
- flwr/cli/utils.py,sha256=fkyiWXWfXo5fS_sACw8Rg9wweq3RQ7XvEUEAa_caqkE,12349
82
+ flwr/cli/utils.py,sha256=tTI8PyJdA8BU1PoTS8ZItdCM5EVTeze_Z1zumffYY6A,12963
82
83
  flwr/client/__init__.py,sha256=boIhKaK6I977zrILmoTutNx94x5jB0e6F1gnAjaRJnI,1250
83
84
  flwr/client/client.py,sha256=3HAchxvknKG9jYbB7swNyDj-e5vUWDuMKoLvbT7jCVM,7895
84
85
  flwr/client/client_app.py,sha256=zVhi-l3chAb06ozFsKwix3hU_RpOLjST13Ha50AVIPE,16918
@@ -106,7 +107,7 @@ flwr/client/rest_client/__init__.py,sha256=MBiuK62hj439m9rtwSwI184Hth6Tt5GbmpNMy
106
107
  flwr/client/rest_client/connection.py,sha256=fyiS1aXTv71jWczx7mSco94LYJTBXgTF-p2PnAk3CL8,15784
107
108
  flwr/client/run_info_store.py,sha256=MaJ3UQ-07hWtK67wnWu0zR29jrk0fsfgJX506dvEOfE,4042
108
109
  flwr/client/typing.py,sha256=Jw3rawDzI_-ZDcRmEQcs5gZModY7oeQlEeltYsdOhlU,1048
109
- flwr/clientapp/__init__.py,sha256=h8RNxAbCbdaLf_htSx-e5UCb2A0mLA-mpEX_6giZuU0,799
110
+ flwr/clientapp/__init__.py,sha256=m_5SENAoZN7G1q7EgBEM4uYb7D90b4CvQe-bOZAN2QY,909
110
111
  flwr/clientapp/centraldp_mods.py,sha256=M8vvdrjfLVsFLMd9JXqD_-P08q9jsNOgu_4AAs-X9Zk,4626
111
112
  flwr/common/__init__.py,sha256=5GCLVk399Az_rTJHNticRlL0Sl_oPw_j5_LuFKfX7-M,4171
112
113
  flwr/common/address.py,sha256=9JucdTwlc-jpeJkRKeUboZoacUtErwSVtnDR9kAtLqE,4119
@@ -114,7 +115,7 @@ flwr/common/args.py,sha256=Nq2u4yePbkSY0CWFamn0hZY6Rms8G1xYDeDGIcLIITE,5849
114
115
  flwr/common/auth_plugin/__init__.py,sha256=DktrRcGZrRarLf7Jb_UlHtOyLp9_-kEplyq6PS5-vOA,988
115
116
  flwr/common/auth_plugin/auth_plugin.py,sha256=mM7SuphO4OsVAVJR1GErYVgYT83ZjxDzS_gha12bT9E,4855
116
117
  flwr/common/config.py,sha256=glcZDjco-amw1YfQcYTFJ4S1pt9APoexT-mf1QscuHs,13960
117
- flwr/common/constant.py,sha256=0w5GCaW078GMj_VMQX-Lb7OQDnA70GmWZMzufDvGv6E,8769
118
+ flwr/common/constant.py,sha256=FXG5HqwQG-mQXgfptHn4jTaXD4Y_kyDA1ntTKcp0qfs,8850
118
119
  flwr/common/context.py,sha256=Be8obQR_OvEDy1OmshuUKxGRQ7Qx89mf5F4xlhkR10s,2407
119
120
  flwr/common/date.py,sha256=1ZT2cRSpC2DJqprOVTLXYCR_O2_OZR0zXO_brJ3LqWc,1554
120
121
  flwr/common/differential_privacy.py,sha256=FdlpdpPl_H_2HJa8CQM1iCUGBBQ5Dc8CzxmHERM-EoE,6148
@@ -122,7 +123,6 @@ flwr/common/differential_privacy_constants.py,sha256=ruEjH4qF_S2bgxRI6brWCGWQPxF
122
123
  flwr/common/dp.py,sha256=ftqWheOICK5N_zPaofnbFb474lMb5w9lclwxf5DKY0w,1978
123
124
  flwr/common/event_log_plugin/__init__.py,sha256=ts3VAL3Fk6Grp1EK_1Qg_V-BfOof9F86iBx4rbrEkyo,838
124
125
  flwr/common/event_log_plugin/event_log_plugin.py,sha256=4SkVa1Ic-sPlICJShBuggXmXDcQtWQ1KDby4kthFNF0,2064
125
- flwr/common/exception.py,sha256=dAKSNrdh9YqKZTdYaN8hts4dAMVZHfNDV-ytzYby0LQ,1246
126
126
  flwr/common/exit/__init__.py,sha256=8W7xaO1iw0vacgmQW7FTFbSh7csNv6XfsgIlnIbNF6U,978
127
127
  flwr/common/exit/exit.py,sha256=DcXJfbpW1g-pQJqSZmps-1MZydd7T7RaarghIf2e4tU,3636
128
128
  flwr/common/exit/exit_code.py,sha256=e8O71zIqVT1H84mNBeenTz7S39yPZSpZQm-xUenpzN4,5249
@@ -258,7 +258,7 @@ flwr/server/server.py,sha256=39m4FSN2T-uVA-no9nstN0eWW0co-IUUAIMmpd3V7Jc,17893
258
258
  flwr/server/server_app.py,sha256=8uagoZX-3CY3tazPqkIV9jY-cN0YrRRrDmVe23o0AV0,9515
259
259
  flwr/server/server_config.py,sha256=e_6ddh0riwOJsdNn2BFev344uMWfDk9n7dyjNpPgm1w,1349
260
260
  flwr/server/serverapp/__init__.py,sha256=xcC0T_MQSMS9cicUzUUpMNCOsF2d8Oh_8jvnoBLuZvo,800
261
- flwr/server/serverapp/app.py,sha256=d42XiEwEhee_LttXEMOa9GFP81zvaufzGyt64VlCEo0,9841
261
+ flwr/server/serverapp/app.py,sha256=yq70fTTXKxlDrQoXeuw14cQ-d-QmFy3AVcfnhGI0HNA,9838
262
262
  flwr/server/serverapp_components.py,sha256=dfSqmrsVy3arKXpl3ZIBQWdV8rehfIms8aJooyzdmEM,2118
263
263
  flwr/server/strategy/__init__.py,sha256=HhsSWMWaC7oCb2g7Kqn1MBKdrfvgi8VxACy9ZL706Q0,2836
264
264
  flwr/server/strategy/aggregate.py,sha256=smlKKy-uFUuuFR12vlclucnwSQWRz78R79-Km4RWqbw,13978
@@ -328,19 +328,20 @@ flwr/server/workflow/default_workflows.py,sha256=RlD26dXbSksY-23f3ZspnN1YU1DOhDY
328
328
  flwr/server/workflow/secure_aggregation/__init__.py,sha256=vGkycLb65CxdaMkKsANxQE6AS4urfZKvwcS3r1Vln_c,880
329
329
  flwr/server/workflow/secure_aggregation/secagg_workflow.py,sha256=b_pKk7gmbahwyj0ftOOLXvu-AMtRHEc82N9PJTEO8dc,5839
330
330
  flwr/server/workflow/secure_aggregation/secaggplus_workflow.py,sha256=DkayCsnlAya6Y2PZsueLgoUCMRtV-GbnW08RfWx_SXM,29460
331
- flwr/serverapp/__init__.py,sha256=dUGPpyO0YEJRIjwNw2YrUWXgsEj9JOUrP5OGm8bPX9k,774
331
+ flwr/serverapp/__init__.py,sha256=ZujKNXULwhWYQhFnxOOT5Wi9MRq2JCWFhAAj7ouiQ78,884
332
332
  flwr/serverapp/dp_fixed_clipping.py,sha256=wbP4W7CaUHXdll8ZSVUnTBSEWrnWM00CGk63rOR-Q2s,12133
333
+ flwr/serverapp/exception.py,sha256=5cuH-2AafvihzosWDdDjuMmHdDqZ1XxHvCqZXNBVklw,1334
333
334
  flwr/serverapp/strategy/__init__.py,sha256=yAYBZUkp4aNmcTLsvormEc9HyO34oEoFN45LiHgujE0,1229
334
335
  flwr/serverapp/strategy/dp_fixed_clipping.py,sha256=wbP4W7CaUHXdll8ZSVUnTBSEWrnWM00CGk63rOR-Q2s,12133
335
- flwr/serverapp/strategy/fedadagrad.py,sha256=talxGzeGSIIkLPtZk4i_qXZTksRoBeajrmeUbnGHTUY,6347
336
- flwr/serverapp/strategy/fedadam.py,sha256=TGLnxoJro758DUc9tAxBks9tSRtXDqy-4vWthiqscIo,7142
336
+ flwr/serverapp/strategy/fedadagrad.py,sha256=fD65P6OEERa_pxq847e1UZpA083AcWR44XavYB0naGM,6343
337
+ flwr/serverapp/strategy/fedadam.py,sha256=s3xPIqhopy6yPTeFxevSPnc7a6BcKnKsvo2AaO6Z_xs,7138
337
338
  flwr/serverapp/strategy/fedavg.py,sha256=C8UUvLTjodMpGRb4PNej5gW2cPbXsPKebGX1zPfAMUo,11020
338
- flwr/serverapp/strategy/fedopt.py,sha256=aIN5CtgsE88bAodN_M_pf_01a2vMIj9R_7CYwd8VeMU,8481
339
- flwr/serverapp/strategy/fedyogi.py,sha256=UQnEKVTpJiB_zbCREfI8CEHiuJMIRmEIu5DV50FG_5s,6657
339
+ flwr/serverapp/strategy/fedopt.py,sha256=kqT0uV2IUE93O72XEVa1JJo61dcwbZEoT9KmYTjR2tE,8477
340
+ flwr/serverapp/strategy/fedyogi.py,sha256=1Ripr4Hi2cdeTOLiFOXtMKvOxR3BsUQwc7bbTrXN4LM,6653
340
341
  flwr/serverapp/strategy/result.py,sha256=E0Hl2VLnZAgQJjE2GDoKsK7JX-kPPU2KXc47Axt6hGw,4295
341
342
  flwr/serverapp/strategy/strategy.py,sha256=8uJGGm1ROLZERQ_dkRS7Z_rs-yK6XCE0UxXtIdFiEWk,10789
342
- flwr/serverapp/strategy/strategy_utils.py,sha256=C8vU8JqKhMylq102x5jjQITzv_X2Khfo-uXkPTpnHms,9779
343
- flwr/serverapp/strategy/strategy_utils_tests.py,sha256=taG6HwApwutkjUuMY3R8Ib48Xepw6g5xl9HEB_-leoY,9232
343
+ flwr/serverapp/strategy/strategy_utils.py,sha256=o_1ksJsIQr6KgSQS_SOz3ZjarjnhwQBYzA6L0z171uI,9214
344
+ flwr/serverapp/strategy/strategy_utils_tests.py,sha256=5aJE3qXG0QuIHskPI2H0L3I5an-7yHLrcjcjDYJIK3A,9251
344
345
  flwr/simulation/__init__.py,sha256=Gg6OsP1Z-ixc3-xxzvl7j7rz2Fijy9rzyEPpxgAQCeM,1556
345
346
  flwr/simulation/app.py,sha256=LbGLMvN9Ap119yBqsUcNNmVLRnCySnr4VechqcQ1hpA,10401
346
347
  flwr/simulation/legacy_app.py,sha256=nMISQqW0otJL1-2Kfd94O6BLlGS2IEmEPKTM2WGKrIs,15861
@@ -385,7 +386,7 @@ flwr/superlink/servicer/control/__init__.py,sha256=qhUTMt_Mg4lxslCJYn5hDSrA-lXf5
385
386
  flwr/superlink/servicer/control/control_event_log_interceptor.py,sha256=HauUd7Xq-b1TFZmZVl9wpBITfDttn8-1_KhlEq-HJ8M,5966
386
387
  flwr/superlink/servicer/control/control_grpc.py,sha256=DUGArJvH3oZasutEU55NtYm0ZukPEO92UKhzOGu3qu8,4079
387
388
  flwr/superlink/servicer/control/control_license_interceptor.py,sha256=T3AzmRt-PPwyTq3hrdpmZHQd5_CpPOk7TtnFZrB-JRY,3349
388
- flwr/superlink/servicer/control/control_servicer.py,sha256=5GMGcq5_Hvac7DpVg8TWUZbjVibS2B-yRlcSX2U6zeM,13962
389
+ flwr/superlink/servicer/control/control_servicer.py,sha256=RFttpc1O0pYBaru1SXE6v3hUoNfgR3_ijN02bSVhDsM,13914
389
390
  flwr/superlink/servicer/control/control_user_auth_interceptor.py,sha256=9Aqhrt_UX80FXbIQVXUrqDHs5rD5CA7vEn0Bh-zPiYU,6232
390
391
  flwr/supernode/__init__.py,sha256=KgeCaVvXWrU3rptNR1y0oBp4YtXbAcrnCcJAiOoWkI4,707
391
392
  flwr/supernode/cli/__init__.py,sha256=JuEMr0-s9zv-PEWKuLB9tj1ocNfroSyNJ-oyv7ati9A,887
@@ -401,7 +402,7 @@ flwr/supernode/servicer/__init__.py,sha256=lucTzre5WPK7G1YLCfaqg3rbFWdNSb7ZTt-ca
401
402
  flwr/supernode/servicer/clientappio/__init__.py,sha256=7Oy62Y_oijqF7Dxi6tpcUQyOpLc_QpIRZ83NvwmB0Yg,813
402
403
  flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=nIHRu38EWK-rpNOkcgBRAAKwYQQWFeCwu0lkO7OPZGQ,10239
403
404
  flwr/supernode/start_client_internal.py,sha256=Y9S1-QlO2WP6eo4JvWzIpfaCoh2aoE7bjEYyxNNnlyg,20777
404
- flwr_nightly-1.21.0.dev20250905.dist-info/METADATA,sha256=j_7UpChhN5B6nRj4Gelt99YjECPo5fbZV8k6K3B86Go,15967
405
- flwr_nightly-1.21.0.dev20250905.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
406
- flwr_nightly-1.21.0.dev20250905.dist-info/entry_points.txt,sha256=hxHD2ixb_vJFDOlZV-zB4Ao32_BQlL34ftsDh1GXv14,420
407
- flwr_nightly-1.21.0.dev20250905.dist-info/RECORD,,
405
+ flwr_nightly-1.21.0.dev20250908.dist-info/METADATA,sha256=sOTcMr6_KLxcsaYqX3eou2bVcol4pTiC94t3qJOKZAA,15967
406
+ flwr_nightly-1.21.0.dev20250908.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
407
+ flwr_nightly-1.21.0.dev20250908.dist-info/entry_points.txt,sha256=hxHD2ixb_vJFDOlZV-zB4Ao32_BQlL34ftsDh1GXv14,420
408
+ flwr_nightly-1.21.0.dev20250908.dist-info/RECORD,,
File without changes