code: def load_policy_and_env(fpath, itr="last", deterministic=False):
      """
      Load a policy from save, whether it's TF or PyTorch, along with RL env.
  
      Not exceptionally future-proof, but it will suffice for basic uses of the
      Spinning Up implementations.
  
      Checks to see if there's a tf1_save folder. If yes, assumes the model
      is tensorflow and loads it that way. Otherwise, loads as if there's a
      PyTorch save.
      """
  
      # determine if tf save or pytorch save
      if any(["tf1_save" in x for x in os.listdir(fpath)]):
          backend = "tf1"
      else:
          backend = "pytorch"
  
      # handle which epoch to load from
      if itr == "last":
          # check filenames for epoch (AKA iteration) numbers, find maximum value
  
          if backend == "tf1":
              saves = [
                  int(x[8:])
                  for x in os.listdir(fpath)
                  if "tf1_save" in x and len(x) > 8
              ]
  
          elif backend == "pytorch":
              pytsave_path = osp.join(fpath, "pyt_save")
              # Each file in this folder has naming convention 'modelXX.pt', where
              # 'XX' is either an integer or empty string. Empty string case
              # corresponds to len(x)==8, hence that case is excluded.
              saves = [
                  int(x.split(".")[0][5:])
                  for x in os.listdir(pytsave_path)
                  if len(x) > 8 and "model" in x
              ]
  
          itr = "%d" % max(saves) if len(saves) > 0 else ""
  
      else:
          assert isinstance(
              itr, int
          ), "Bad value provided for itr (needs to be int or 'last')."
          itr = "%d" % itr
  
      # load the get_action function
      if backend == "tf1":
          get_action = load_tf_policy(fpath, itr, deterministic)
      else:
          get_action = load_pytorch_policy(fpath, itr, deterministic)
  
      # try to load environment from save
      # (sometimes this will fail because the environment could not be pickled)
      try:
          state = joblib.load(osp.join(fpath, "vars" + itr + ".pkl"))
          env = state["env"]
      except:
          env = None
  
      return env, get_action
  
file_path: spinningup/spinup/utils/test_policy.py
imports: import time
  import joblib
  import os
  import os.path
  import tensorflow
  import torch
  from spinup import EpochLogger
  from spinup.utils.logx import restore_tf_graph
label_desc: Use image node_id 1 for calling a global function with example usage: load_policy_and_env(fpath, itr, deterministic) and returns: env,  get_action