class_docstr: Generate sinus time series that ramp up and reach a certain amplitude, and
  level and have additional spikes on each sunday.
  
  TODO: This could be converted to a RecipeDataset to avoid code duplication.
class_docstr_tok: ["Generate","sinus","time","series","that","ramp","up","and","reach","a","certain","amplitude",",","and","level","and","have","additional","spikes","on","each","sunday",".","TODO",":","This","could","be","converted","to","a","RecipeDataset","to","avoid","code","duplication","."]
code: def _get_start(self, index: int, my_random: random.Random) -> str:
      if (
          self.is_out_of_bounds_date and index == 0
      ):  # Add edge case of dates out of normal bounds past date
          start_y, start_m, start_d = (
              1690,
              2,
              7,
          )  # Pandas doesn't allot before 1650
          start_h, start_min = 18, 36
      elif (
          self.is_out_of_bounds_date and index == self.num_series - 1
      ):  # Add edge case of dates out of normal bounds future date
          start_y, start_m, start_d = (
              2030,
              6,
              3,
          )  # Pandas doesn't allot before 1650
          start_h, start_min = 18, 36
      # assume that only 100 * percentage_unique_timestamps of timestamps are
      # unique
      elif my_random.random() < self.percentage_unique_timestamps:
          start_y = my_random.randint(2000, 2018)
          start_m = my_random.randint(1, 12)
          start_d = my_random.randint(1, 28)
          start_h = my_random.randint(0, 23)
          start_min = my_random.randint(0, 59)
      else:
          start_y, start_m, start_d = 2013, 11, 28
          start_h, start_min = 18, 36
  
      if self.freq_str == "M":
          return "%04.d-%02.d" % (start_y, start_m)
      elif self.freq_str in ["W", "D"]:
          return "%04.d-%02.d-%02.d" % (start_y, start_m, start_d)
      elif self.freq_str == "H":
          return "%04.d-%02.d-%02.d %02.d:00:00" % (
              start_y,
              start_m,
              start_d,
              start_h,
          )
      else:
          return "%04.d-%02.d-%02.d %02.d:%02.d:00" % (
              start_y,
              start_m,
              start_d,
              start_h,
              start_min,
          )
  
imports: import math
  import random
  from abc import abstractmethod
  from typing import Callable, Dict, List, NamedTuple, Optional, Tuple, Union, cast
  import numpy
  import pandas
  from pandas.tseries.frequencies import to_offset
  from pandas.tseries.offsets import BaseOffset, Week
  from gluonts.dataset.artificial.recipe import BinaryHolidays, BinaryMarkovChain, Constant, ForEachCat, Lag, LinearTrend, RandomCat, RandomGaussian, Stack, generate, take_as_list
  from gluonts.dataset.common import BasicFeatureInfo, CategoricalFeatureInfo, DataEntry, Dataset, ListDataset, MetaData, TrainDatasets
  from gluonts.dataset.field_names import FieldName
  from gluonts.dataset.stat import DatasetStatistics, calculate_dataset_statistics
label_desc: Use image node_id 4 for calling the ComplexSeasonalTimeSeries obj's underlying member method code with example usage: obj._get_start(index, my_random) and returns: unknown, unknown, unknown, unknown