code: def parameters_changed(self):
          
          # using the warped X to update
          self.X = self.transform_data(self.X_untransformed)
          super(InputWarpedGP, self).parameters_changed()
          # the gradient of log likelihood w.r.t. input AFTER warping is a product of dL_dK and dK_dX
          dL_dX = self.kern.gradients_X(self.grad_dict['dL_dK'], self.X)
          self.warping_function.update_grads(self.X_untransformed, dL_dX)
docs: Update the gradients of parameters for warping function
  
          This method is called when having new values of parameters for warping function, kernels
          and other parameters in a normal GP