docs: def update_variogram_model(self, variogram_model, variogram_parameters=None,
                                 variogram_function=None, nlags=6, weight=False,
                                 anisotropy_scaling=1., anisotropy_angle=0.):
          """Allows user to update variogram type and/or
          variogram model parameters.
  
          Parameters
          ----------
          variogram_model : str
              May be any of the variogram models listed above.
              May also be 'custom', in which case variogram_parameters and
              variogram_function must be specified.
          variogram_parameters : list or dict, optional
              List or dict of variogram model parameters, as explained above.
              If not provided, a best fit model will be calculated as
              described above.
          variogram_function : callable, optional
              A callable function that must be provided if variogram_model is
              specified as 'custom'. See above for more information.
          nlags : int, optional
              Number of averaging bins for the semivariogram. Defualt is 6.
          weight : boolean, optional
              Flag that specifies if semivariance at smaller lags should be
              weighted more heavily when automatically calculating the
              variogram model. See above for more information. True indicates
              that weights will be applied. Default is False.
          anisotropy_scaling : float, optional
              Scalar stretching value to take into account anisotropy.
              Default is 1 (effectively no stretching).
              Scaling is applied in the y-direction.
          anisotropy_angle : float, optional
              CCW angle (in degrees) by which to rotate coordinate system in
              order to take into account anisotropy. Default is 0 (no rotation).
          """
  
          if anisotropy_scaling != self.anisotropy_scaling or \
             anisotropy_angle != self.anisotropy_angle:
              if self.verbose:
                  print("Adjusting data for anisotropy...")
              self.anisotropy_scaling = anisotropy_scaling
              self.anisotropy_angle = anisotropy_angle
              self.X_ADJUSTED, self.Y_ADJUSTED =\
                  _adjust_for_anisotropy(np.vstack((self.X_ORIG, self.Y_ORIG)).T,
                                         [self.XCENTER, self.YCENTER],
                                         [self.anisotropy_scaling],
                                         [self.anisotropy_angle]).T
  
          self.variogram_model = variogram_model
          if self.variogram_model not in self.variogram_dict.keys() and self.variogram_model != 'custom':
              raise ValueError("Specified variogram model '%s' is not supported." % variogram_model)
          elif self.variogram_model == 'custom':
              if variogram_function is None or not callable(variogram_function):
                  raise ValueError("Must specify callable function for "
                                   "custom variogram model.")
              else:
                  self.variogram_function = variogram_function
          else:
              self.variogram_function = self.variogram_dict[self.variogram_model]
          if self.verbose:
              print("Updating variogram mode...")
  
          # See note above about the 'use_psill' kwarg...
          vp_temp = _make_variogram_parameter_list(self.variogram_model,
                                                   variogram_parameters)
          self.lags, self.semivariance, self.variogram_model_parameters = \
              _initialize_variogram_model(np.vstack((self.X_ADJUSTED,
                                                     self.Y_ADJUSTED)).T,
                                          self.Z, self.variogram_model, vp_temp,
                                          self.variogram_function, nlags,
                                          weight, 'euclidean')
  
          if self.verbose:
              if self.variogram_model == 'linear':
                  print("Using '%s' Variogram Model" % 'linear')
                  print("Slope:", self.variogram_model_parameters[0])
                  print("Nugget:", self.variogram_model_parameters[1], '\n')
              elif self.variogram_model == 'power':
                  print("Using '%s' Variogram Model" % 'power')
                  print("Scale:", self.variogram_model_parameters[0])
                  print("Exponent:", self.variogram_model_parameters[1])
                  print("Nugget:", self.variogram_model_parameters[2], '\n')
              elif self.variogram_model == 'custom':
                  print("Using Custom Variogram Model")
              else:
                  print("Using '%s' Variogram Model" % self.variogram_model)
                  print("Partial Sill:", self.variogram_model_parameters[0])
                  print("Full Sill:", self.variogram_model_parameters[0] +
                        self.variogram_model_parameters[2])
                  print("Range:", self.variogram_model_parameters[1])
                  print("Nugget:", self.variogram_model_parameters[2], '\n')
          if self.enable_plotting:
              self.display_variogram_model()
  
          if self.verbose:
              print("Calculating statistics on variogram model fit...")
          self.delta, self.sigma, self.epsilon = \
              _find_statistics(np.vstack((self.X_ADJUSTED, self.Y_ADJUSTED)).T,
                               self.Z, self.variogram_function,
                               self.variogram_model_parameters,
                               'euclidean')
          self.Q1 = core.calcQ1(self.epsilon)
          self.Q2 = core.calcQ2(self.epsilon)
          self.cR = core.calc_cR(self.Q2, self.sigma)
          if self.verbose:
              print("Q1 =", self.Q1)
              print("Q2 =", self.Q2)
              print("cR =", self.cR, '\n')