Frequenz-sdk

Latest version: v0.25.2

Safety actively analyzes 685670 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 4 of 8

1.0.0rc4

Frequenz Python SDK Release Notes

Summary

This release represents 3 months of work so it includes a lot of changes. Most of them are (breaking) API changes, in the hopes to make a more consistent and easier to use SDK 1.0. There are also quite a few bug fixes and a couple of new features.

Upgrading

- The `BatteryPool.power_status` method now streams objects of type `BatteryPoolReport`, replacing the previous `Report` objects.

- `Channels` has been upgraded to version 1.0.0b2, for information on how to upgrade please read [Channels release notes](https://github.com/frequenz-floss/frequenz-channels-python/releases/tag/v1.0.0-beta.2).

- In `BatteryPoolReport.distribution_result`,
* the following fields have been renamed:
+ `Result.succeeded_batteries` → `Result.succeeded_components`
+ `Result.failed_batteries` → `Result.failed_components`
+ `Request.batteries` → `Request.component_ids`
* and the following fields are now type-hinted as `collections.abc.Set`, to clearly indicate that they are read-only:
+ `Result.succeeded_components`
+ `Result.failed_components`


- The `Fuse` class has been moved to the `frequenz.sdk.timeseries` module.

- `microgrid.grid()`
- A `Grid` object is always instantiated now, even if the microgrid is not connected to the grid (islanded microgrids).
- The rated current of the grid fuse is set to `Current.zero()` in case of islanded microgrids.
- The grid fuse is set to `None` when the grid connection component metadata lacks information about the fuse.
- Grid power and current metrics were moved from `microgrid.logical_meter()` to `microgrid.grid()`.

Previously,

python
logical_meter = microgrid.logical_meter()
grid_power_recv = logical_meter.grid_power.new_receiver()
grid_current_recv = logical_meter.grid_current.new_receiver()


Now,

python
grid = microgrid.grid()
grid_power_recv = grid.power.new_receiver()
grid_current_recv = grid.current.new_receiver()


- Consumer and producer power formulas were moved from `microgrid.logical_meter()` to `microgrid.consumer()` and `microgrid.producer()`, respectively.

Previously,

python
logical_meter = microgrid.logical_meter()
consumer_power_recv = logical_meter.consumer_power.new_receiver()
producer_power_recv = logical_meter.producer_power.new_receiver()


Now,

python
consumer_power_recv = microgrid.consumer().power.new_receiver()
producer_power_recv = microgrid.producer().power.new_receiver()


- The `ComponentGraph.components()` parameters `component_id` and `component_category` were renamed to `component_ids` and `component_categories`, respectively.

- The `GridFrequency.component` property was renamed to `GridFrequency.source`

- The `microgrid.frequency()` method no longer supports passing the `component` parameter. Instead the best component is automatically selected.

- The `actor.ChannelRegistry` was rewritten to be type-aware and just a container of channels. You now need to provide the type of message that will be contained by the channel and use the `get_or_create()` method to get a channel and the `stop_and_remove()` method to stop and remove a channel. Once you get a channel you can create new senders and receivers, or set channel options, as usual. Please read the docs for a full description, but in general this:

python
r = registry.new_receiver(name)
s = registry.new_sender(name)


Should be replaced by:

python
r = registry.get_or_create(T, name).new_receiver()
s = registry.get_or_create(T, name).new_sender()


- The `ReceiverFetcher` interface was slightly changed to make `maxsize` a keyword-only argument. This is to make it compatible with the `Broadcast` channel, so it can be considered a `ReceiverFetcher`.

New Features

- A new method `microgrid.voltage()` was added to allow easy access to the phase-to-neutral 3-phase voltage of the microgrid.

- The `actor.ChannelRegistry` is now type-aware.

- A new class method `Quantity.from_string()` has been added to allow the creation of `Quantity` objects from strings.

Bug Fixes

- 0W power requests are now not adjusted to exclusion bounds by the `PowerManager` and `PowerDistributor`, and are sent over to the microgrid API directly.

- `microgrid.frequency()` / `GridFrequency`:

* Fix sent samples to use `Frequency` objects instead of raw `Quantity`.
* Handle `None` values in the received samples properly.
* Convert `nan` values in the received samples to `None`.

- The resampler now properly handles sending zero values.

A bug made the resampler interpret zero values as `None` when generating new samples, so if the result of the resampling is zero, the resampler would just produce `None` values.

- The PowerManager no longer holds on to proposals from dead actors forever. If an actor hasn't sent a new proposal in 60 seconds, the available proposal from that actor is dropped.

- Fix `Quantity.__format__()` sometimes skipping the number for very small values.

- Not strictly a bug fix, but the microgrid API version was bumped to v0.15.3, which indirectly bumps the common API dependency to v0.5.x, so the SDK can be compatible with other APIs using a newer version of the common API.

Downstream projects that require a `frequenz-api-common` v0.5.x and want to ensure proper dependency resolution should update their minimum SDK version to this release.


What's Changed
* Clear release notes by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/777
* Make `PowerManagingActor` more modular and generic by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/773
* Fix type hint errors in microgrid client by daniel-zullo-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/778
* Use custom loggers for each module by daniel-zullo-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/780
* Bump types-protobuf from 4.24.0.3 to 4.24.0.4 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/749
* Modularize status tracking for pools of components in the power distributing actor by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/779
* Generalize PowerDistributingActor by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/786
* Move Fuse to timeseries module by daniel-zullo-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/781
* Move grid power and current metrics to Grid by daniel-zullo-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/758
* Bump frequenz-channels from 0.16 to 1.0.0b2 by christianparpart in https://github.com/frequenz-floss/frequenz-sdk-python/pull/764
* Rename `ComponentGraph.components()` parameters to be plural by Marenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/791
* Update some tests to use time machine by matthias-wende-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/798
* Un-Peekable-ification of the PowerDistributingActor by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/800
* Pass through 0W requests to the microgrid API independent of exclusion bounds by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/801
* Update `frequency()` to no longer have parameters by Marenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/788
* Fix frequency sending `Quantity` by Marenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/804
* Fix the resampler handling of output zeros by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/811
* Fetch and stream 3-phase voltage by daniel-zullo-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/815
* Speedup tests by lowering the actors restart delay by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/828
* Bump actions/setup-python from 4 to 5 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/834
* Add missing type hints to instance members by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/809
* Fix bug in `GridFrequency` quantity conversion by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/807
* Improve (and fix some) test finalization by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/838
* Make the registry type-aware by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/830
* Improve BatteryPool's SoC accuracy at the edges by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/843
* Some component status cleanup by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/839
* Drop old propsals from the PowerManager by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/845
* Improvements to EVChargerData coming from the microgrid API by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/848
* Use a sentinel in `LatestValueCache` to denote if the cache is empty by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/846
* Move consumer and producer formulas out from logical meter by daniel-zullo-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/799
* Parse Quantity Strings by Marenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/824
* Bump frequenz-api-microgrid to 0.15.3 by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/855
* Bump the optional group with 14 updates by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/837
* Bump types-protobuf from 4.24.0.4 to 4.24.0.20240129 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/867
* Bump flake8 from 6.1.0 to 7.0.0 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/860
* Bump setuptools related dependencies by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/863
* Bump actions/cache from 3 to 4 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/858
* Bump pylint from 2.17.5 to 3.0.3 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/866
* Bump black from 23.12.1 to 24.1.1 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/865
* Remove unused type stubs by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/869
* Add release notes summary for the release by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/870


**Full Changelog**: https://github.com/frequenz-floss/frequenz-sdk-python/compare/v1.0.0-rc3...v1.0.0-rc4

1.0.0rc3

Frequenz Python SDK Release Notes

Summary

The `microgrid` package now exposes grid connections uniformly and introduces formula operators for `consumption` and `production`, replacing the `logical_meter.*_{production,consumption}()` formulas. The `actor` package restarts crashed actors with a delay, and the `ConnectionManager` exposes the `microgrid_id` and `location` details.

There are also a few bug fixes, documentation improvements and other minor breaking changes.

Upgrading

- `actor` package

* Actors are now restarted after a small delay when they crash to avoid a busy loop and spamming the logs if the actor keeps failing to start.

* The `include_broken_batteries` argument was removed from the `PowerDistributingActor`'s `Request`. This option is no longer supported.

- `microgrid` package

* `grid`: The grid connection is now exposed as `microgrid.grid()`. This is more consistent with other objects exposed in the `microgrid` module, such as `microgrid.battery_pool()` and `microgrid.logical_meter()`.

* `battery_pool()`: The `include_broken_batteries` argument was removed from the `propose_*()` methods (it was also removed from the underlying type, `timeseries.BatteryPool`). This option is no longer supported.

* `ComponentGraph`: The component graph is now exposed as `microgrid.component_graph.ComponentGraph`.

* `logical_meter()`: The `*_consumption()` and `*_production()` methods were removed. You should use the new `consumption` and `production` formula operators instead.

For example:

python
Old:
pv_consumption = logical_meter.pv_consumption_power()
production = (logical_meter.pv_production_power() + logical_meter.chp_production_power()).build()
New:
pv_consumption = logical_meter.pv_power().consumption().build()
production = (logical_meter.pv_power().production() + logical_meter.chp_power().production()).build()


New Features

- The configuration flag `resend_latest` can now be changed for channels owned by the `ChannelRegistry`.

- New formula operators for calculating `consumption()` and `production()` were added.

- The `ConnectionManager` now fetches microgrid metadata when connecting to the microgrid and exposes `microgrid_id` and `location` properties of the connected microgrid.

Users can access this information using `microgrid.connection_manager.get().microgrid_id` and `microgrid.connection_manager.get().location`.

- The documentation has been improved to:

* Display signatures with types.
* Show inherited members.
* Publish documentation for pre-releases.
* Present the full tag name as the documentation version.
* Ensure all development branches have their documentation published (the `next` version has been removed).
* Fix the order of the documentation versions.

Bug Fixes

- Fixed incorrect grid current calculations in locations where the calculations depended on current measurements from an inverter.

- Corrected the power failure report to exclude any failed power calculations from the successful ones.


What's Changed
* Remove support for `include_broken_batteries` in control commands by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/713
* Improve code reusability/modularity in PowerDistributor by Marenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/717
* Document microgrid concepts from an SDK perspective by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/722
* Documentation for the FormulaEngine by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/731
* Bump types-protobuf from 4.24.0.2 to 4.24.0.3 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/734
* Expose `ComponentGraph` from its own module by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/738
* Document methods for creating data pipeline interface objects by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/739
* Add a restart delay to actors to avoid spam-restarting of buggy actors by christianparpart in https://github.com/frequenz-floss/frequenz-sdk-python/pull/741
* Rename datetime to timestamp variables by daniel-zullo-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/742
* Redesign access to migrogrid.grid() by christianparpart in https://github.com/frequenz-floss/frequenz-sdk-python/pull/707
* Set `resent_latest=True` for `BatteryPool.power_status`'s channels by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/743
* Clean warnings in tests by daniel-zullo-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/744
* Add consumtion and production operations to Formula Engine by matthias-wende-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/746
* Use exclusion bounds while calculating target powers in PowerManager by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/755
* Remove the consumption and production power formulas by matthias-wende-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/697
* Change internal presense of the Grid, eliminating `_grid` by christianparpart in https://github.com/frequenz-floss/frequenz-sdk-python/pull/747
* Update DataSourcingActor to accept current requests for inverters by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/759
* Remove unused paranthesis in formula generators by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/761
* Fix bug in inverter current data extractor by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/762
* Rename nitrogen to Microgrid service by andrew-stevenson-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/760
* Add try/finally to decorated context managers yield statement by christianparpart in https://github.com/frequenz-floss/frequenz-sdk-python/pull/757
* Fix power failure report by daniel-zullo-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/763
* Update to repo-config v0.7.4 by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/752
* Make the SDK's representation of bounds data internal by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/756
* Bump mike from 1.1.2 to 2.0.0 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/766
* Use a custom logger in the data sourcing actor by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/769
* Fetch and expose microgrid ID and location by daniel-zullo-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/708
* Prepare release notes for the v1.0.0-rc3 release by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/775

New Contributors
* andrew-stevenson-frequenz made their first contribution in https://github.com/frequenz-floss/frequenz-sdk-python/pull/760

**Full Changelog**: https://github.com/frequenz-floss/frequenz-sdk-python/compare/v1.0.0-rc2...v1.0.0-rc3

1.0.0rc2

Frequenz Python SDK Release Notes

Summary

This version ships an experimental version of the **Power Manager** and includes user documentation.

Upgrading

- `microgrid.battery_pool()` method now accepts a priority value.

- `BatteryPool`'s control methods

* Original methods `{set_power/charge/discharge}` are now replaced by `propose_{power/charge/discharge}`
* The `propose_*` methods send power proposals to the `PowerManagingActor`, where it can be overridden by proposals from other actors.
* They no longer have the `adjust_power` flag, because the `PowerManagingActor` will always adjust power to fit within the available bounds.

- `BatteryPool`'s reporting methods

* `power_bounds` is replaced by `power_status`
* The `power_status` method streams objects containing:
+ bounds adjusted to the actor's priorities
+ the latest target power for the set of batteries
+ the results from the power distributor for the last request

New Features

- New and improved documentation.

* A new *User Guide* section was added, with:

+ A glossary.
+ An introduction to actors.

* A new *Tutorials* section was added, with:

+ A getting started tutorial.

- In `OrderedRingBuffer`:
- Rename `datetime_to_index` to `to_internal_index` to avoid confusion between the internal index and the external index.
- Add `index_to_datetime` method to convert external index to corresponding datetime.
- Remove `__setitem__` method to enforce usage of dedicated `update` method only.
- In `OrderedRingBuffer` and `MovingWindow`:
- Support for integer indices is added.
- Add `count_covered` method to count the number of elements covered by the used time range.
- Add `fill_value` option to window method to impute missing values. By default missing values are imputed with `NaN`.
- Add `at` method to `MovingWindow` to access a single element and use it in `__getitem__` magic to fully support single element access.

- The PowerDistributingActor now supports n:m relations between inverters and batteries.

This means that one or more inverters can be connected to one or more batteries.

- A `PowerManagingActor` implementation

Bug Fixes

- Fix rendering of diagrams in the documentation.
- The `__getitem__` magic of the `MovingWindow` is fixed to support the same functionality that the `window` method provides.
- Fixes incorrect implementation of single element access in `__getitem__` magic of `MovingWindow`.


What's Changed
* Clear the release notes by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/675
* Bump the optional group with 9 updates by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/683
* Bump docker/setup-buildx-action from 2 to 3 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/680
* Bump docker/setup-qemu-action from 2 to 3 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/681
* Bump docker/build-push-action from 4 to 5 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/682
* Add mkdocs-macros plugin by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/667
* docs: Add an introduction to actors by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/679
* mkdocs: Fix numbered code annotations by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/684
* Add getting started tutorial and tutorial section by matthias-wende-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/656
* Remove setitem magic from ring buffer by cwasicki in https://github.com/frequenz-floss/frequenz-sdk-python/pull/670
* Allow using macros in docstrings by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/687
* Rename datetime_to_index to to_internal_index by cwasicki in https://github.com/frequenz-floss/frequenz-sdk-python/pull/686
* Fix mermaid diagrams custom renderer by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/690
* Update obsolete comment about networkx-stubs by daniel-zullo-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/685
* Move Actors documentation to the `actor` module by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/688
* Don't use generics unnecessarily by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/698
* Improve Actors documentation by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/689
* Increment port in microgrid API client tests by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/699
* Support int indices and slice index behavior in ring buffer and moving window by cwasicki in https://github.com/frequenz-floss/frequenz-sdk-python/pull/668
* Fix single element access for moving window by cwasicki in https://github.com/frequenz-floss/frequenz-sdk-python/pull/672
* Rename `Introduction` to `User Guide` and move `Tutorials` next to it by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/701
* Bump types-pytz from 2023.3.1.0 to 2023.3.1.1 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/695
* Bump types-protobuf from 4.24.0.1 to 4.24.0.2 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/696
* Bump types-pyyaml from 6.0.12.11 to 6.0.12.12 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/694
* PowerDistributing: Add support for n:m relations in invs:bats by Marenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/660
* Fix bug in how failed batteries are tracked in PowerDistributor by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/705
* Update pydantic to v2.3 by daniel-zullo-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/703
* Add option to impute missing values in window method for moving window by cwasicki in https://github.com/frequenz-floss/frequenz-sdk-python/pull/669
* Bump pydoclint from 0.3.2 to 0.3.3 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/710
* Implement the PowerManagingActor by shsms in https://github.com/frequenz-floss/frequenz-sdk-python/pull/692
* Prepare release notes for v1.0.0-rc2 by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/723


**Full Changelog**: https://github.com/frequenz-floss/frequenz-sdk-python/compare/v1.0.0-rc1...v1.0.0-rc2

1.0.0rc1

Frequenz Python SDK Release Notes

Summary

The most notable changes are the addition of `microgrid.grid` and `microgrid.frequency()`, as the many improvements to the `MovingWindow`.

Upgrading

- The battery pool metric methods no longer return `None` when no batteries are available. Instead, the value of the `Sample` or `PowerMetric` is set to `None`.

- The power distribution `Result` is now a union of all different types of results rather than a base class. This means we can now also use `match` to check for result types instead of only using `isinstance()`. The following example shows how `Result` can be used for matching power distribution results:

python
from typing import assert_never
result: Result = some_operation()
match result:
case Success() as success:
print(f"Power request was successful: {success}")
case PartialFailure() as partial_failure:
print(f"Power request was partially successful: {partial_failure}")
case OutOfBounds() as out_of_bounds:
print(f"Power request was out of bounds: {out_of_bounds}")
case Error() as error:
print(f"Power request failed: {error}")
case _ as unreachable:
assert_never(unreachable)


- `Averager` was removed from `FormulaEngine`.

New Features

- Calling `microgrid.initialize()` now also initializes the microgrid's grid connection point as a singleton object of a newly added type `Grid`. This object can be obtained by calling `microgrid.grid.get()`. This object exposes the max current that can course through the grid connection point, which is useful for the power distribution algorithm. The max current is provided by the Microgrid API, and can be obtained by calling `microgrid.grid.get().fuse.max_current`.

Note that a microgrid is allowed to have zero or one grid connection point. Microgrids configured as islands will have zero grid connection points, and microgrids configured as grid-connected will have one grid connection point.

- A new method `microgrid.frequeny()` was added to allow easy access to the current frequency of the grid.

- A new class `Fuse` has been added to represent fuses. This class has a member variable `max_current` which represents the maximum current that can course through the fuse. If the current flowing through a fuse is greater than this limit, then the fuse will break the circuit.

- `MovingWindow` and `OrderedRingBuffer`:
- NaN values are treated as missing when gaps are determined in the `OrderedRingBuffer`.
- Provide access to `capacity` (maximum number of elements) in `MovingWindow`.
- Methods to retrieve oldest and newest timestamp of valid samples are added to both.
- `MovingWindow` exposes underlying buffers `window` method.
- `len(window)` and `len(buffer)` should be replaced with `window.count_valid()` and `buffer.count_valid()`, respectively.
- `OrderedRingBuffer.window`:
- By default returns a copy.
- Can also return a view if the window contains `None` values and if `force_copy` is set to `True`.

- Now when printing `FormulaEngine` for debugging purposes the the formula will be shown in infix notation, which should be easier to read.

- The CI now runs cross-arch tests on `arm64` architectures.

- The `min` and `max` functions in the `FormulaEngine` are now public. Note that the same functions have been public in the builder.

Bug Fixes

- `OrderedRingBuffer.window`:
- Fixed `force_copy` option for specific case.
- Removed buggy enforcement of copies when None values in queried window.
- Fixed behavior for start equals end case.


What's Changed
* Clear release notes by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/617
* Initialize a `Grid` object with a given `Fuse` limit by tiyash-basu-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/610
* Upgrade to repo-config v0.6.1 by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/620
* Bump polars from 0.18.15 to 0.19.1 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/626
* Bump the optional group with 4 updates by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/634
* Bump types-setuptools from 68.1.0.0 to 68.1.0.1 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/635
* Don't return `None` from battery pool methods by stefan-brus-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/612
* Clarify documentation of BatteryPool soc and capacity methods by stefan-brus-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/637
* Document class and module attributes by daniel-zullo-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/618
* Add microgrid.frequency() by Marenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/579
* Treat NaN as gap in ring buffer by cwasicki in https://github.com/frequenz-floss/frequenz-sdk-python/pull/641
* Replace obsolete types by daniel-zullo-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/644
* Move "fake_time" fixture to conftest.py by stefan-brus-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/639
* Improve formula formatting to use infix notation by christianparpart in https://github.com/frequenz-floss/frequenz-sdk-python/pull/613
* Merge v0.25.1 by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/652
* Add a glossary to the documentation by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/647
* Add capacity, oldest and newest timestamp to moving window by cwasicki in https://github.com/frequenz-floss/frequenz-sdk-python/pull/598
* [ci] Add tests for non-native architectures by tiyash-basu-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/622
* Bump actions/checkout from 3 to 4 by dependabot in https://github.com/frequenz-floss/frequenz-sdk-python/pull/655
* ci: Fix publishing of documentation on push by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/657
* Add a job to join the `nox` matrix jobs by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/661
* Add more formula tests for min and max functions by matthias-wende-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/623
* Fixes on copy behavior in ring buffer window method by cwasicki in https://github.com/frequenz-floss/frequenz-sdk-python/pull/638
* Drop formula step Averager by christianparpart in https://github.com/frequenz-floss/frequenz-sdk-python/pull/645
* Refactor power distribution Result by daniel-zullo-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/659
* Adjust the glossary to 80 columns by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/666
* Replace len magic with count_valid method in ring buffer and moving window by cwasicki in https://github.com/frequenz-floss/frequenz-sdk-python/pull/664
* Prepare release notes for the 1.0.0-rc1 release by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/674

New Contributors
* stefan-brus-frequenz made their first contribution in https://github.com/frequenz-floss/frequenz-sdk-python/pull/612

**Full Changelog**: https://github.com/frequenz-floss/frequenz-sdk-python/compare/v0.25.1...v1.0.0-rc1

0.25.2

Frequenz Python SDK Release Notes

Bug Fixes

- The resampler now properly handles sending zero values.

A bug made the resampler interpret zero values as `None` when generating new samples, so if the result of the resampling is zero, the resampler would just produce `None` values.


What's Changed
* Reset release notes by matthias-wende-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/653
* Fix the resampler handling of output zeros by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/812


**Full Changelog**: https://github.com/frequenz-floss/frequenz-sdk-python/compare/v0.25.1...v0.25.2

0.25.1

Frequenz Python SDK Release Notes

Bug Fixes

- Fix the **API Reference** link in the documentation website navigation bar.

- Fix the consumer power formula


What's Changed
* Fix mkdocs navigation bar API link by llucax in https://github.com/frequenz-floss/frequenz-sdk-python/pull/642
* Fix consumer power formula by matthias-wende-frequenz in https://github.com/frequenz-floss/frequenz-sdk-python/pull/649


**Full Changelog**: https://github.com/frequenz-floss/frequenz-sdk-python/compare/v0.25.0...v0.25.1

Page 4 of 8

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.