class_docstr: Dictionary-like object representing an SALib Problem specification.
  
  Attributes
  ----------
  samples : np.array, of generated samples
  results : np.array, of evaluations (i.e., model outputs)
  analysis : np.array or dict, of sensitivity indices
code: def results(self, vals):
      val_shape = vals.shape
      if len(val_shape) == 1:
          cols = 1
      else:
          cols = vals.shape[1]
  
      out_cols = self.get("outputs", None)
      if out_cols is None:
          if cols == 1:
              self["outputs"] = ["Y"]
          else:
              self["outputs"] = [f"Y{i}" for i in range(1, cols + 1)]
      else:
          if cols != len(self["outputs"]):
              msg = "Mismatched sample size: Expected "
              msg += "{} cols, got {}".format(self["outputs"], cols)
              raise ValueError(msg)
  
      self._results = vals
  
imports: import warnings
  import importlib
  from types import MethodType
  from functools import partial, wraps
  from multiprocess import Pool, cpu_count
  import numpy
  import SALib.sample
  import SALib.analyze
  from SALib.util import avail_approaches
  from SALib.util.results import ResultDict
label_desc: Use image node_id 5 for calling the ProblemSpec obj's underlying member method code with example usage: obj.results(vals) without return types