class_docstr: Selects the right wrapper (based on the environment), runs, and saves the src.
code: def _get_mean_std(
      self, values: list[tuple[list[float], list[float]]]
  ) -> tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]:
      # First we have to get all x values
      X: list[float] = []
      for x_values, _ in values:
          for x in x_values:
              if x not in X:
                  X.append(x)
  
      # Let's sort the x values
      X.sort()
  
      if len(X) == 0:
          return np.array([]), np.array([]), np.array([])
  
      # Now we need to look for corresponding y values
      # Each x is associated with #seed y values
      Y: list[list[float]] = []
      for x in X:
          y = []
  
          # Iterate over the values again
          for x_values, y_values in values:
              # Findest closest value to x
              idx = min(
                  range(len(x_values)),
                  key=lambda i: abs(x_values[i] - x),
              )
              y.append(y_values[idx])
  
          Y.append(y)
  
      # Make numpy arrays
      Y_array = np.array(Y)
  
      mean = np.mean(Y_array, axis=1)
      std = np.std(Y_array, axis=1)
  
      return np.array(X), Y_array, mean, std
  
imports: from __future__ import annotations
  import sys
  import logging
  from typing import Any
  import numpy
  import json
  import socket
  from collections import defaultdict
  from pathlib import Path
  import pandas
  from src.tasks import TASKS
  from src.utils.exceptions import NotSupportedError
  from src.utils.styled_plot import plt
  from src.wrappers.v14 import Version14
  from src.wrappers.v20 import Version20
  from src.wrappers.wrapper import Wrapper
label_desc: Use image node_id 5 for calling the Benchmark obj's underlying member method code with example usage: obj._get_mean_std(values) and returns: np,  Y_array,  mean,  std, np,  np,  np