blazefl 2.0.0.dev7__tar.gz → 2.0.0.dev8__tar.gz

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.
Files changed (115) hide show
  1. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.github/workflows/ci.yaml +11 -2
  2. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.github/workflows/publish.yaml +2 -2
  3. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/PKG-INFO +1 -1
  4. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/pyproject.toml +1 -1
  5. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/uv.lock +4 -4
  6. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/pyproject.toml +1 -1
  7. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/contrib/fedavg.py +8 -11
  8. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_contrib/test_fedavg.py +1 -1
  9. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/uv.lock +1 -1
  10. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.github/FUNDING.yml +0 -0
  11. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  12. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  13. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.github/dependabot.yml +0 -0
  14. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.github/workflows/sphinx.yaml +0 -0
  15. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.gitignore +0 -0
  16. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.pre-commit-config.yaml +0 -0
  17. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/.python-version +0 -0
  18. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/CODE_OF_CONDUCT.md +0 -0
  19. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/LICENSE +0 -0
  20. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/Makefile +0 -0
  21. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/README.md +0 -0
  22. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/Makefile +0 -0
  23. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/imgs/architecture.png +0 -0
  24. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/imgs/benchmark_cnn.png +0 -0
  25. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/imgs/benchmark_resnet18.png +0 -0
  26. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/imgs/logo.svg +0 -0
  27. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/imgs/logo_square.svg +0 -0
  28. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/imgs/ogp.png +0 -0
  29. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/make.bat +0 -0
  30. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/_static/favicon.ico +0 -0
  31. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/_static/logo.png +0 -0
  32. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/_static/logo_square.png +0 -0
  33. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/_templates/autosummary/class.rst +0 -0
  34. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/_templates/autosummary/module.rst +0 -0
  35. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/benchmark.rst +0 -0
  36. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/conf.py +0 -0
  37. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/contribute.rst +0 -0
  38. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/example.rst +0 -0
  39. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/index.rst +0 -0
  40. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/install.rst +0 -0
  41. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/overview.rst +0 -0
  42. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/docs/source/reference.rst +0 -0
  43. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/.gitignore +0 -0
  44. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/.python-version +0 -0
  45. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/Makefile +0 -0
  46. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/README.md +0 -0
  47. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/config/config.yaml +0 -0
  48. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/dataset/__init__.py +0 -0
  49. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/dataset/dataset.py +0 -0
  50. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/dataset/functional.py +0 -0
  51. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/main.py +0 -0
  52. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/models/__init__.py +0 -0
  53. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/experimental-freethreaded/models/selector.py +0 -0
  54. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/.gitignore +0 -0
  55. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/.python-version +0 -0
  56. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/Makefile +0 -0
  57. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/README.md +0 -0
  58. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/config/config.yaml +0 -0
  59. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/dataset/__init__.py +0 -0
  60. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/dataset/dataset.py +0 -0
  61. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/dataset/functional.py +0 -0
  62. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/main.py +0 -0
  63. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/models/__init__.py +0 -0
  64. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/models/selector.py +0 -0
  65. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/quickstart-fedavg/pyproject.toml +0 -0
  66. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/.gitignore +0 -0
  67. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/.python-version +0 -0
  68. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/Makefile +0 -0
  69. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/README.md +0 -0
  70. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/algorithm/__init__.py +0 -0
  71. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/algorithm/dsfl.py +0 -0
  72. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/config/algorithm/dsfl.yaml +0 -0
  73. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/config/config.yaml +0 -0
  74. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/dataset/__init__.py +0 -0
  75. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/dataset/dataset.py +0 -0
  76. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/dataset/functional.py +0 -0
  77. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/main.py +0 -0
  78. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/models/__init__.py +0 -0
  79. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/models/cnn.py +0 -0
  80. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/models/selector.py +0 -0
  81. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/examples/step-by-step-dsfl/pyproject.toml +0 -0
  82. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/__init__.py +0 -0
  83. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/contrib/__init__.py +0 -0
  84. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/__init__.py +0 -0
  85. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/__init__.pyi +0 -0
  86. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/client_trainer.py +0 -0
  87. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/client_trainer.pyi +0 -0
  88. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/model_selector.py +0 -0
  89. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/model_selector.pyi +0 -0
  90. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/partitioned_dataset.py +0 -0
  91. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/partitioned_dataset.pyi +0 -0
  92. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/server_handler.py +0 -0
  93. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/core/server_handler.pyi +0 -0
  94. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/py.typed +0 -0
  95. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/__init__.py +0 -0
  96. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/__init__.pyi +0 -0
  97. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/dataset.py +0 -0
  98. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/dataset.pyi +0 -0
  99. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/ipc.py +0 -0
  100. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/ipc.pyi +0 -0
  101. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/seed.py +0 -0
  102. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/seed.pyi +0 -0
  103. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/serialize.py +0 -0
  104. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/src/blazefl/utils/serialize.pyi +0 -0
  105. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/__init__.py +0 -0
  106. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/conftest.py +0 -0
  107. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_contrib/__init__.py +0 -0
  108. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_core/__init__.py +0 -0
  109. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_core/test_client_trainer.py +0 -0
  110. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_core/test_model_selector.py +0 -0
  111. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_core/test_partitioned_dataset.py +0 -0
  112. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_utils/__init__.py +0 -0
  113. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_utils/test_dataset.py +0 -0
  114. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_utils/test_seed.py +0 -0
  115. {blazefl-2.0.0.dev7 → blazefl-2.0.0.dev8}/tests/test_utils/test_serialize.py +0 -0
