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.
code: def get_features_range(
      self, permitted_range_input=None, features_dict=None
  ):
      ranges = {}
      # Getting default ranges based on the dataset
      for feature_name in self.continuous_feature_names:
          ranges[feature_name] = [
              self.data_df[feature_name].min(),
              self.data_df[feature_name].max(),
          ]
      for feature_name in self.categorical_feature_names:
          ranges[feature_name] = (
              self.data_df[feature_name].unique().tolist()
          )
      feature_ranges_orig = ranges.copy()
      # Overwriting the ranges for a feature if input provided
      if permitted_range_input is not None:
          for (
              feature_name,
              feature_range,
          ) in permitted_range_input.items():
              ranges[feature_name] = feature_range
      return ranges, feature_ranges_orig
  
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 6 for calling the PublicData obj's underlying member method code with example usage: obj.get_features_range(permitted_range_input, features_dict) and returns: ranges,  feature_ranges_orig