class_docstr: The ChangePoints kernel defines a fixed number of change-points along a 1d
  input space where different kernels govern different parts of the space.
  
  The kernel is by multiplication and addition of the base kernels with
  sigmoid functions (σ). A single change-point kernel is defined as::
  
      K₁(x, x') * (1 - σ(x)) * (1 - σ(x')) + K₂(x, x') * σ(x) * σ(x')
  
  where K₁ is deactivated around the change-point and K₂ is activated. The
  single change-point version can be found in :cite:t:`lloyd2014`. Each sigmoid
  is a logistic function defined as::
  
      σ(x) = 1 / (1 + exp{-s(x - x₀)})
  
  parameterized by location "x₀" and steepness "s".
  
  The key reference is :cite:t:`lloyd2014`.
code: def _set_kernels(self, kernels: Sequence[Kernel]) -> None:
      # it is not clear how to flatten out nested change-points
      self.kernels = list(kernels)
  
file_path: GPflow/gpflow/kernels/changepoints.py
imports: from typing import Optional, Sequence
  import tensorflow
  from check_shapes import check_shape
  from check_shapes import check_shapes, inherit_check_shapes
  from ..base import Parameter, TensorType
  from ..utilities import positive
  from .base import Combination, Kernel
label_desc: Use image node_id 2 for calling the ChangePoints obj's underlying member method code with example usage: obj._set_kernels(kernels) without return types