Releases: frequenz-floss/frequenz-sdk-python
v1.0.0-rc2
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 bypropose_{power/charge/discharge} - The
propose_*methods send power proposals to thePowerManagingActor, where it can be overridden by proposals from other actors. - They no longer have the
adjust_powerflag, because thePowerManagingActorwill always adjust power to fit within the available bounds.
- Original methods
-
BatteryPool's reporting methodspower_boundsis replaced bypower_status- The
power_statusmethod 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_indextoto_internal_indexto avoid confusion between the internal index and the external index. - Add
index_to_datetimemethod to convert external index to corresponding datetime. - Remove
__setitem__method to enforce usage of dedicatedupdatemethod only.
- Rename
-
In
OrderedRingBufferandMovingWindow:- Support for integer indices is added.
- Add
count_coveredmethod to count the number of elements covered by the used time range. - Add
fill_valueoption to window method to impute missing values. By default missing values are imputed withNaN.
-
Add
atmethod toMovingWindowto 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
PowerManagingActorimplementation
Bug Fixes
- Fix rendering of diagrams in the documentation.
- The
__getitem__magic of theMovingWindowis fixed to support the same functionality that thewindowmethod provides. - Fixes incorrect implementation of single element access in
__getitem__magic ofMovingWindow.
What's Changed
- Clear the release notes by @llucax in #675
- Bump the optional group with 9 updates by @dependabot in #683
- Bump docker/setup-buildx-action from 2 to 3 by @dependabot in #680
- Bump docker/setup-qemu-action from 2 to 3 by @dependabot in #681
- Bump docker/build-push-action from 4 to 5 by @dependabot in #682
- Add mkdocs-macros plugin by @llucax in #667
- docs: Add an introduction to actors by @llucax in #679
- mkdocs: Fix numbered code annotations by @llucax in #684
- Add getting started tutorial and tutorial section by @matthias-wende-frequenz in #656
- Remove setitem magic from ring buffer by @cwasicki in #670
- Allow using macros in docstrings by @llucax in #687
- Rename datetime_to_index to to_internal_index by @cwasicki in #686
- Fix mermaid diagrams custom renderer by @llucax in #690
- Update obsolete comment about networkx-stubs by @daniel-zullo-frequenz in #685
- Move Actors documentation to the
actormodule by @llucax in #688 - Don't use generics unnecessarily by @llucax in #698
- Improve Actors documentation by @llucax in #689
- Increment port in microgrid API client tests by @llucax in #699
- Support int indices and slice index behavior in ring buffer and moving window by @cwasicki in #668
- Fix single element access for moving window by @cwasicki in #672
- Rename
IntroductiontoUser Guideand moveTutorialsnext to it by @llucax in #701 - Bump types-pytz from 2023.3.1.0 to 2023.3.1.1 by @dependabot in #695
- Bump types-protobuf from 4.24.0.1 to 4.24.0.2 by @dependabot in #696
- Bump types-pyyaml from 6.0.12.11 to 6.0.12.12 by @dependabot in #694
- PowerDistributing: Add support for n:m relations in invs:bats by @Marenz in #660
- Fix bug in how failed batteries are tracked in PowerDistributor by @shsms in #705
- Update pydantic to v2.3 by @daniel-zullo-frequenz in #703
- Add option to impute missing values in window method for moving window by @cwasicki in #669
- Bump pydoclint from 0.3.2 to 0.3.3 by @dependabot in #710
- Implement the PowerManagingActor by @shsms in #692
- Prepare release notes for v1.0.0-rc2 by @llucax in #723
Full Changelog: v1.0.0-rc1...v1.0.0-rc2
v1.0.0-rc1
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
Nonewhen no batteries are available. Instead, the value of theSampleorPowerMetricis set toNone. -
The power distribution
Resultis now a union of all different types of results rather than a base class. This means we can now also usematchto check for result types instead of only usingisinstance(). The following example shows howResultcan be used for matching power distribution results: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)
-
Averagerwas removed fromFormulaEngine.
New Features
-
Calling
microgrid.initialize()now also initializes the microgrid's grid connection point as a singleton object of a newly added typeGrid. This object can be obtained by callingmicrogrid.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 callingmicrogrid.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
Fusehas been added to represent fuses. This class has a member variablemax_currentwhich 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. -
MovingWindowandOrderedRingBuffer:- NaN values are treated as missing when gaps are determined in the
OrderedRingBuffer. - Provide access to
capacity(maximum number of elements) inMovingWindow. - Methods to retrieve oldest and newest timestamp of valid samples are added to both.
MovingWindowexposes underlying bufferswindowmethod.len(window)andlen(buffer)should be replaced withwindow.count_valid()andbuffer.count_valid(), respectively.OrderedRingBuffer.window:- By default returns a copy.
- Can also return a view if the window contains
Nonevalues and ifforce_copyis set toTrue.
- NaN values are treated as missing when gaps are determined in the
-
Now when printing
FormulaEnginefor 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
arm64architectures. -
The
minandmaxfunctions in theFormulaEngineare now public. Note that the same functions have been public in the builder.
Bug Fixes
OrderedRingBuffer.window:- Fixed
force_copyoption for specific case. - Removed buggy enforcement of copies when None values in queried window.
- Fixed behavior for start equals end case.
- Fixed
What's Changed
- Clear release notes by @llucax in #617
- Initialize a
Gridobject with a givenFuselimit by @tiyash-basu-frequenz in #610 - Upgrade to repo-config v0.6.1 by @llucax in #620
- Bump polars from 0.18.15 to 0.19.1 by @dependabot in #626
- Bump the optional group with 4 updates by @dependabot in #634
- Bump types-setuptools from 68.1.0.0 to 68.1.0.1 by @dependabot in #635
- Don't return
Nonefrom battery pool methods by @stefan-brus-frequenz in #612 - Clarify documentation of BatteryPool soc and capacity methods by @stefan-brus-frequenz in #637
- Document class and module attributes by @daniel-zullo-frequenz in #618
- Add microgrid.frequency() by @Marenz in #579
- Treat NaN as gap in ring buffer by @cwasicki in #641
- Replace obsolete types by @daniel-zullo-frequenz in #644
- Move "fake_time" fixture to conftest.py by @stefan-brus-frequenz in #639
- Improve formula formatting to use infix notation by @christianparpart in #613
- Merge v0.25.1 by @llucax in #652
- Add a glossary to the documentation by @llucax in #647
- Add capacity, oldest and newest timestamp to moving window by @cwasicki in #598
- [ci] Add tests for non-native architectures by @tiyash-basu-frequenz in #622
- Bump actions/checkout from 3 to 4 by @dependabot in #655
- ci: Fix publishing of documentation on push by @llucax in #657
- Add a job to join the
noxmatrix jobs by @llucax in #661 - Add more formula tests for min and max functions by @matthias-wende-frequenz in #623
- Fixes on copy behavior in ring buffer window method by @cwasicki in #638
- Drop formula step Averager by @christianparpart in #645
- Refactor power distribution Result by @daniel-zullo-frequenz in #659
- Adjust the glossary to 80 columns by @llucax in #666
- Replace len magic with count_valid method in ring buffer and moving window by @cwasicki in #664
- Prepare release notes for the 1.0.0-rc1 release by @llucax in #674
New Contributors
- @stefan-brus-frequenz made their first contribution in #612
Full Changelog: v0.25.1...v1.0.0-rc1
v0.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 #642
- Fix consumer power formula by @matthias-wende-frequenz in #649
Full Changelog: v0.25.0...v0.25.1
v0.25.0
Frequenz Python SDK Release Notes
Summary
This release replaces the @actor decorator with a new Actor class.
Upgrading
-
The
frequenz.sdk.powerpackage contained the power distribution algorithm, which is for internal use in the sdk, and is no longer part of the public API. -
PowerDistributingActor's result typeOutOfBoundhas been renamed toOutOfBounds, and its member variableboundhas been renamed tobounds. -
The
@actordecorator was replaced by the newActorclass. The main differences between the new class and the old decorator are:- It doesn't start automatically,
start()needs to be called to start an actor (using thefrequenz.sdk.actor.run()function is recommended). - The method to implement the main logic was renamed from
run()to_run(), as it is not intended to be run externally. - Actors can have an optional
name(useful for debugging/logging purposes). - The actor will only be restarted if an unhandled
Exceptionis raised by_run(). It will not be restarted if the_run()method finishes normally. If an unhandledBaseExceptionis raised instead, it will be re-raised. For normal cancellation the_run()method should handleasyncio.CancelledErrorif the cancellation shouldn't be propagated (this is the same as with the decorator). - The
_stop()method is public (stop()) and willcancel()andawaitfor the task to finish, catching theasyncio.CancelledError. - The
join()method is renamed towait(), but they can also be awaited directly (await actor). - For deterministic cleanup, actors can now be used as
asynccontext managers.
Most actors can be migrated following these steps:
- Remove the decorator
- Add
Actoras a base class - Rename
run()to_run() - Forward the
nameargument (optional but recommended)
For example, this old actor:
from frequenz.sdk.actor import actor @actor class TheActor: def __init__(self, actor_args) -> None: # init code def run(self) -> None: # run code
Can be migrated as:
import asyncio from frequenz.sdk.actor import Actor class TheActor(Actor): def __init__(self, actor_args, *, name: str | None = None, ) -> None: super().__init__(name=name) # init code def _run(self) -> None: # run code
Then you can instantiate all your actors first and then run them using:
from frequenz.sdk.actor import run # Init code actor = TheActor() other_actor = OtherActor() # more setup await run(actor, other_actor) # Start and await for all the actors
- It doesn't start automatically,
-
The
MovingWindowis now aBackgroundService, so it needs to be started manually withwindow.start(). It is recommended to use it as anasynccontext manager if possible though:async with MovingWindow(...) as window: # The moving windows is started here use(window) # The moving window is stopped here
-
The base actors (
ConfigManagingActor,ComponentMetricsResamplingActor,DataSourcingActor,PowerDistributingActor) now inherit from the newActorclass, if you are using them directly, you need to start them manually withactor.start()and you might need to do some other adjustments. -
The
BatteryPool.power_distribution_resultsmethod has been enhanced to provide power distribution results in the form ofPowerobjects, replacing the previous use offloatvalues. -
In the
Requestclass:- The attribute
request_timeout_sechas been updated and is now namedrequest_timeoutand it is represented by atimedeltaobject rather than afloat. - The attribute
poweris now presented as aPowerobject, as opposed to afloat.
- The attribute
-
Within the
EVChargerPool.set_boundsmethod, the parametermax_ampshas been redefined asmax_current, and it is now represented using aCurrentobject instead of afloat. -
The argument
nones_are_zerosinFormulaEngineand related classes and methods is now a keyword-only argument.
New Features
-
Added
DFSto the component graph -
BackgroundService: This new abstract base class can be used to write other classes that runs one or more tasks in the background. It provides a consistent API to start and stop these services and also takes care of the handling of the background tasks. It can also work as anasynccontext manager, giving the service a deterministic lifetime and guaranteed cleanup.All classes spawning tasks that are expected to run for an indeterminate amount of time are likely good candidates to use this as a base class.
-
Actor: This new class inherits fromBackgroundServiceand it replaces the@actordecorator. -
Newly added
minandmaxfunctions for Formulas. They can be used as follows:formula1.min(formula2)
Bug Fixes
-
Fixes a bug in the ring buffer updating the end timestamp of gaps when they are outdated.
-
Properly handles PV configurations with no or only some meters before the PV component.
So far we only had configurations like this:
Meter -> Inverter -> PV. However the scenario withInverter -> PVis also possible and now handled correctly. -
Fix
consumer_power()not working certain configurations.In microgrids without consumers and no main meter, the formula would never return any values.
-
Fix
pv_powernot working in setups with 2 grid meters by using a new reliable function to search for components in the components graph -
Fix
consumer_powerandproducer_powersimilar topv_power -
Zero value requests received by the
PowerDistributingActorwill now always be accepted, even when there are non-zero exclusion bounds. -
Hold on to a reference to all streaming tasks in the microgrid API client, so they don't get garbage collected.
What's Changed
- Fix ring buffer gap cleanup code by @matthias-wende-frequenz in #578
- Amend deficit calculation in the power distributor by @daniel-zullo-frequenz in #577
- Clear release notes by @llucax in #574
- Bump types-protobuf from 4.23.0.3 to 4.24.0.0 by @dependabot in #576
- Bump mypy from 1.4.1 to 1.5.0 by @dependabot in #580
- Support PV configurations with no or only some meters by @Marenz in #584
- Bump mypy from 1.5.0 to 1.5.1 by @dependabot in #585
- Bump types-protobuf from 4.24.0.0 to 4.24.0.1 by @dependabot in #581
- Bump time-machine from 2.11.0 to 2.12.0 by @dependabot in #582
- Some very small fixes by @Marenz in #590
- Bump mkdocs-material from 9.1.21 to 9.2.1 by @dependabot in #592
- Fix
consumer_power()not working certain configurations. by @Marenz in #589 - Add depth first search for components by @matthias-wende-frequenz in #595
- [ci] Add test for installation in multiple architectures by @tiyash-basu-frequenz in #597
- Improve formula generators by @matthias-wende-frequenz in #599
- Forward zero power requests always to the microgrid API by @shsms in #591
- Implement BackgroundService and new Actor class by @llucax in #564
- Replace absolute imports with relative imports by @tiyash-basu-frequenz in #604
- Drop example to private PowerDistributor API by @christianparpart in #605
- Bump mkdocs-material from 9.2.1 to 9.2.5 by @dependabot in #608
- Improve consumer power formula by @matthias-wende-frequenz in #609
- Update high-level public interfaces to concrete types by @daniel-zullo-frequenz in #607
- Make nones_are_zeros a keyword-only parameter by @daniel-zullo-frequenz in #611
- Improve error message for incorrect component graphs by @tiyash-basu-frequenz in #602
- DataPipeline: Fix resampling/ds/power actors not started by @Marenz in #603
- Bump polars from 0.18.13 to 0.18.15 by @dependabot in #583
- Add module to easily create component graphs by @Marenz in #606
- Upgrade to repo-config v0.5.2 by @llucax in #587
- Store references to streaming tasks by @shsms in #615
- Add min and max operations to formula engine by @matthias-wende-frequenz in #561
New Contributors
- @tiyash-basu-frequenz made their first contribution in #597
Full Changelog: https://github.com/frequenz...
v0.16.4
Release Notes
Bug Fixes
- Hold on to a reference to all streaming tasks in the microgrid API client, so they don't get garbage collected.
What's Changed
Full Changelog: v0.16.3...v0.16.4
v0.24.0
Frequenz Python SDK Release Notes
Summary
Now the microgrid API v0.15.x is being used. The SDK can only connect to microgrids using this version of the API. Inclusion and exclusion bounds in the new API are now handled by the power distributor and battery pool.
Upgrading
-
Upgrade to microgrid API v0.15.1. If you're using any of the lower level microgrid interfaces, you will need to upgrade your code.
-
The argument
conf_fileof theConfigManagingActorconstructor was renamed toconfig_path. -
The
BatteryPool.power_boundsmethod now streams inclusion/exclusion bounds. The bounds are now represented byPowerobjects and notfloats.
New Features
-
The
ConfigManagingActorconstructor now can accept apathlib.Pathasconfig_pathtoo (before it accepted only astr). -
The
PowerDistributingActornow considers exclusion bounds, when finding an optimal distribution for power between batteries.
What's Changed
- Use
Timer.periodicin theResamplerby @jh2007github in #520 - Allow running release notes check in merge queues by @llucax in #566
- Clear release notes by @llucax in #560
- Update
frequenz-api-microgridto v0.15.1 by @shsms in #416 - Improvements to the
ConfigManagingActorby @llucax in #565 - Bump brettcannon/check-for-changed-files from 294a99714e0d350b5083472a293d41bc91804e68 to 4170644959a21843b31f1181f2a1761d65ef4791 by @dependabot in #567
- Bump types-protobuf from 4.23.0.2 to 4.23.0.3 by @dependabot in #568
- Bump polars from 0.18.11 to 0.18.12 by @dependabot in #569
- Stream exclusion bounds from the battery pool by @shsms in #537
- Bump polars from 0.18.12 to 0.18.13 by @dependabot in #570
- Add docs cross-linking to APIs by @llucax in #571
- Support exclusion bounds in power distributor by @shsms in #562
- Update release notes for the v0.24.0 release by @llucax in #573
Full Changelog: v0.23.0...v0.24.0
v0.23.0
Frequenz Python SDK Release Notes
Summary
This release ships many small improvements and bug fixes to Quantitys. It also depends on channels v0.16.0, so users must update the dependency too.
Upgrading
Channelshas been upgraded to version 0.16.0, for information on how to upgrade please read the [channels v0.16.0 release notes](visit https://github.com/frequenz-floss/frequenz-channels-python/releases/tag/v0.16.0).Quantityobjects are no longer hashable. This is because of the pitfalls of hashingfloatvalues.
New Features
-
Quantities
- Add support for the unary negative operator (negation of a quantity).
- Add
abs(). - Add a
isclose()method on quantities to compare them to other values of the same type. BecauseQuantitytypes are just wrappers aroundfloats, direct comparison might not always be desirable. - Add
zero()constructor (which returns a singleton) to easily get a zero value. - Add multiplication by
Percentagetypes. - Add a new quantity class
Frequencyfor frequency values. - Add a new quantity class
Temperaturefor temperature values.
-
FormulaEnginearithmetics now supports scalar multiplication withfloats and addition withQuantitys. -
Add a new
temperaturemethod for streaming average temperature values for the battery pool.
Bug Fixes
- Fix formatting issue for
Quantityobjects with zero values. - Fix formatting issue for
Quantitywhen the base value fulfillsmath.isinf()ormath.isnan(). - Fix clamping to 100% for the battery pool SoC scaling calculation.
- Fix indexing for empty
MovingWindows (now it properly raises anIndexError).
What's Changed
- Bump polars from 0.18.4 to 0.18.5 by @dependabot in #486
- Add installation instructions by @llucax in #487
- Updated float("NaN") to math.nan by @jh2007github in #484
- Bump polars from 0.18.5 to 0.18.6 by @dependabot in #491
- Add methods for sending individual mock component data messages in tests by @shsms in #483
- Clear release notes by @llucax in #493
- Migrate to repo-config by @llucax in #488
- Bump actions/labeler from 4.2.0 to 4.3.0 by @dependabot in #496
- Bump time-machine from 2.10.0 to 2.11.0 by @dependabot in #497
- Bump black from 23.3.0 to 23.7.0 by @dependabot in #498
- Fix formatting bug for zero value Quantities by @shsms in #505
- Add quantity class
Frequencyby @Marenz in #506 - Add documentation on how to receive power request results by @Marenz in #507
- Bump pytest-asyncio from 0.21.0 to 0.21.1 by @dependabot in #510
- Bump polars from 0.18.6 to 0.18.7 by @dependabot in #509
- Update to channels 0.16.x by @jh2007github in #490
- Bump sybil from 5.0.2 to 5.0.3 by @dependabot in #513
- Support negation of quantities by @Marenz in #515
- Support float.inf and float.nan in quantities by @Marenz in #514
- Add from_receiver method to FormulaEngine by @matthias-wende-frequenz in #489
- Add abs() support for quantities by @Marenz in #516
- Bump mkdocs-material from 9.1.18 to 9.1.19 by @dependabot in #521
- Bump polars from 0.18.7 to 0.18.8 by @dependabot in #526
- Add capability to multiply quantities with percentage by @Marenz in #512
- Implement dunder iadd, isub, imul methods for Quantity by @shsms in #527
- Bump types-protobuf from 4.23.0.1 to 4.23.0.2 by @dependabot in #528
- Add constant to FormulaEngine arithmetic by @matthias-wende-frequenz in #525
- Quantity improvements by @shsms in #533
- Add BatteryStatus tests to ensure it recovers automatically after issues by @shsms in #522
- Nice error message for empty buffer and new test case by @jh2007github in #517
- Bump pylint from 2.17.4 to 2.17.5 by @dependabot in #539
- Update to repo-config v0.4.0 by @llucax in #540
- Bump mkdocs-material from 9.1.19 to 9.1.21 by @dependabot in #549
- Bump polars from 0.18.8 to 0.18.9 by @dependabot in #553
- Bump polars from 0.18.9 to 0.18.11 by @dependabot in #554
- Add zero() constructor for Quantities by @llucax in #535
- Temperature streaming from the BatteryPool by @shsms in #552
- Add BatteryPool.temperature and quantity Temperature by @christianparpart in #485
- Update battery pool SoC calculation by @matthias-wende-frequenz in #557
- Add CI check that RELEASE_NOTES.md was updated by @Marenz in #544
- Prepare for release v0.23.0 by @llucax in #559
New Contributors
- @jh2007github made their first contribution in #484
Full Changelog: v0.22.0...v0.23.0
v0.22.1
Release Notes
Bug Fixes
- Fix formatting issue for
Quantityobjects with zero values.
What's Changed
Full Changelog: v0.22.0...v0.22.1
v0.22.0
Release Notes
Summary
New Quantity types! These types can have units (power, current, voltage, etc.) and are type- and unit-safe in the sense that users can't accidentally sum a power with a voltage, or a power in kW with a power in W.
Upgrading
-
Sampleobjects no longer holdfloats, but ratherQuantityor one of its subclasses, likePower,Current,Energy, etc. based on the type of values being streamed.sample: Sample[Power] = await battery_pool.power.new_receiver().receive() power: float = sample.value.as_watts()
-
BatteryPool.socnow streams values of typeSample[Quantity], andBatteryPool.capacitynow streams values of typeSample[Energy].battery_pool = microgrid.battery_pool() soc_sample: Sample[Quantity] = await battery_pool.soc.new_receiver().receive() soc: float = soc_sample.value.base_value capacity_sample: Sample[Energy] = await battery_pool.capacity.new_receiver().receive() capacity: float = soc_sample.value.as_watt_hours()
-
MicrogridApiClient.set_powerno longer returns aprotobuf.Emptyresult, but aNone. This won't affect you unless you are using the low level APIs of the SDK.
New Features
-
The logical meter has a new method that returns producer power, that is the sum of all energy producers.
-
Quantitytypes (Power,Current,Energy,Voltage) for providing type- and unit-safety when dealing with physical quantities.
Bug Fixes
-
Two bugs in the ring buffer which is used by the
MovingWindowclass were fixed:len(buffer)was not considering potentially existing gaps (areas without elements) in the buffer.- A off-by-one error in the gap calculation logic was fixed that recorded a gap when there was none if an element with a future timestamp was added that would create a gap of exactly 1.
-
A formula engine lifetime issue, when creating higher order formula receivers without holding on to a reference to the engine, was fixed.
What's Changed
- Clear release notes by @leandro-lucarella-frequenz in #423
- Bump polars from 0.18.0 to 0.18.2 by @dependabot in #432
- Bump pytest from 7.3.1 to 7.3.2 by @dependabot in #431
- Add more unit tests for PeriodicFeatureExtractor by @cwasicki in #375
- Enhance battery pool documentation by @matthias-wende-frequenz in #425
- Fix seconds in MovingWindow doc example by @cwasicki in #437
- Add
--diffas a default argument forisortby @shsms in #438 - Bump mkdocs-material from 9.1.15 to 9.1.16 by @dependabot in #439
- Add producer power formula by @matthias-wende-frequenz in #444
- Bump polars from 0.18.2 to 0.18.3 by @dependabot in #448
- Bump pytest-mock from 3.10.0 to 3.11.1 by @dependabot in #440
- Bump time-machine from 2.9.0 to 2.10.0 by @dependabot in #447
- Add Quantity types and update formulas to produce typed Samples by @shsms in #422
- Bump mypy from 1.3.0 to 1.4.0 by @dependabot in #458
- Remove example programs for internal components by @shsms in #453
- Expose only usable SoC and Capacity through the BatteryPool by @shsms in #459
- Bump polars from 0.18.3 to 0.18.4 by @dependabot in #464
- Bump pytest from 7.3.2 to 7.4.0 by @dependabot in #463
- Bump mkdocs-material from 9.1.16 to 9.1.17 by @dependabot in #461
- Bump mypy from 1.4.0 to 1.4.1 by @dependabot in #462
- Fix ring buffer len by @Marenz in #445
- Disable default constructor in specialized
Quantitytypes by @shsms in #465 - A
Percentagequantity by @shsms in #470 - Bump actions/labeler from 4.0.4 to 4.2.0 by @dependabot in #471
- Fix broken reference to
ResamplingFunctionin documentation by @Marenz in #472 - Limit pydantic to v1 by @shsms in #474
- Remove unused
JUNCTIONandLOADcomponent categories by @shsms in #467 - Fix release notes and add a summary by @llucax in #476
- Bump mkdocs-material from 9.1.17 to 9.1.18 by @dependabot in #481
- Store a reference to the engine in receiver objects by @shsms in #478
New Contributors
Full Changelog: v0.21.1...v0.22.0
v0.16.2
Release Notes
Bug Fixes
- Ping
pypanticversion to< 2.
What's Changed
Full Changelog: v0.16.1...v0.16.2