class_docstr: A data interface for public data. This class is an interface to DiCE explainers
  and contains methods to transform user-fed raw data into the format a DiCE explainer
  requires, and vice versa.
docstr: Gets the min/max value of features in normalized or de-normalized
  form. Assumes that all features are already encoded to numerical form
  such that the number of features remains the same.
  
  # TODO needs work adhere to label encoded max and to support permitted_range for
  both continuous and discrete when provided in _generate_counterfactuals.
code: def get_valid_feature_range(
      self, feature_range_input, normalized=True
  ):
      """Gets the min/max value of features in normalized or de-normalized
      form. Assumes that all features are already encoded to numerical form
      such that the number of features remains the same.
  
      # TODO needs work adhere to label encoded max and to support permitted_range for
      both continuous and discrete when provided in _generate_counterfactuals.
      """
      feature_range = {}
  
      for _, feature_name in enumerate(self.feature_names):
          feature_range[feature_name] = []
          if feature_name in self.continuous_feature_names:
              max_value = self.data_df[feature_name].max()
              min_value = self.data_df[feature_name].min()
  
              if normalized:
                  minx = (
                      feature_range_input[feature_name][0] - min_value
                  ) / (max_value - min_value)
                  maxx = (
                      feature_range_input[feature_name][1] - min_value
                  ) / (max_value - min_value)
              else:
                  minx = feature_range_input[feature_name][0]
                  maxx = feature_range_input[feature_name][1]
              feature_range[feature_name].append(minx)
              feature_range[feature_name].append(maxx)
          else:
              # categorical features
              feature_range[feature_name] = feature_range_input[
                  feature_name
              ]
      return feature_range
  
imports: import logging
  from collections import defaultdict
  import numpy
  import pandas
  from raiutils.exceptions import UserConfigValidationException
  from sklearn.preprocessing import LabelEncoder
  from dice_ml.data_interfaces.base_data_interface import _BaseData
  from dice_ml.utils.exception import SystemException
label_desc: Use image node_id 11 for calling the PublicData obj's underlying member method code with example usage: obj.get_valid_feature_range(feature_range_input, normalized) and returns: feature_range