code: def read_pickle(path, compression="infer"):
      """
      Load pickled pandas object (or any object) from file.
  
      .. warning::
  
         Loading pickled data received from untrusted sources can be
         unsafe. See `here <https://docs.python.org/3/library/pickle.html>`__.
  
      Parameters
      ----------
      path : str
          File path where the pickled object will be loaded.
      compression : {'infer', 'gzip', 'bz2', 'zip', 'xz', None}, default 'infer'
          For on-the-fly decompression of on-disk data. If 'infer', then use
          gzip, bz2, xz or zip if path ends in '.gz', '.bz2', '.xz',
          or '.zip' respectively, and no decompression otherwise.
          Set to None for no decompression.
  
          .. versionadded:: 0.20.0
  
      Returns
      -------
      unpickled : same type as object stored in file
  
      See Also
      --------
      DataFrame.to_pickle : Pickle (serialize) DataFrame object to file.
      Series.to_pickle : Pickle (serialize) Series object to file.
      read_hdf : Read HDF5 file into a DataFrame.
      read_sql : Read SQL query or database table into a DataFrame.
      read_parquet : Load a parquet object, returning a DataFrame.
  
      Examples
      --------
      >>> original_df = pd.DataFrame({"foo": range(5), "bar": range(5, 10)})
      >>> original_df
         foo  bar
      0    0    5
      1    1    6
      2    2    7
      3    3    8
      4    4    9
      >>> pd.to_pickle(original_df, "./dummy.pkl")
  
      >>> unpickled_df = pd.read_pickle("./dummy.pkl")
      >>> unpickled_df
         foo  bar
      0    0    5
      1    1    6
      2    2    7
      3    3    8
      4    4    9
  
      >>> import os
      >>> os.remove("./dummy.pkl")
      """
      path = _stringify_path(path)
  
      def read_wrapper(func):
          # wrapper file handle open/close operation
          f, fh = _get_handle(
              path, "rb", compression=compression, is_text=False
          )
          try:
              return func(f)
          finally:
              for _f in fh:
                  _f.close()
  
      def try_read(path, encoding=None):
          # try with cPickle
          # try with current pickle, if we have a Type Error then
          # try with the compat pickle to handle subclass changes
          # pass encoding only if its not None as py2 doesn't handle
          # the param
  
          # cpickle
          # GH 6899
          try:
              with warnings.catch_warnings(record=True):
                  # We want to silence any warnings about, e.g. moved modules.
                  warnings.simplefilter("ignore", Warning)
                  return read_wrapper(lambda f: pkl.load(f))
          except Exception:  # noqa: E722
              # reg/patched pickle
              # compat not used in pandas/compat/pickle_compat.py::load
              # TODO: remove except block OR modify pc.load to use compat
              try:
                  return read_wrapper(
                      lambda f: pc.load(
                          f, encoding=encoding, compat=False
                      )
                  )
              # compat pickle
              except Exception:  # noqa: E722
                  return read_wrapper(
                      lambda f: pc.load(
                          f, encoding=encoding, compat=True
                      )
                  )
  
      try:
          return try_read(path)
      except Exception:  # noqa: E722
          if PY3:
              return try_read(path, encoding="latin1")
          raise
  
file_path: catboost/contrib/python/pandas/py2/pandas/io/pickle.py
imports: import warnings
  import numpy
  from numpy.lib.format import read_array, write_array
  from pandas.compat import PY3, BytesIO, cPickle, pickle_compat
  from pandas.io.common import _get_handle, _stringify_path
label_desc: Use image node_id 2 for calling a global function with example usage: read_pickle(path, compression) and returns: try_read, func, read_wrapper, try_read, read_wrapper, read_wrapper