Skip to content

Commit

Permalink
Bugfix 329 negative bcmse (#344)
Browse files Browse the repository at this point in the history
* Issue #329 return 0 if negative BCMSE value is calculated

* Issue #329 add test for calculate_bcmse() in the sl1l2_statistics module

* Issue #392 added test_sl1l2.py to the list of pytests to run
  • Loading branch information
bikegeek authored Jan 4, 2024
1 parent 444b336 commit f87fa10
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 0 deletions.
1 change: 1 addition & 0 deletions .github/workflows/unit_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ jobs:
pytest test_utils.py
pytest test_validate_mv_python.py
pytest test_future_warnings.py
pytest test_sl1l2.py
coverage run -m pytest test_agg_eclv.py test_agg_stats_and_boot.py test_agg_stats_with_groups.py test_calc_difficulty_index.py test_convert_lon_indices.py test_event_equalize.py test_event_equalize_against_values.py test_lon_360_to_180.py test_statistics.py test_tost_paired.py test_utils.py test_future_warnings.py
coverage html
Expand Down
3 changes: 3 additions & 0 deletions metcalcpy/util/sl1l2_statistics.py
Original file line number Diff line number Diff line change
Expand Up @@ -524,10 +524,13 @@ def calculate_bcmse(input_data, columns_names, aggregation=False):
"""
warnings.filterwarnings('error')
try:

mse = calculate_mse(input_data, columns_names, aggregation)
me = calculate_me(input_data, columns_names, aggregation)
result = mse - me ** 2
result = round_half_up(result, PRECISION)
if result < 0:
return 0.
except (TypeError, Warning):
result = None
warnings.filterwarnings('ignore')
Expand Down
22 changes: 22 additions & 0 deletions test/test_sl1l2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import numpy as np
import pytest

from metcalcpy.util import sl1l2_statistics as sl1l2

def test_calculate_bcmse():
# Test that negative BCMSE values are no longer returned.
input_data_list = []

# These data produce negative BCMSE values. Test that the modified code no longer returns negative values
# for the BCMSE.
input_data_list.append(np.array([[4.37978400e+01, 4.70115800e+01, 1.91825108e+03, 2.21008843e+03, 2.05900571e+03, 1.00000000e+00]]))
input_data_list.append(np.array([[8.66233900e+01, 4.83037900e+01, 7.50361146e+03, 2.33325660e+03, 4.18423840e+03, 1.00000000e+00]]))
input_data_list.append(np.array([[3.68089000e+01, 1.64253370e+02, 1.35489535e+03, 2.69791703e+04, 6.04598647e+03, 1.00000000e+00]]))
columns_names = np.array(['fbar', 'obar', 'ffbar', 'oobar', 'fobar', 'total'], dtype='<U5')

for input in input_data_list:
result = sl1l2.calculate_bcmse(input, columns_names, aggregation=False)
assert result >= 0.



0 comments on commit f87fa10

Please sign in to comment.