natr_values = get_natr_values(natr_period)
 
         start = max(0, pos - lookback_period)
-        end = min(pos + 1, len(natr_values))
+        end = min(pos + 1, n)
         if start >= end:
             return (min_factor + max_factor) / 2
 
         natr_pos = natr_values[pos]
 
         start = max(0, pos - lookback_period)
-        end = min(pos + 1, len(natr_values))
+        end = min(pos + 1, n)
         if start >= end:
             return min_value
         natr_min = np.min(natr_values[start:end])
         natr_ratio=label_natr_ratio,
     )
 
-    if len(pivots_values) < 2:
+    n = len(pivots_values)
+    if n < 2:
         return -float("inf"), -float("inf")
 
     scaled_natr_label_period_candles = (
         ta.NATR(df, timeperiod=label_period_candles) * label_natr_ratio
     )
 
-    return scaled_natr_label_period_candles.median(), len(pivots_values)
+    return scaled_natr_label_period_candles.median(), n
 
 
 def smoothed_max(series: pd.Series, temperature=1.0) -> float:
 
     if period % 2 != 0:
         raise ValueError("period must be even")
 
+    n = len(df)
+
     highs = df["high"]
     lows = df["low"]
     closes = df["close"]
         closes = zero_lag_series(closes, period=period)
 
     fd = pd.Series(np.nan, index=closes.index)
-    for i in range(period, len(closes)):
+    for i in range(period, n):
         window_highs = highs.iloc[i - period : i]
         window_lows = lows.iloc[i - period : i]
         fd.iloc[i] = _fractal_dimension(window_highs.values, window_lows.values, period)
 
     frama = pd.Series(np.nan, index=closes.index)
     frama.iloc[period - 1] = closes.iloc[:period].mean()
-    for i in range(period, len(closes)):
+    for i in range(period, n):
         if pd.isna(frama.iloc[i - 1]) or pd.isna(alpha.iloc[i]):
             continue
         frama.iloc[i] = (
     """
     if period <= 0:
         raise ValueError("period must be greater than 0")
-    if len(series) < period:
+    n = len(series)
+    if n < period:
         return pd.Series(index=series.index, dtype=float)
 
     if zero_lag:
     smma = pd.Series(np.nan, index=series.index)
     smma.iloc[period - 1] = series.iloc[:period].mean()
 
-    for i in range(period, len(series)):
+    for i in range(period, n):
         smma.iloc[i] = (smma.iloc[i - 1] * (period - 1) + series.iloc[i]) / period
 
     if offset != 0:
         natr_values = get_natr_values(natr_period)
 
         start = max(0, pos - lookback_period)
-        end = min(pos + 1, len(natr_values))
+        end = min(pos + 1, n)
         if start >= end:
             return (min_factor + max_factor) / 2
 
         natr_pos = natr_values[pos]
 
         start = max(0, pos - lookback_period)
-        end = min(pos + 1, len(natr_values))
+        end = min(pos + 1, n)
         if start >= end:
             return min_value
         natr_min = np.min(natr_values[start:end])