code: def __init__(
      self,
      cv_type: Union[CVType, str, None],
      date_column: Optional[pd.Series],
      random_state=None,
      shuffle_kfold: Optional[bool] = None,
  ):
      if cv_type is None:
          self.cv_type = CVType.k_fold
      elif isinstance(cv_type, str):
          self.cv_type = CVType(cv_type)
      elif isinstance(cv_type, CVType):
          self.cv_type = cv_type
      else:
          raise Exception(
              f"Unexpected type of cv_type: {type(cv_type)}"
          )
  
      self.shuffle_kfold: Optional[bool] = shuffle_kfold
      self.test_size = 0.2
      self.n_folds = 5
      if (
          self.cv_type == CVType.k_fold
          or self.cv_type == CVType.group_k_fold
      ) and self.shuffle_kfold is None:
          self.shuffle_kfold = date_column is None or is_constant(
              date_column
          )
      if self.shuffle_kfold:
          self.random_state = random_state
      else:
          self.random_state = None
  
file_path: upgini/src/upgini/utils/cv_utils.py
imports: from typing import Any, Dict, Optional, Union
  import pandas
  from sklearn.model_selection import BaseCrossValidator, KFold, TimeSeriesSplit, GroupKFold, GroupShuffleSplit
  from upgini.metadata import CVType
  from upgini.utils.blocked_time_series import BlockedTimeSeriesSplit
label_desc: Use image node_id 1 to create a new CVConfig object  with example: obj = CVConfig(cv_type, date_column, random_state, shuffle_kfold)