|
| 1 | +************************* |
| 2 | +v3.2.0 (X, X, 2026) |
| 3 | +************************* |
| 4 | + |
| 5 | +Enhancements |
| 6 | +------------ |
| 7 | +* :py:func:`~rdtools.degradation.degradation_year_on_year` has new parameter ``label=`` |
| 8 | + to return the calc_info['YoY_values'] as either right labeled (default), left or |
| 9 | + center labeled. (:issue:`459`) |
| 10 | +* :py:func:`~rdtools.plotting.degradation_timeseries_plot` now defaults to rolling |
| 11 | + median, centered on the timestamp (pd.rolling(center=True)), and reduces |
| 12 | + ``min_periods`` from ``rolling_days//2`` to ``rolling_days//4``. |
| 13 | + (:issue:`455`) |
| 14 | +* :py:func:`~rdtools.degradation.degradation_year_on_year` has new parameter ``multi_yoy`` |
| 15 | + (default False) to trigger multiple YoY degradation calculations similar to Hugo Quest et |
| 16 | + al 2023. In this mode, instead of a series of 1-year duration slopes, 2-year, 3-year etc |
| 17 | + slopes are also included. calc_info['YoY_values'] returns a non-monotonic index |
| 18 | + in this mode due to multiple overlapping annual slopes. (:issue:`394`) |
| 19 | +* :py:func:`~rdtools.plotting.degradation_timeseries_plot` now supports ``multi_yoy=True`` |
| 20 | + data by resampling overlapping YoY values to their mean. A warning is issued when this |
| 21 | + resampling occurs. (:issue:`394`) |
| 22 | +* :py:func:`~rdtools.plotting.degradation_summary_plots` ``detailed=True`` mode now |
| 23 | + properly handles points used odd vs even number of times (not just 0, 1, 2). |
| 24 | + (:issue:`394`) |
| 25 | +* :py:func:`~rdtools.degradation.degradation_year_on_year` now returns |
| 26 | + ``calc_info['YoY_times']`` DataFrame with ``dt_right``, ``dt_center``, and ``dt_left`` |
| 27 | + columns for each YoY slope. (:issue:`459`) |
| 28 | +* Added new example notebook ``docs/Multi-year_on_year_example.ipynb`` demonstrating the |
| 29 | + ``label='center'`` and ``multi_yoy=True`` features of |
| 30 | + :py:func:`~rdtools.degradation.degradation_year_on_year`. (:issue:`394`) |
| 31 | +* :py:meth:`~rdtools.analysis_chains.TrendAnalysis.sensor_analysis` and |
| 32 | + :py:meth:`~rdtools.analysis_chains.TrendAnalysis.clearsky_analysis` now |
| 33 | + explicitly default ``yoy_kwargs={"label": "right"}``. |
| 34 | + |
| 35 | +Bug Fixes |
| 36 | +--------- |
| 37 | +* Fixed ``usage_of_points`` calculation in :py:func:`~rdtools.degradation.degradation_year_on_year` |
| 38 | + to properly handle ``multi_yoy=True`` mode with overlapping slopes. (:issue:`394`) |
| 39 | + |
| 40 | + |
| 41 | +Maintenance |
| 42 | +----------- |
| 43 | +* Added ``_avg_timestamp_old_Pandas`` helper function for pandas <2.0 compatibility |
| 44 | + when calculating center labels. |
| 45 | +* Fixed nbval workflow command syntax (``--sanitize-with`` to ``--nbval-sanitize-with``). |
| 46 | +* Improved pandas 3.0 compatibility with datetime resolution handling. |
| 47 | +* Updated ``docs/notebook_requirements.txt`` to require ``numexpr>=2.10.2`` and |
| 48 | + ``tabulate>=0.9.0`` to satisfy pandas' optional dependency minimum versions and |
| 49 | + avoid related warnings/errors. |
| 50 | +* Removed trailing semicolons in example notebooks. |
| 51 | +* Added ``.coverage.*`` pattern to ``.gitignore``. |
| 52 | + |
| 53 | +Testing |
| 54 | +------- |
| 55 | +* Added tests for error handling paths in :py:mod:`~rdtools.analysis_chains`: |
| 56 | + ``filter_params`` and ``filter_params_aggregated`` setter validation, |
| 57 | + ``clearsky_rescale_index_mismatch``, ``poa_filter_without_poa``, |
| 58 | + ``tcell_filter_without_temperature``, ``hour_angle_filter_without_location``, |
| 59 | + ``clearsky_filter_without_poa``, and ``degradation_timeseries_plot_invalid_case``. |
| 60 | +* Added tests for error handling paths in :py:mod:`~rdtools.degradation`: |
| 61 | + ``classical_decomposition`` missing/irregular data, ``year_on_year`` circular block |
| 62 | + validation, no valid pairs error, and ``_mk_test`` edge cases (no trend, ties, |
| 63 | + decreasing). |
| 64 | +* Added test for ``multi_yoy=True`` parameter in ``degradation_year_on_year``. |
| 65 | +* Added tests for :py:func:`~rdtools.plotting.degradation_timeseries_plot` |
| 66 | + covering ``label='center'``, ``label='left'``, multi-YoY duplicate index |
| 67 | + handling, and ``KeyError`` path. |
| 68 | +* Set matplotlib backend to ``Agg`` in test ``conftest.py`` to avoid tkinter issues. |
| 69 | + |
| 70 | + |
| 71 | +Contributors |
| 72 | +------------ |
| 73 | +* Chris Deline (:ghuser:`cdeline`) |
| 74 | +* Martin Springer (:ghuser:`martin-springer`) |
| 75 | + |
0 commit comments