2424
2525import numpy as np
2626import numpy .typing as npt
27+ from numba import jit , float64
2728
2829def linear_recession_analysis (
2930 series : npt .ArrayLike ,
@@ -67,8 +68,9 @@ def maximum_baseflow_analysis(
6768 """
6869 return 0.5
6970
71+ @jit (float64 [:](float64 [:], float64 , float64 ), nogil = True )
7072def separate_baseflow (
71- series : npt .ArrayLike ,
73+ series : npt .NDArray ,
7274 recession_constant : float ,
7375 maximum_baseflow_index : float
7476) -> npt .NDArray :
@@ -77,8 +79,8 @@ def separate_baseflow(
7779
7880 Parameters
7981 ----------
80- series: array-like , required
81- An array of streamflow values. Assumes first value in series is baseflow.
82+ series: array-type , required
83+ A numpy array of streamflow values. Assumes first value in series is baseflow.
8284 recession_constant: float, required
8385 Linear reservoir recession constant, a, from Eckhardt (2005, 2008).
8486 maximum_baseflow_index: float
@@ -96,10 +98,10 @@ def separate_baseflow(
9698
9799 # Instantiate baseflow series
98100 # Assume first value is baseflow
99- streamflow = np .asarray (series )
100- baseflow = np .empty (len (series ))
101- baseflow [0 ] = streamflow [0 ]
102- for i in range (1 , len (series )):
103- baseflow [i ] = A * baseflow [i - 1 ] + B * streamflow [i ]
101+ baseflow = np .empty (series .size )
102+ baseflow [0 ] = series [0 ]
104103
105- return np .minimum (baseflow , streamflow )
104+ # Apply filter and return result
105+ for i in range (1 , len (series )):
106+ baseflow [i ] = min (series [i ], A * baseflow [i - 1 ] + B * series [i ])
107+ return baseflow
0 commit comments