@@ -11,7 +11,6 @@ on:
11
11
  push:
12
12
  branches:
13
13
  - main
14
- - develop
15
14
 
16
15
  jobs:
17
16
  run:
@@ -39,4 +38,14 @@ jobs:
39
38
  run: uv run mypy src
40
39
 
41
40
  - name: Run pytest
42
- run: uv run pytest tests
41
+ run: uv run pytest tests --junitxml=pytest.xml
42
+ continue-on-error: true
43
+
44
+ - name: Upload pytest results
45
+ if: ${{ always() }}
46
+ uses: actions/upload-artifact@v4
47
+ with:
48
+ name: pytest-results
49
+ path: pytest.xml
50
+
51
+
@@ -4,8 +4,8 @@ on:
4
4
  release:
5
5
  types: ["published"]
6
6
  push:
7
- branches:
8
- - develop
7
+ tags:
8
+ - 'v*.*.*.dev*'
9
9
 
10
10
  jobs:
11
11
  run:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: blazefl
3
- Version: 2.0.0.dev7
3
+ Version: 2.0.0.dev8
4
4
  Summary: A blazing-fast and lightweight simulation framework for Federated Learning.
5
5
  Author-email: kitsuyaazuma <kitsuyaazuma@gmail.com>
6
6
  License-File: LICENSE
