code: def plot_results(*, results: dict, output: str, config: dict):
      eager_throughputs = results["eager_throughputs"]
      compiled_throughputs = results["compiled_throughputs"]
      batch_size = config["batch_size"]
  
      upper_limit = max(
          np.concatenate([eager_throughputs, compiled_throughputs])
      )
  
      fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 3))
      axes[0].plot(eager_throughputs)
      axes[0].set_title(
          f"Eager num_iters / sec, batch size {batch_size}"
      )
      axes[0].set_ylim(0, upper_limit)
      axes[1].plot(compiled_throughputs)
      axes[1].set_title(
          f"Compile num_iters / sec, batch size {batch_size}"
      )
      axes[1].set_ylim(0, upper_limit)
      fig.tight_layout()
      plt.savefig(output / "throughputs.png")
      plt.clf()
  
file_path: ray/python/ray/rllib/benchmarks/torch_compile/run_inference_bm.py
imports: import argparse
  import matplotlib.pyplot
  import gymnasium
  from pathlib import Path
  import numpy
  import json
  import tqdm
  import torch
  from ray.rllib.algorithms.ppo.torch.ppo_torch_rl_module import PPOTorchRLModule
  from ray.rllib.algorithms.ppo.ppo_catalog import PPOCatalog
  from ray.rllib.benchmarks.torch_compile.utils import get_ppo_batch_for_env, timed
  from ray.rllib.core.rl_module.rl_module import SingleAgentRLModuleSpec
  from ray.rllib.core.rl_module.torch.torch_rl_module import TorchCompileConfig
  from ray.rllib.env.wrappers.atari_wrappers import wrap_deepmind
  from ray.rllib.models.catalog import MODEL_DEFAULTS
  from ray.rllib.utils.torch_utils import convert_to_torch_tensor
label_desc: Use image node_id 2 for calling a global function with example usage: plot_results() without return types