code: def col_values_pairs(self, df, features):
      df_features = df[features]
      df_describe = df_features.describe()
  
      """
          which features are categorical?
          find their feature value pairs
          """
  
      numnerical_col = df_describe.columns
      categorical_col = list(set(features) - set(numnerical_col))
  
      col_type_dict = {}
      col_value_dict = {}
      for f in numnerical_col:
          col_type_dict[f] = "slider"
          col_value_dict[f] = self.get_min_max_featurs(df_describe, f)
  
      for f in categorical_col:
          categ, col_type = self.all_categories(df, f)
  
          col_type_dict[f] = col_type
          col_value_dict[f] = categ
  
      return col_value_dict, col_type_dict
  
file_path: explainx/lib/modules/local_explanation/apps/what_if.py
imports: from explainx.lib.imports import *
  from explainx.lib.feature_impact import *
  from explainx.lib.feature_importance import *
  import dash_daq
label_desc: Use image node_id 2 for calling the what_if obj's underlying member method code with example usage: obj.col_values_pairs(df, features) and returns: col_value_dict,  col_type_dict