@@ -5,7 +5,7 @@ description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"
7
7
  dependencies = [
8
- "blazefl>=2.0.0dev6",
8
+ "blazefl>=2.0.0dev7",
9
9
  "hydra-core>=1.3.2",
10
10
  "torch>=2.7.1",
11
11
  "torchvision>=0.22.1",
@@ -10,16 +10,16 @@ sdist = { url = "https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d
10
10
 
11
11
  [[package]]
12
12
  name = "blazefl"
13
- version = "2.0.0.dev6"
13
+ version = "2.0.0.dev7"
14
14
  source = { registry = "https://pypi.org/simple" }
15
15
  dependencies = [
16
16
  { name = "numpy" },
17
17
  { name = "torch" },
18
18
  { name = "tqdm" },
19
19
  ]
20
- sdist = { url = "https://files.pythonhosted.org/packages/d7/76/d247942d051447dc1c6dbc25b2d55b4cdf146cc0ebd3594c0c33628f465c/blazefl-2.0.0.dev6.tar.gz", hash = "sha256:d4875f03872917dfd99b3a70ac2c6efc3483ee0e42e484d7328e0810fe5141b9", size = 615380, upload_time = "2025-06-16T16:26:50.929Z" }
20
+ sdist = { url = "https://files.pythonhosted.org/packages/ae/30/2dc1c42d2b1c2ff7742fa37e77a4c08e0afe2a1170078a3364d5e9bce153/blazefl-2.0.0.dev7.tar.gz", hash = "sha256:8b77dc2c3c28ced6ad3c9662ff1eb8ca65175097e68aa97ebd4a74d114088bd9", size = 615335, upload_time = "2025-06-19T14:39:33.54Z" }
21
21
  wheels = [
22
- { url = "https://files.pythonhosted.org/packages/c8/30/eba32caaed89d04c925f676d48fb50bad7bed3ce2c86c6ebcaf2eb92aff1/blazefl-2.0.0.dev6-py3-none-any.whl", hash = "sha256:e38c3739be9ef2bc7bb8ba213da3319e4be8f9ea9f27ecd661cbc70c0cedd655", size = 26215, upload_time = "2025-06-16T16:26:49.512Z" },
22
+ { url = "https://files.pythonhosted.org/packages/6c/b8/92d9d6b6b9e2e128b7d532ea0a96032adf3da1122e8f35089589368c4484/blazefl-2.0.0.dev7-py3-none-any.whl", hash = "sha256:aa1fe627b6526d7333c33d3b860ca68b796715d8c90aa8387d0f480a67bd64d1", size = 26390, upload_time = "2025-06-19T14:39:32.293Z" },
23
23
  ]
24
24
 
25
25
  [[package]]
@@ -50,7 +50,7 @@ dev = [
50
50
 
51
51
  [package.metadata]
52
52
  requires-dist = [
53
- { name = "blazefl", specifier = ">=2.0.0.dev6" },
53
+ { name = "blazefl", specifier = ">=2.0.0.dev7" },
54
54
  { name = "hydra-core", specifier = ">=1.3.2" },
55
55
  { name = "torch", specifier = ">=2.7.1" },
56
56
  { name = "torchvision", specifier = ">=0.22.1" },
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "blazefl"
3
- version = "2.0.0.dev7"
3
+ version = "2.0.0.dev8"
4
4
  description = "A blazing-fast and lightweight simulation framework for Federated Learning."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -1,6 +1,5 @@
1
1
  import random
2
2
  import threading
3
- from copy import deepcopy
4
3
  from dataclasses import dataclass
5
4
  from enum import StrEnum
6
5
  from pathlib import Path
@@ -195,13 +194,11 @@ class FedAvgBaseServerHandler(
195
194
  Returns:
196
195
  torch.Tensor: Aggregated model parameters.
197
196
  """
198
- parameters = torch.stack(parameters_list, dim=-1)
199
- weights = torch.tensor(weights_list)
200
- weights = weights / torch.sum(weights)
201
-
202
- serialized_parameters = torch.sum(parameters * weights, dim=-1)
203
-
204
- return serialized_parameters
197
+ total_weight = sum(weights_list)
198
+ aggregated_parameters = parameters_list[0].clone().zero_()
199
+ for parameters, weight in zip(parameters_list, weights_list, strict=True):
200
+ aggregated_parameters.add_(parameters, alpha=weight / total_weight)
201
+ return aggregated_parameters
205
202
 
206
203
  @staticmethod
207
204
  def evaluate(
@@ -433,7 +430,7 @@ class FedAvgBaseClientTrainer(
433
430
  Returns:
434
431
  list[FedAvgUplinkPackage]: A list of uplink packages.
435
432
  """
436
- package = deepcopy(self.cache)
433
+ package = self.cache
437
434
  self.cache = []
438
435
  return package
439
436
 
@@ -728,7 +725,7 @@ class FedAvgProcessPoolClientTrainer(
728
725
  Returns:
729
726
  list[FedAvgUplinkPackage]: A list of uplink packages.
730
727
  """
731
- package = deepcopy(self.cache)
728
+ package = self.cache
732
729
  self.cache = []
733
730
  return package
734
731
 
@@ -845,6 +842,6 @@ class FedAvgThreadPoolClientTrainer(
845
842
  return FedAvgUplinkPackage(model_parameters, data_size)
846
843
 
847
844
  def uplink_package(self) -> list[FedAvgUplinkPackage]:
848
- package = deepcopy(self.cache)
845
+ package = self.cache
849
846
  self.cache = []
850
847
  return package
@@ -262,7 +262,7 @@ def test_base_handler_and_process_pool_trainer_integration_keyboard_interrupt(
262
262
 
263
263
  os.kill(proc.pid, signal.SIGINT)
264
264
 
265
- proc.join(timeout=5)
265
+ proc.join(timeout=10)
266
266
  assert not proc.is_alive()
267
267
 
268
268
 
@@ -82,7 +82,7 @@ wheels = [
82
82
 
83
83
  [[package]]
84
84
  name = "blazefl"
85
- version = "2.0.0.dev7"
85
+ version = "2.0.0.dev8"
86
86
  source = { editable = "." }
87
87
  dependencies = [
88
88
  { name = "numpy" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes