frequenz-gridpool 0.4.0__tar.gz → 0.4.2__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 (22) hide show
  1. {frequenz_gridpool-0.4.0/src/frequenz_gridpool.egg-info → frequenz_gridpool-0.4.2}/PKG-INFO +19 -19
  2. frequenz_gridpool-0.4.2/RELEASE_NOTES.md +17 -0
  3. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/pyproject.toml +21 -20
  4. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/_graph_generator.py +25 -0
  5. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/_microgrid_config.py +12 -16
  6. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2/src/frequenz_gridpool.egg-info}/PKG-INFO +19 -19
  7. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/src/frequenz_gridpool.egg-info/requires.txt +17 -16
  8. frequenz_gridpool-0.4.0/RELEASE_NOTES.md +0 -20
  9. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/LICENSE +0 -0
  10. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/MANIFEST.in +0 -0
  11. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/README.md +0 -0
  12. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/setup.cfg +0 -0
  13. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/__init__.py +0 -0
  14. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/cli/__init__.py +0 -0
  15. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/cli/__main__.py +0 -0
  16. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/cli/_render_graph.py +0 -0
  17. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/conftest.py +0 -0
  18. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/py.typed +0 -0
  19. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/src/frequenz_gridpool.egg-info/SOURCES.txt +0 -0
  20. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/src/frequenz_gridpool.egg-info/dependency_links.txt +0 -0
  21. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/src/frequenz_gridpool.egg-info/entry_points.txt +0 -0
  22. {frequenz_gridpool-0.4.0 → frequenz_gridpool-0.4.2}/src/frequenz_gridpool.egg-info/top_level.txt +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frequenz-gridpool
3
- Version: 0.4.0
3
+ Version: 0.4.2
4
4
  Summary: High-level interface to grid pools for the Frequenz platform.
5
5
  Author-email: Frequenz Energy-as-a-Service GmbH <floss@frequenz.com>
6
- License: MIT
6
+ License-Expression: MIT
7
7
  Project-URL: Documentation, https://frequenz-floss.github.io/frequenz-gridpool-python/
8
8
  Project-URL: Changelog, https://github.com/frequenz-floss/frequenz-gridpool-python/releases
9
9
  Project-URL: Issues, https://github.com/frequenz-floss/frequenz-gridpool-python/issues
@@ -12,7 +12,6 @@ Project-URL: Support, https://github.com/frequenz-floss/frequenz-gridpool-python
12
12
  Keywords: frequenz,python,lib,library,gridpool
13
13
  Classifier: Development Status :: 3 - Alpha
14
14
  Classifier: Intended Audience :: Developers
15
- Classifier: License :: OSI Approved :: MIT License
16
15
  Classifier: Programming Language :: Python :: 3
17
16
  Classifier: Programming Language :: Python :: 3 :: Only
18
17
  Classifier: Topic :: Software Development :: Libraries
@@ -30,38 +29,39 @@ Requires-Dist: matplotlib<4,>=3.7.0; extra == "render-graph"
30
29
  Requires-Dist: networkx<4,>=3.0; extra == "render-graph"
31
30
  Provides-Extra: dev-flake8
32
31
  Requires-Dist: flake8==7.3.0; extra == "dev-flake8"
32
+ Requires-Dist: flake8-datetimez==20.10.0; extra == "dev-flake8"
33
33
  Requires-Dist: flake8-docstrings==1.7.0; extra == "dev-flake8"
34
34
  Requires-Dist: flake8-pyproject==1.2.4; extra == "dev-flake8"
35
35
  Requires-Dist: pydoclint==0.8.3; extra == "dev-flake8"
36
36
  Requires-Dist: pydocstyle==6.3.0; extra == "dev-flake8"
37
37
  Provides-Extra: dev-formatting
38
- Requires-Dist: black==25.11.0; extra == "dev-formatting"
39
- Requires-Dist: isort==7.0.0; extra == "dev-formatting"
38
+ Requires-Dist: black==26.3.1; extra == "dev-formatting"
39
+ Requires-Dist: isort==8.0.1; extra == "dev-formatting"
40
40
  Provides-Extra: dev-mkdocs
41
41
  Requires-Dist: Markdown==3.10.2; extra == "dev-mkdocs"
42
- Requires-Dist: black==25.11.0; extra == "dev-mkdocs"
43
- Requires-Dist: mike==2.1.3; extra == "dev-mkdocs"
44
- Requires-Dist: mkdocs-gen-files==0.5.0; extra == "dev-mkdocs"
45
- Requires-Dist: mkdocs-literate-nav==0.6.2; extra == "dev-mkdocs"
42
+ Requires-Dist: black==26.3.1; extra == "dev-mkdocs"
43
+ Requires-Dist: mike==2.2.0; extra == "dev-mkdocs"
44
+ Requires-Dist: mkdocs-gen-files==0.6.1; extra == "dev-mkdocs"
45
+ Requires-Dist: mkdocs-literate-nav==0.6.3; extra == "dev-mkdocs"
46
46
  Requires-Dist: mkdocs-macros-plugin==1.5.0; extra == "dev-mkdocs"
47
- Requires-Dist: mkdocs-material==9.7.3; extra == "dev-mkdocs"
48
- Requires-Dist: mkdocstrings[python]==1.0.3; extra == "dev-mkdocs"
49
- Requires-Dist: mkdocstrings-python==1.19.0; extra == "dev-mkdocs"
50
- Requires-Dist: frequenz-repo-config[lib]==0.13.7; extra == "dev-mkdocs"
47
+ Requires-Dist: mkdocs-material==9.7.6; extra == "dev-mkdocs"
48
+ Requires-Dist: mkdocstrings[python]==1.0.4; extra == "dev-mkdocs"
49
+ Requires-Dist: mkdocstrings-python==2.0.3; extra == "dev-mkdocs"
50
+ Requires-Dist: frequenz-repo-config[lib]==0.17.0; extra == "dev-mkdocs"
51
51
  Provides-Extra: dev-mypy
52
- Requires-Dist: mypy==1.19.1; extra == "dev-mypy"
52
+ Requires-Dist: mypy==1.20.2; extra == "dev-mypy"
53
53
  Requires-Dist: types-networkx>=3.6.1.20251220; extra == "dev-mypy"
