class_docstr: Stores information about the variable (covariate) passed into the 'contrast'
  or 'wrt' argument for comparisons and slopes. Depending on the effect type
  ('slopes' or 'comparisons'), the values attribute is either: (1) the values
  passed with the 'contrast' or 'wrt' argument, or (2) default are values
  computed by calling 'set_default_variable_values()'.
  
  'VariableInfo' is used to create 'slopes' and 'comparisons' data as well as
  computing the estimates for the 'slopes' and 'comparisons' effects.
  
  Parameters
  ----------
  model : Model
      The bambi Model object.
  variable : str, dict, or list
      The variable of interest passed by the user. `contrast` if 'comparisons'
      and `wrt` if 'slopes'.
  kind : str
      The effect type. Either 'slopes' or 'comparisons'.
  grid : bool or None, optional
      Whether a grid of pairwise values should be used as the data for generating
      predictions. Defaults to False.
  eps : float or None, optional
      The epsilon value used to add to the variable of interest's values when
      computing the 'slopes' effect. Defualts to None.
  user_passed : bool, optional
      Whether the user passed their own values for the variable of interest.
      Defaults to False.
docstr: Returns default values for the variable of interest ('contrast' and 'wrt')
  for the 'slopes' and 'comparisons' effects depending on the dtype of the
  variable of interest, effect type, and if self.grid is True. The scenarios
  are described below:
  
  If numeric dtype and kind is 'comparisons', the returned value is a
  centered difference based on the mean of `variable'.
  
  If numeric dtype and kind is 'slopes', the returned value is an epsilon
  difference based on the mean of `variable'.
  
  If categoric dtype the returned value is the unique levels of `variable'.
docstr_tok: ["Returns","default","values","for","the","variable","of","interest","(","'contrast","'","and","'wrt","'",")","for","the","'slopes","'","and","'comparisons","'","effects","depending","on","the","dtype","of","the","variable","of","interest",",","effect","type",",","and","if","self.grid","is","True",".","The","scenarios","are","described","below",":","If","numeric","dtype","and","kind","is","'comparisons","'",",","the","returned","value","is","a","centered","difference","based","on","the","mean","of","`","variable","'",".","If","numeric","dtype","and","kind","is","'slopes","'",",","the","returned","value","is","an","epsilon","difference","based","on","the","mean","of","`","variable","'",".","If","categoric","dtype","the","returned","value","is","the","unique","levels","of","`","variable","'","."]
code: def set_default_variable_values(self) -> np.ndarray:
      """
      Returns default values for the variable of interest ('contrast' and 'wrt')
      for the 'slopes' and 'comparisons' effects depending on the dtype of the
      variable of interest, effect type, and if self.grid is True. The scenarios
      are described below:
  
      If numeric dtype and kind is 'comparisons', the returned value is a
      centered difference based on the mean of `variable'.
  
      If numeric dtype and kind is 'slopes', the returned value is an epsilon
      difference based on the mean of `variable'.
  
      If categoric dtype the returned value is the unique levels of `variable'.
      """
      terms = get_model_terms(self.model)
      # get default values for each variable in the model
      for term in terms.values():
          if hasattr(term, "components"):
              for component in term.components:
                  # if the component is a function call, use the argument names
                  if isinstance(component, Call):
                      names = [arg.name for arg in component.call.args]
                  else:
                      names = [component.name]
                  for name in names:
                      if name == self.name:
                          predictor_data = self.model.data[name]
                          dtype = predictor_data.dtype
                          if component.kind == "numeric":
                              if (
                                  self.grid
                                  or self.kind == "comparisons"
                              ):
                                  predictor_data = np.mean(
                                      predictor_data
                                  )
                              if self.kind == "slopes":
                                  values = self.epsilon_difference(
                                      predictor_data, self.eps
                                  )
                              if self.kind == "comparisons":
                                  values = self.centered_difference(
                                      predictor_data, self.eps, dtype
                                  )
                          elif component.kind == "categoric":
                              values = np.unique(predictor_data)
  
      return values
  
imports: from dataclasses import dataclass, field
  from typing import Union
  import numpy
  from formulae.terms.call import Call
  import pandas
  import xarray
  from bambi import Model
  from bambi.utils import listify
  from bambi.interpret.logs import log_interpret_defaults
label_desc: Use image node_id 4 for calling the VariableInfo obj's underlying member method code with example usage: obj.set_default_variable_values() and returns: values