code: def test_no_test_data():
      """Tests if test evaluation is skipped when there are no test data"""
      df = pd.DataFrame(
          {
              cst.TIME_COL: [
                  "2018-01-01",
                  datetime.datetime(2018, 1, 2),
                  "2018-01-03",
                  "2018-01-04",
              ],
              cst.ACTUAL_COL: [1, 2, np.nan, np.nan],
              cst.PREDICTED_COL: [1, 4, 1, 2],
              cst.PREDICTED_LOWER_COL: [1, 1, 1, 1],
              cst.PREDICTED_UPPER_COL: [4, 5, 4, 4],
              cst.NULL_PREDICTED_COL: [1.5, 1.5, 1.5, 1.5],
          }
      )
      forecast = UnivariateForecast(
          df, train_end_date=datetime.datetime(2018, 1, 2)
      )
      assert forecast.test_na_count == 2
      assert forecast.train_evaluation is not None
      assert forecast.test_evaluation is None
  
imports: import datetime
  import math
  import sys
  from functools import partial
  import numpy
  import pandas
  import pytest
  from pandas.testing import assert_frame_equal
  from pandas.testing import assert_series_equal
  from sklearn.pipeline import Pipeline
  from greykite.common import constants
  from greykite.common.evaluation import ElementwiseEvaluationMetricEnum
  from greykite.common.evaluation import EvaluationMetricEnum
  from greykite.common.python_utils import assert_equal
  from greykite.common.testing_utils import gen_sliced_df
  from greykite.framework.input.univariate_time_series import UnivariateTimeSeries
  from greykite.framework.output.univariate_forecast import UnivariateForecast
  from greykite.framework.pipeline.utils import get_forecast
  from greykite.sklearn.estimator.prophet_estimator import ProphetEstimator
  from greykite.sklearn.estimator.silverkite_estimator import SilverkiteEstimator
  from greykite.sklearn.estimator.testing_utils import params_component_breakdowns
label_desc: Use image node_id 9 for calling a global function with example usage: test_no_test_data() without return types