class_docstr: Tests `create_lagged_prediction_data` function defined in `darts.utils.data.tabularization`. There
  are broadly two 'groups' of tests defined in this module:
      1. 'Generated Test Cases': these test that `create_lagged_prediction_data` produces the same outputs
      as a simplified implementation of the 'time intersection' feature generation method (see
      `darts.utils.data.tabularization` for further details). For these tests, the 'correct answer' is not
      directly specified; instead, it is generated from a set of input parameters using the set of simplified
      functions. The rationale behind this approach is that it allows for many different combinations of input
      values to be effortlessly tested. The drawback of this, however, is that the correctness of these tests
      assumes that the simplified functions have been implemented correctly - if this isn't the case, then these
      tests are not to be trusted. In saying this, these simplified functions are significantly easier to
      understand and debug than the `create_lagged_prediction_data` function they're helping to test.
      2. 'Specified Test Cases': these test that `create_lagged_prediction_data` returns an exactly specified
      output; these specified outputs are *not* 'generated' by another function. Although these 'specified'
      test cases tend to be simpler and less extensive than the 'generated' test cases, their correctness does
      not assume the correct implementation of any other function.
class_docstr_tok: ["Tests","`","create_lagged_prediction_data","`","function","defined","in","`","darts.utils.data.tabularization","`",".","There","are","broadly","two","'groups","'","of","tests","defined","in","this","module",":","1",".","'Generated","Test","Cases","'",":","these","test","that","`","create_lagged_prediction_data","`","produces","the","same","outputs","as","a","simplified","implementation","of","the","'time","intersection","'","feature","generation","method","(","see","`","darts.utils.data.tabularization","`","for","further","details",")",".","For","these","tests",",","the","'correct","answer","'","is","not","directly","specified",";","instead",",","it","is","generated","from","a","set","of","input","parameters","using","the","set","of","simplified","functions",".","The","rationale","behind","this","approach","is","that","it","allows","for","many","different","combinations","of","input","values","to","be","effortlessly","tested",".","The","drawback","of","this",",","however",",","is","that","the","correctness","of","these","tests","assumes","that","the","simplified","functions","have","been","implemented","correctly","-","if","this","is","n't","the","case",",","then","these","tests","are","not","to","be","trusted",".","In","saying","this",",","these","simplified","functions","are","significantly","easier","to","understand","and","debug","than","the","`","create_lagged_prediction_data","`","function","they","'re","helping","to","test",".","2",".","'Specified","Test","Cases","'",":","these","test","that","`","create_lagged_prediction_data","`","returns","an","exactly","specified","output",";","these","specified","outputs","are","*","not","*","'generated","'","by","another","function",".","Although","these","'specified'","test","cases","tend","to","be","simpler","and","less","extensive","than","the","'generated","'","test","cases",",","their","correctness","does","not","assume","the","correct","implementation","of","any","other","function","."]
docstr: Helper function that returns the times shared by all of the specified series that can be used
  to create features and labels. This is performed by using the helper functions
  `get_feature_times_target_or_past` and `get_feature_times_future` (both defined below) to extract
  the feature times from the target series, past covariates, and future covariates respectively, and
  then intersecting these features times with one another. A series is considered to be 'specified'
  if its corresponding lag (e.g. `lags` for `target`, or `lags_future` for `future`) is not `None`.
  If requested, the last `max_samples_per_ts` times are taken.
  
  This function is basically a simplified implementation of `get_feature_times` in `tabularization.py`
  that only works for `is_training = False`.
docstr_tok: ["Helper","function","that","returns","the","times","shared","by","all","of","the","specified","series","that","can","be","used","to","create","features","and","labels",".","This","is","performed","by","using","the","helper","functions","`","get_feature_times_target_or_past","`","and","`","get_feature_times_future","`","(","both","defined","below",")","to","extract","the","feature","times","from","the","target","series",",","past","covariates",",","and","future","covariates","respectively",",","and","then","intersecting","these","features","times","with","one","another",".","A","series","is","considered","to","be","'specified'","if","its","corresponding","lag","(","e.g",".","`","lags","`","for","`","target","`",",","or","`","lags_future","`","for","`","future","`",")","is","not","`","None","`",".","If","requested",",","the","last","`","max_samples_per_ts","`","times","are","taken",".","This","function","is","basically","a","simplified","implementation","of","`","get_feature_times","`","in","`","tabularization.py","`","that","only","works","for","`","is_training","=","False","`","."]
code: def get_feature_times(
      target: TimeSeries,
      past: TimeSeries,
      future: TimeSeries,
      lags: Optional[int],
      lags_past: Optional[int],
      lags_future: Optional[int],
      max_samples_per_ts: Optional[int],
  ) -> pd.Index:
      """
      Helper function that returns the times shared by all of the specified series that can be used
      to create features and labels. This is performed by using the helper functions
      `get_feature_times_target_or_past` and `get_feature_times_future` (both defined below) to extract
      the feature times from the target series, past covariates, and future covariates respectively, and
      then intersecting these features times with one another. A series is considered to be 'specified'
      if its corresponding lag (e.g. `lags` for `target`, or `lags_future` for `future`) is not `None`.
      If requested, the last `max_samples_per_ts` times are taken.
  
      This function is basically a simplified implementation of `get_feature_times` in `tabularization.py`
      that only works for `is_training = False`.
      """
      # `times` is initialized inside loop:
      times = None
      all_series = [target, past, future]
      all_lags = [lags, lags_past, lags_future]
      for i, (series_i, lags_i) in enumerate(zip(all_series, all_lags)):
          # If `lags` not specified, ignore series:
          lags_specified = lags_i is not None
          is_target_or_past = i < 2
          if lags_specified:
              if is_target_or_past:
                  times_i = TestCreateLaggedPredictionData.get_feature_times_target_or_past(
                      series_i, lags_i
                  )
              else:
                  times_i = TestCreateLaggedPredictionData.get_feature_times_future(
                      series_i, lags_i
                  )
          else:
              times_i = None
          if times_i is not None:
              # Initialise `times` if this is first specified series:
              if times is None:
                  times = times_i
              # Intersect `times` with `times_i` if `times` already initialized:
              else:
                  times = times.intersection(times_i)
      # Take most recent `max_samples_per_ts` samples if requested:
      if (max_samples_per_ts is not None) and (
          len(times) > max_samples_per_ts
      ):
          times = times[-max_samples_per_ts:]
      return times
  
imports: import warnings
  from itertools import product
  from typing import Optional, Sequence
  import numpy
  import pandas
  import pytest
  from darts import TimeSeries
  from darts import concatenate
  from darts.logging import get_logger, raise_if_not, raise_log
  from darts.utils.data.tabularization import create_lagged_prediction_data
  from darts.utils.timeseries_generation import linear_timeseries
label_desc: Use image node_id 2 for calling the TestCreateLaggedPredictionData obj's underlying member method code with example usage: obj.get_feature_times(target, past, future, lags, lags_past, lags_future, max_samples_per_ts) and returns: times