class_docstr: Config class for `BOCPD` (Bayesian Online Change Point Detection).
class_docstr_tok: ["Config","class","for","`","BOCPD","`","(","Bayesian","Online","Change","Point","Detection",")","."]
code: def change_kind(self, change_kind: Union[str, ChangeKind]):
      if isinstance(change_kind, str):
          valid = set(ChangeKind.__members__.keys())
          if change_kind not in valid:
              raise KeyError(
                  f"{change_kind} is not a valid change kind. Valid change kinds are: {valid}"
              )
          change_kind = ChangeKind[change_kind]
      self._change_kind = change_kind
  
imports: import bisect
  import copy
  from enum import Enum
  import logging
  from typing import List, Tuple, Union
  import warnings
  import numpy
  import pandas
  import scipy.sparse
  from scipy.special import logsumexp
  from scipy.stats import norm
  from tqdm import tqdm
  from merlion.models.anomaly.base import NoCalibrationDetectorConfig, DetectorBase
  from merlion.models.anomaly.forecast_based.base import ForecastingDetectorBase
  from merlion.models.forecast.base import ForecasterConfig
  from merlion.plot import Figure
  from merlion.post_process.threshold import AggregateAlarms
  from merlion.utils.conj_priors import ConjPrior, MVNormInvWishart, BayesianMVLinReg
  from merlion.utils.time_series import TimeSeries, UnivariateTimeSeries, to_pd_datetime
label_desc: Use image node_id 3 for calling the BOCPDConfig obj's underlying member method code with example usage: obj.change_kind(change_kind) without return types