code: def check_ts_prediction_df(
      self, df: pd.DataFrame, horizon: int, orders: List[str]
  ):
      for idx, row in df.iterrows():
          lower = [row["lower"]] if horizon == 1 else row["lower"]
          upper = [row["upper"]] if horizon == 1 else row["upper"]
          prediction = (
              [row["prediction"]] if horizon == 1 else row["prediction"]
          )
  
          assert len(prediction) == horizon
  
          for oby in orders:
              row[f"order_{oby}"] = (
                  [row[f"order_{oby}"]]
                  if horizon == 1
                  else row[f"order_{oby}"]
              )
              assert len(row[f"order_{oby}"]) == horizon
              assert not any(pd.isna(row[f"order_{oby}"]))
  
          for t in range(horizon):
              assert lower[t] <= prediction[t] <= upper[t]
  
imports: import random
  from datetime import datetime
  from datetime import timedelta
  import unittest
  import numpy
  import pandas
  from typing import List
  from scipy import signal
  from sklearn.metrics import r2_score
  from lightwood.api.types import ProblemDefinition
  from tests.utils.timing import train_and_check_time_aim
  from sktime.forecasting.base import ForecastingHorizon
  from sktime.forecasting.statsforecast import StatsForecastAutoARIMA
  from dataprep_ml.splitters import stratify
  from lightwood.api.high_level import json_ai_from_problem, code_from_json_ai, predictor_from_code, predictor_from_problem, predictor_from_json_ai
  from lightwood.mixer.sktime import SkTime
label_desc: Use image node_id 1 for calling the TestTimeseries obj's underlying member method code with example usage: obj.check_ts_prediction_df(df, horizon, orders) without return types