class_docstr: Reader object that loads experiences from JSON file chunks.
  
  The input files will be read from in random order.
class_docstr_tok: ["Reader","object","that","loads","experiences","from","JSON","file","chunks",".","The","input","files","will","be","read","from","in","random","order","."]
code: def _try_open_file(self, path):
      if urlparse(path).scheme not in [""] + WINDOWS_DRIVES:
          if smart_open is None:
              raise ValueError(
                  "You must install the `smart_open` module to read "
                  "from URIs like {}".format(path)
              )
          ctx = smart_open
      else:
          # Allow shortcut for home directory ("~/" -> env[HOME]).
          if path.startswith("~/"):
              path = os.path.join(os.environ.get("HOME", ""), path[2:])
  
          # If path doesn't exist, try to interpret is as relative to the
          # rllib directory (located ../../ from this very module).
          path_orig = path
          if not os.path.exists(path):
              path = os.path.join(Path(__file__).parent.parent, path)
          if not os.path.exists(path):
              raise FileNotFoundError(
                  f"Offline file {path_orig} not found!"
              )
  
          # Unzip files, if necessary and re-point to extracted json file.
          if re.search("\\.zip$", path):
              with zipfile.ZipFile(path, "r") as zip_ref:
                  zip_ref.extractall(Path(path).parent)
              path = re.sub("\\.zip$", ".json", path)
              assert os.path.exists(path)
          ctx = open
      file = ctx(path, "r")
      return file
  
imports: import glob
  import json
  import logging
  import math
  import numpy
  import os
  from pathlib import Path
  import random
  import re
  import tree
  from typing import List, Optional, TYPE_CHECKING, Union
  from urllib.parse import urlparse
  import zipfile
  from ray.rllib.offline.input_reader import InputReader
  from ray.rllib.offline.io_context import IOContext
  from ray.rllib.policy.policy import Policy
  from ray.rllib.policy.sample_batch import DEFAULT_POLICY_ID, MultiAgentBatch, SampleBatch, concat_samples, convert_ma_batch_to_sample_batch
  from ray.rllib.utils.annotations import override, PublicAPI, DeveloperAPI
  from ray.rllib.utils.compression import unpack_if_needed
  from ray.rllib.utils.spaces.space_utils import clip_action, normalize_action
  from ray.rllib.utils.typing import Any, FileType, SampleBatchType
label_desc: Use image node_id 5 for calling the JsonReader obj's underlying member method code with example usage: obj._try_open_file(path) and returns: file