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 __str__(self):
      rep = ""
      if self._samples is not None:
          arr_shape = self._samples.shape
          if len(arr_shape) == 1:
              arr_shape = (arr_shape[0], 1)
          nr, nx = arr_shape
          rep += (
              "Samples:\n"
              f"\t{nx} parameters: {self['names']}\n"
              f"\t{nr} evaluations\n"
          )
      if self._results is not None:
          arr_shape = self._results.shape
          if len(arr_shape) == 1:
              arr_shape = (arr_shape[0], 1)
          nr, ny = arr_shape
          rep += (
              "Outputs:\n"
              f"\t{ny} outputs: {self['outputs']}\n"
              f"\t{nr} evaluations\n"
          )
      if self._analysis is not None:
          rep += "Analysis:\n"
          an_res = self._analysis
  
          allowed_types = (list, tuple)
          if isinstance(an_res, ResultDict):
              an_res = an_res.to_df()
              if not isinstance(an_res, allowed_types):
                  rep += f"{an_res}\n"
              else:
                  for df in an_res:
                      rep += f"{df}\n"
          elif isinstance(an_res, dict):
              for res_name in an_res:
                  rep += "{}:\n".format(res_name)
  
                  dfs = an_res[res_name].to_df()
                  if isinstance(dfs, allowed_types):
                      for df in dfs:
                          rep += f"{df}:\n"
                  else:
                      rep += f"{dfs}:\n"
  
      if len(rep) == 0:
          rep = (
              "ProblemSpec does not currently contain any samples, "
              "evaluations or results."
          )
  
      return rep
  
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 24 for calling the ProblemSpec obj's underlying member method code with example usage: obj.__str__() and returns: rep