Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/ecalc_cli/infrastructure/file_resource_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@

from libecalc.common.errors.exceptions import EcalcError, InvalidHeaderException
from libecalc.common.logger import logger
from libecalc.domain.resource import Resource
from libecalc.infrastructure.file_io import read_facility_resource, read_timeseries_resource
from libecalc.presentation.yaml.resource import Resource
from libecalc.presentation.yaml.resource_service import ResourceService
from libecalc.presentation.yaml.yaml_entities import MemoryResource
from libecalc.presentation.yaml.yaml_models.yaml_model import YamlValidator
Expand Down
26 changes: 26 additions & 0 deletions src/libecalc/common/utils/nan_handling.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import numpy as np
import pandas as pd
from numpy.typing import NDArray


def clean_nan_values(values: NDArray[np.float64]) -> NDArray[np.float64]:
"""
Handles NaN values in a consistent and predictable way by:

1. Forward filling all NaN values using the last valid observation.
2. Replacing any remaining NaNs (e.g., if the first value was NaN) with 0.0.

This function is immutable – it does not modify the input array in-place.

Args:
values: A NumPy array of float64 values (may contain NaNs).

Returns:
A cleaned NumPy array with no NaN values.
"""

# Step 1: Forward-fill NaNs using pandas
filled = pd.Series(values).ffill().to_numpy()

result = np.nan_to_num(filled) # By convention, we change remaining NaN-values to 0 regardless of extrapolation
return result
13 changes: 0 additions & 13 deletions src/libecalc/common/utils/rates.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,19 +70,6 @@ def to_calendar_day(stream_day_rates: NDArray[np.float64], regularity: list[floa
"""
return stream_day_rates * np.asarray(regularity, dtype=np.float64)

@staticmethod
def forward_fill_nan_values(rates: NDArray[np.float64]) -> NDArray[np.float64]:
"""
Forward fill Nan-values

Args:
rates: Production rates (possibly containing NaN values)

Returns:
The production rates where all NaN values are replaced with the last value that was not NaN
"""
return np.array(pd.Series(rates).ffill())

@staticmethod
def to_volumes(
rates: list[float] | list[TimeSeriesValue] | NDArray[np.float64],
Expand Down

This file was deleted.

Loading