code: def to_hashable(obj, **kwargs):
      """Format the input `obj` to be hashable
  
      Parameters
      ----------
      obj: Object
          Object to convert to a hashable format
      **kwargs: Dict
          Extra kwargs to supply to :func:`key_handler.hash_callable`
  
      Returns
      -------
      obj: object
          Hashable object"""
      if callable(obj):
          return hash_callable(obj, **kwargs)
      if isinstance(obj, (tuple, list)):
          return tuple((to_hashable(_, **kwargs) for _ in obj))
      if isinstance(obj, dict):
          return tuple(
              sorted(
                  (_k, to_hashable(_v, **kwargs))
                  for _k, _v in obj.items()
              )
          )
      if isinstance(obj, (set, frozenset)):
          return tuple(sorted(to_hashable(_, **kwargs) for _ in obj))
      if isinstance(obj, pd.DataFrame):
          # `pd.util.hash_pandas_object` ignores columns, so return them as well
          return (
              tuple(pd.util.hash_pandas_object(obj, index=True)),
              tuple(obj.columns),
          )
  
      return obj
  
file_path: hyperparameter_hunter/hyperparameter_hunter/keys/hashing.py
imports: import base64
  from functools import partial
  import hashlib
  from inspect import getsourcelines
  import pandas
  import re
label_desc: Use image node_id 2 for calling a global function with example usage: to_hashable(obj) and returns: obj, hash_callable, tuple, tuple, tuple, tuple,  tuple