54
- Requires-Dist: types-Markdown==3.10.2.20260211; extra == "dev-mypy"
54
+ Requires-Dist: types-Markdown==3.10.2.20260408; extra == "dev-mypy"
55
55
  Requires-Dist: frequenz-gridpool[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-mypy"
56
56
  Provides-Extra: dev-noxfile
57
- Requires-Dist: nox==2025.11.12; extra == "dev-noxfile"
58
- Requires-Dist: frequenz-repo-config[lib]==0.13.7; extra == "dev-noxfile"
57
+ Requires-Dist: nox==2026.4.10; extra == "dev-noxfile"
58
+ Requires-Dist: frequenz-repo-config[lib]==0.17.0; extra == "dev-noxfile"
59
59
  Provides-Extra: dev-pylint
60
60
  Requires-Dist: frequenz-gridpool[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-pylint"
61
61
  Provides-Extra: dev-pytest
62
- Requires-Dist: pytest==9.0.2; extra == "dev-pytest"
62
+ Requires-Dist: pytest==9.0.3; extra == "dev-pytest"
63
63
  Requires-Dist: pylint==4.0.5; extra == "dev-pytest"
64
- Requires-Dist: frequenz-repo-config[extra-lint-examples]==0.13.7; extra == "dev-pytest"
64
+ Requires-Dist: frequenz-repo-config[extra-lint-examples]==0.17.0; extra == "dev-pytest"
65
65
  Requires-Dist: pytest-mock==3.15.1; extra == "dev-pytest"
66
66
  Requires-Dist: pytest-asyncio==1.3.0; extra == "dev-pytest"
67
67
  Requires-Dist: async-solipsism==0.9; extra == "dev-pytest"
@@ -0,0 +1,17 @@
1
+ # Frequenz Gridpool Library Release Notes
2
+
3
+ ## Summary
4
+
5
+ <!-- Here goes a general summary of what this release is about -->
6
+
7
+ ## Upgrading
8
+
9
+ <!-- Here goes notes on how to upgrade from previous versions, including deprecations and what they should be replaced with -->
10
+
11
+ ## New Features
12
+
13
+ - If there are unconnected breakers at a site, they are now hidden from the component graph. If there are breakers with connections to other components, they are still sent to the component graph. This is a temporary measure until the graph traversal supports breakers.
14
+
15
+ ## Bug Fixes
16
+
17
+ - Fixed auto-formula population to only fill formulas for component types already present in a microgrid configuration. This prevents creating placeholder entries with `None` formulas for component types that are not configured.
@@ -3,9 +3,9 @@
3
3
 
4
4
  [build-system]
5
5
  requires = [
6
- "setuptools == 80.10.1",
7
- "setuptools_scm[toml] == 9.2.2",
8
- "frequenz-repo-config[lib] == 0.13.7",
6
+ "setuptools == 82.0.1",
7
+ "setuptools_scm[toml] == 10.0.5",
8
+ "frequenz-repo-config[lib] == 0.17.0",
9
9
  ]
10
10
  build-backend = "setuptools.build_meta"
11
11
 
@@ -13,12 +13,12 @@ build-backend = "setuptools.build_meta"
13
13
  name = "frequenz-gridpool"
14
14
  description = "High-level interface to grid pools for the Frequenz platform."
15
15
  readme = "README.md"
16
- license = { text = "MIT" }
16
+ license = "MIT"
17
+ license-files = ["LICENSE"]
17
18
  keywords = ["frequenz", "python", "lib", "library", "gridpool"]
18
19
  classifiers = [
19
20
  "Development Status :: 3 - Alpha",
20
21
  "Intended Audience :: Developers",
21
- "License :: OSI Approved :: MIT License",
22
22
  "Programming Language :: Python :: 3",
23
23
  "Programming Language :: Python :: 3 :: Only",
24
24
  "Topic :: Software Development :: Libraries",
@@ -49,34 +49,35 @@ render-graph = [
49
49
 
50
50
  dev-flake8 = [
51
51
  "flake8 == 7.3.0",
52
+ "flake8-datetimez == 20.10.0",
52
53
  "flake8-docstrings == 1.7.0",
53
54
  "flake8-pyproject == 1.2.4", # For reading the flake8 config from pyproject.toml
54
55
  "pydoclint == 0.8.3",
55
56
  "pydocstyle == 6.3.0",
56
57
  ]
57
- dev-formatting = ["black == 25.11.0", "isort == 7.0.0"]
58
+ dev-formatting = ["black == 26.3.1", "isort == 8.0.1"]
58
59
  dev-mkdocs = [
59
60
  "Markdown == 3.10.2",
60
- "black == 25.11.0",
61
- "mike == 2.1.3",
62
- "mkdocs-gen-files == 0.5.0",
63
- "mkdocs-literate-nav == 0.6.2",
61
+ "black == 26.3.1",
62
+ "mike == 2.2.0",
63
+ "mkdocs-gen-files == 0.6.1",
64
+ "mkdocs-literate-nav == 0.6.3",
64
65
  "mkdocs-macros-plugin == 1.5.0",
65
- "mkdocs-material == 9.7.3",
66
- "mkdocstrings[python] == 1.0.3",
67
- "mkdocstrings-python == 1.19.0",
68
- "frequenz-repo-config[lib] == 0.13.7",
66
+ "mkdocs-material == 9.7.6",
67
+ "mkdocstrings[python] == 1.0.4",
68
+ "mkdocstrings-python == 2.0.3",
69
+ "frequenz-repo-config[lib] == 0.17.0",
69
70
  ]
70
71
  dev-mypy = [
71
- "mypy == 1.19.1",
72
+ "mypy == 1.20.2",
72
73
  "types-networkx>=3.6.1.20251220",
73
- "types-Markdown == 3.10.2.20260211",
74
+ "types-Markdown == 3.10.2.20260408",
74
75
  # For checking the noxfile, docs/ script, and tests
75
76
  "frequenz-gridpool[dev-mkdocs,dev-noxfile,dev-pytest]",
76
77
  ]
77
78
  dev-noxfile = [
78
- "nox == 2025.11.12",
79
- "frequenz-repo-config[lib] == 0.13.7",
79
+ "nox == 2026.4.10",
80
+ "frequenz-repo-config[lib] == 0.17.0",
80
81
  ]
81
82
  dev-pylint = [
82
83
  # dev-pytest already defines a dependency to pylint because of the examples
@@ -84,9 +85,9 @@ dev-pylint = [
84
85
  "frequenz-gridpool[dev-mkdocs,dev-noxfile,dev-pytest]",
85
86
  ]
86
87
  dev-pytest = [
87
- "pytest == 9.0.2",
88
+ "pytest == 9.0.3",
88
89
  "pylint == 4.0.5", # We need this to check for the examples
89
- "frequenz-repo-config[extra-lint-examples] == 0.13.7",
90
+ "frequenz-repo-config[extra-lint-examples] == 0.17.0",
90
91
  "pytest-mock == 3.15.1",
91
92
  "pytest-asyncio == 1.3.0",
92
93
  "async-solipsism == 0.9",
@@ -3,8 +3,11 @@
3
3
 
4
4
  """Formula generation from assets API component/connection configurations."""
5
5
 
6
+ import logging
7
+
6
8
  from frequenz.client.assets import AssetsApiClient
7
9
  from frequenz.client.assets.electrical_component import (
10
+ Breaker,
8
11
  ComponentConnection,
9
12
  ElectricalComponent,
10
13
  )
@@ -12,6 +15,8 @@ from frequenz.client.common.microgrid import MicrogridId
12
15
  from frequenz.client.common.microgrid.electrical_components import ElectricalComponentId
13
16
  from frequenz.microgrid_component_graph import ComponentGraph
14
17
 
18
+ _logger = logging.getLogger(__name__)
19
+
15
20
 
16
21
  class ComponentGraphGenerator:
17
22
  """Generates component graphs for microgrids using the Assets API."""
@@ -57,6 +62,26 @@ class ComponentGraphGenerator:
57
62
  if any(c is None for c in connections):
58
63
  raise ValueError("Failed to load all electrical component connections.")
59
64
 
65
+ breakers = [c for c in components if isinstance(c, Breaker)]
66
+ connected_breakers = [
67
+ b
68
+ for b in breakers
69
+ if any(
70
+ b.id in (c.source, c.destination) for c in connections if c is not None
71
+ )
72
+ ]
73
+
74
+ if connected_breakers:
75
+ _logger.warning(
76
+ "The following breakers are connected to other components, "
77
+ + "which is not supported by the component graph generator and may "
78
+ + "lead to graph traversal issues: %s",
79
+ [b.id for b in connected_breakers],
80
+ )
81
+ elif breakers:
82
+ _logger.debug("Dropping unconnected breakers: %s", [b.id for b in breakers])
83
+ components = [c for c in components if not isinstance(c, Breaker)]
84
+
60
85
  graph = ComponentGraph[
61
86
  ElectricalComponent, ComponentConnection, ElectricalComponentId
62
87
  ](components, connections)
@@ -51,19 +51,6 @@ class ComponentTypeConfig:
51
51
  "please use 'AC_POWER_ACTIVE' instead."
52
52
  )
53
53
 
54
- defaults = {
55
- "AC_POWER_ACTIVE",
56
- "AC_ENERGY_ACTIVE",
57
- "AC_ENERGY_ACTIVE_CONSUMED",
58
- "AC_ENERGY_ACTIVE_DELIVERED",
59
- }
60
-
61
- for metric in defaults:
62
- if metric not in self.formula:
63
- self.formula[metric] = "+".join(
64
- [f"#{cid}" for cid in self._default_cids()]
65
- )
66
-
67
54
  def cids(self, metric: str = "") -> list[int]:
68
55
  """Get component IDs for this component.
69
56
 
@@ -454,10 +441,13 @@ class MicrogridConfig:
454
441
  assets_url, auth_key=assets_auth_key, sign_secret=assets_sign_secret
455
442
  ) as assets_client:
456
443
  for microgrid_id, config in microgrid_configs.items():
444
+ relevant_ctypes = set(config.ctype.keys())
445
+
457
446
  await populate_missing_formulas(
458
447
  microgrid_id=int(microgrid_id),
459
448
  config=config,
460
449
  assets_client=assets_client,
450
+ component_types=relevant_ctypes,
461
451
  )
462
452
 
463
453
  return microgrid_configs
@@ -467,6 +457,7 @@ async def populate_missing_formulas(
467
457
  microgrid_id: int,
468
458
  config: "MicrogridConfig",
469
459
  assets_client: AssetsApiClient,
460
+ component_types: set[str] | None = None,
470
461
  ) -> None:
471
462
  """Populate missing component formulas from the assets API graph.
472
463
 
@@ -484,6 +475,8 @@ async def populate_missing_formulas(
484
475
  Microgrid configuration object to update in place.
485
476
  assets_client:
486
477
  Assets API client used to fetch the component graph.
478
+ component_types:
479
+ Optional set of component types to consider when populating formulas.
487
480
 
488
481
  Returns:
489
482
  None. The configuration is modified in place.
@@ -515,12 +508,15 @@ async def populate_missing_formulas(
515
508
  "AC_ENERGY_ACTIVE_DELIVERED",
516
509
  )
517
510
 
511
+ # Default: only populate component types already present in the config.
512
+ allowed_ctypes = component_types or set(config.ctype.keys())
513
+
518
514
  for ctype, formula in auto_formulas.items():
515
+ if ctype not in allowed_ctypes:
516
+ continue
517
+
519
518
  cfg = config.ctype.get(ctype)
520
519
  if cfg is None:
521
- config.ctype[ctype] = ComponentTypeConfig(
522
- formula={metric: formula for metric in metrics}
523
- )
524
520
  continue
525
521
 
526
522
  if cfg.formula is None:
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frequenz-gridpool
3
- Version: 0.4.0
3
+ Version: 0.4.2
4
4
  Summary: High-level interface to grid pools for the Frequenz platform.
5
5
  Author-email: Frequenz Energy-as-a-Service GmbH <floss@frequenz.com>
6
- License: MIT
6
+ License-Expression: MIT
7
7
  Project-URL: Documentation, https://frequenz-floss.github.io/frequenz-gridpool-python/
8
8
  Project-URL: Changelog, https://github.com/frequenz-floss/frequenz-gridpool-python/releases
9
9
  Project-URL: Issues, https://github.com/frequenz-floss/frequenz-gridpool-python/issues
@@ -12,7 +12,6 @@ Project-URL: Support, https://github.com/frequenz-floss/frequenz-gridpool-python
12
12
  Keywords: frequenz,python,lib,library,gridpool
13
13
  Classifier: Development Status :: 3 - Alpha
14
14
  Classifier: Intended Audience :: Developers
15
- Classifier: License :: OSI Approved :: MIT License
16
15
  Classifier: Programming Language :: Python :: 3
17
16
  Classifier: Programming Language :: Python :: 3 :: Only
18
17
  Classifier: Topic :: Software Development :: Libraries
@@ -30,38 +29,39 @@ Requires-Dist: matplotlib<4,>=3.7.0; extra == "render-graph"
30
29
  Requires-Dist: networkx<4,>=3.0; extra == "render-graph"
31
30
  Provides-Extra: dev-flake8
32
31
  Requires-Dist: flake8==7.3.0; extra == "dev-flake8"
32
+ Requires-Dist: flake8-datetimez==20.10.0; extra == "dev-flake8"
33
33
  Requires-Dist: flake8-docstrings==1.7.0; extra == "dev-flake8"
34
34
  Requires-Dist: flake8-pyproject==1.2.4; extra == "dev-flake8"
35
35
  Requires-Dist: pydoclint==0.8.3; extra == "dev-flake8"
36
36
  Requires-Dist: pydocstyle==6.3.0; extra == "dev-flake8"
37
37
  Provides-Extra: dev-formatting
38
- Requires-Dist: black==25.11.0; extra == "dev-formatting"
39
- Requires-Dist: isort==7.0.0; extra == "dev-formatting"
38
+ Requires-Dist: black==26.3.1; extra == "dev-formatting"
39
+ Requires-Dist: isort==8.0.1; extra == "dev-formatting"
40
40
  Provides-Extra: dev-mkdocs
41
41
  Requires-Dist: Markdown==3.10.2; extra == "dev-mkdocs"
42
- Requires-Dist: black==25.11.0; extra == "dev-mkdocs"
43
- Requires-Dist: mike==2.1.3; extra == "dev-mkdocs"
44
- Requires-Dist: mkdocs-gen-files==0.5.0; extra == "dev-mkdocs"
45
- Requires-Dist: mkdocs-literate-nav==0.6.2; extra == "dev-mkdocs"
42
+ Requires-Dist: black==26.3.1; extra == "dev-mkdocs"
43
+ Requires-Dist: mike==2.2.0; extra == "dev-mkdocs"
44
+ Requires-Dist: mkdocs-gen-files==0.6.1; extra == "dev-mkdocs"
45
+ Requires-Dist: mkdocs-literate-nav==0.6.3; extra == "dev-mkdocs"
46
46
  Requires-Dist: mkdocs-macros-plugin==1.5.0; extra == "dev-mkdocs"
47
- Requires-Dist: mkdocs-material==9.7.3; extra == "dev-mkdocs"
48
- Requires-Dist: mkdocstrings[python]==1.0.3; extra == "dev-mkdocs"
49
- Requires-Dist: mkdocstrings-python==1.19.0; extra == "dev-mkdocs"
50
- Requires-Dist: frequenz-repo-config[lib]==0.13.7; extra == "dev-mkdocs"
47
+ Requires-Dist: mkdocs-material==9.7.6; extra == "dev-mkdocs"
48
+ Requires-Dist: mkdocstrings[python]==1.0.4; extra == "dev-mkdocs"
49
+ Requires-Dist: mkdocstrings-python==2.0.3; extra == "dev-mkdocs"
50
+ Requires-Dist: frequenz-repo-config[lib]==0.17.0; extra == "dev-mkdocs"
51
51
  Provides-Extra: dev-mypy
52
- Requires-Dist: mypy==1.19.1; extra == "dev-mypy"
52
+ Requires-Dist: mypy==1.20.2; extra == "dev-mypy"
53
53
  Requires-Dist: types-networkx>=3.6.1.20251220; extra == "dev-mypy"
54
- Requires-Dist: types-Markdown==3.10.2.20260211; extra == "dev-mypy"
54
+ Requires-Dist: types-Markdown==3.10.2.20260408; extra == "dev-mypy"
55
55
  Requires-Dist: frequenz-gridpool[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-mypy"
56
56
  Provides-Extra: dev-noxfile
57
- Requires-Dist: nox==2025.11.12; extra == "dev-noxfile"
58
- Requires-Dist: frequenz-repo-config[lib]==0.13.7; extra == "dev-noxfile"
57
+ Requires-Dist: nox==2026.4.10; extra == "dev-noxfile"
58
+ Requires-Dist: frequenz-repo-config[lib]==0.17.0; extra == "dev-noxfile"
59
59
  Provides-Extra: dev-pylint
60
60
  Requires-Dist: frequenz-gridpool[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-pylint"
61
61
  Provides-Extra: dev-pytest
62
- Requires-Dist: pytest==9.0.2; extra == "dev-pytest"
62
+ Requires-Dist: pytest==9.0.3; extra == "dev-pytest"
63
63
  Requires-Dist: pylint==4.0.5; extra == "dev-pytest"
64
- Requires-Dist: frequenz-repo-config[extra-lint-examples]==0.13.7; extra == "dev-pytest"
64
+ Requires-Dist: frequenz-repo-config[extra-lint-examples]==0.17.0; extra == "dev-pytest"
65
65
  Requires-Dist: pytest-mock==3.15.1; extra == "dev-pytest"
66
66
  Requires-Dist: pytest-asyncio==1.3.0; extra == "dev-pytest"
67
67
  Requires-Dist: async-solipsism==0.9; extra == "dev-pytest"
@@ -9,44 +9,45 @@ frequenz-gridpool[dev-flake8,dev-formatting,dev-mkdocs,dev-mypy,dev-noxfile,dev-
9
9
 
10
10
  [dev-flake8]
11
11
  flake8==7.3.0
12
+ flake8-datetimez==20.10.0
12
13
  flake8-docstrings==1.7.0
13
14
  flake8-pyproject==1.2.4
14
15
  pydoclint==0.8.3
15
16
  pydocstyle==6.3.0
16
17
 
17
18
  [dev-formatting]
18
- black==25.11.0
19
- isort==7.0.0
19
+ black==26.3.1
20
+ isort==8.0.1
20
21
 
21
22
  [dev-mkdocs]
22
23
  Markdown==3.10.2
23
- black==25.11.0
24
- mike==2.1.3
25
- mkdocs-gen-files==0.5.0
26
- mkdocs-literate-nav==0.6.2
24
+ black==26.3.1
25
+ mike==2.2.0
26
+ mkdocs-gen-files==0.6.1
27
+ mkdocs-literate-nav==0.6.3
27
28
  mkdocs-macros-plugin==1.5.0
28
- mkdocs-material==9.7.3
29
- mkdocstrings[python]==1.0.3
30
- mkdocstrings-python==1.19.0
31
- frequenz-repo-config[lib]==0.13.7
29
+ mkdocs-material==9.7.6
30
+ mkdocstrings[python]==1.0.4
31
+ mkdocstrings-python==2.0.3
32
+ frequenz-repo-config[lib]==0.17.0
32
33
 
33
34
  [dev-mypy]
34
- mypy==1.19.1
35
+ mypy==1.20.2
35
36
  types-networkx>=3.6.1.20251220
36
- types-Markdown==3.10.2.20260211
37
+ types-Markdown==3.10.2.20260408
37
38
  frequenz-gridpool[dev-mkdocs,dev-noxfile,dev-pytest]
38
39
 
39
40
  [dev-noxfile]
40
- nox==2025.11.12
41
- frequenz-repo-config[lib]==0.13.7
41
+ nox==2026.4.10
42
+ frequenz-repo-config[lib]==0.17.0
42
43
 
43
44
  [dev-pylint]
44
45
  frequenz-gridpool[dev-mkdocs,dev-noxfile,dev-pytest]
45
46
 
46
47
  [dev-pytest]
47
- pytest==9.0.2
48
+ pytest==9.0.3
48
49
  pylint==4.0.5
49
- frequenz-repo-config[extra-lint-examples]==0.13.7
50
+ frequenz-repo-config[extra-lint-examples]==0.17.0
50
51
  pytest-mock==3.15.1
51
52
  pytest-asyncio==1.3.0
52
53
  async-solipsism==0.9
@@ -1,20 +0,0 @@
1
- # Frequenz Gridpool Library Release Notes
2
-
3
- ## Summary
4
-
5
- This release adds default formulas for AC energy metrics when they are not
6
- explicitly configured.
7
-
8
- ## Upgrading
9
-
10
- * Update assets client to v0.3.0.
11
-
12
- ## New Features
13
-
14
- * Added default summation formulas for `AC_ENERGY_ACTIVE`,
15
- `AC_ENERGY_ACTIVE_CONSUMED`, and `AC_ENERGY_ACTIVE_DELIVERED` when formulas are
16
- not provided. The defaults are built from the component IDs configured for the
17
- component type.
18
-
19
- ## Bug Fixes
20
-