class_docstr: Time varying squared exponential kernel.
  For more info see the TV-GP-UCB paper:
  http://proceedings.mlr.press/v51/bogunovic16.pdf
class_docstr_tok: ["Time","varying","squared","exponential","kernel",".","For","more","info","see","the","TV-GP-UCB","paper",":","http",":","\/\/proceedings.mlr.press\/v51\/bogunovic16.pdf"]
code: def update_gradients_full(self, dL_dK, X, X2):
      if X2 is None:
          X2 = np.copy(X)
      T1 = X[:, 0].reshape(-1, 1)
      T2 = X2[:, 0].reshape(-1, 1)
  
      X = X[:, 1:]
      X2 = X2[:, 1:]
      dist2 = np.square(euclidean_distances(X, X2)) / self.lengthscale
  
      dvar = np.exp(
          -np.square((euclidean_distances(X, X2)) / self.lengthscale)
      )
      dl = -(
          2
          * euclidean_distances(X, X2) ** 2
          * self.variance
          * np.exp(-dist2)
      ) * self.lengthscale ** (-2)
      n = pairwise_distances(T1, T2, "cityblock") / 2
      deps = -n * (1 - self.epsilon) ** (n - 1)
  
      self.variance.gradient = np.sum(dvar * dL_dK)
      self.lengthscale.gradient = np.sum(dl * dL_dK)
      self.epsilon.gradient = np.sum(deps * dL_dK)
  
file_path: orion/src/orion/algo/pbt/pb2_utils.py
imports: from copy import deepcopy
  import numpy
  from scipy.optimize import minimize
  from sklearn.metrics import euclidean_distances, pairwise_distances
  from orion.core.utils.module_import import ImportOptional
label_desc: Use image node_id 4 for calling the TVSquaredExp obj's underlying member method code with example usage: obj.update_gradients_full(dL_dK, X, X2) without return types