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
docstr: Distribute model evaluation across a cluster.
  
  Usage Conditions:
  
  * The provided function needs to accept a numpy array of inputs as
    its first parameter
  * The provided function must return a numpy array of results
  
  
  Parameters
  ----------
  func : function,
      Model, or function that wraps a model, to be run in parallel
  
  nprocs : int,
      Number of processors to use for each node. Defaults to 1.
  
  servers : list[str] or None,
      IP addresses or alias for each server/node to use.
  
  verbose : bool,
      Display job execution statistics. Defaults to False.
  
  *args : list,
      Additional arguments to be passed to `func`
  
  **kwargs : dict,
      Additional keyword arguments passed to `func`
  
  Returns
  -------
  self : ProblemSpec object
docstr_tok: ["Distribute","model","evaluation","across","a","cluster",".","Usage","Conditions",":","*","The","provided","function","needs","to","accept","a","numpy","array","of","inputs","as","its","first","parameter","*","The","provided","function","must","return","a","numpy","array","of","results","Parameters","--","--","--","--","--","func",":","function",",","Model",",","or","function","that","wraps","a","model",",","to","be","run","in","parallel","nprocs",":","int",",","Number","of","processors","to","use","for","each","node",".","Defaults","to","1.","servers",":","list","[","str","]","or","None",",","IP","addresses","or","alias","for","each","server\/node","to","use",".","verbose",":","bool",",","Display","job","execution","statistics",".","Defaults","to","False",".","*","args",":","list",",","Additional","arguments","to","be","passed","to","`","func","`","*","*","kwargs",":","dict",",","Additional","keyword","arguments","passed","to","`","func","`","Returns","--","--","--","-","self",":","ProblemSpec","object"]
code: def evaluate_distributed(
      self, func, *args, nprocs=1, servers=None, verbose=False, **kwargs
  ):
      """Distribute model evaluation across a cluster.
  
      Usage Conditions:
  
      * The provided function needs to accept a numpy array of inputs as
        its first parameter
      * The provided function must return a numpy array of results
  
  
      Parameters
      ----------
      func : function,
          Model, or function that wraps a model, to be run in parallel
  
      nprocs : int,
          Number of processors to use for each node. Defaults to 1.
  
      servers : list[str] or None,
          IP addresses or alias for each server/node to use.
  
      verbose : bool,
          Display job execution statistics. Defaults to False.
  
      *args : list,
          Additional arguments to be passed to `func`
  
      **kwargs : dict,
          Additional keyword arguments passed to `func`
  
      Returns
      -------
      self : ProblemSpec object
      """
      if not pathos_available:
          raise RuntimeError(
              "Pathos is required to run in distributed mode. Please install"
              " with `pip install pathos` or"
              " `conda install pathos -c conda-forge`"
          )
  
      if verbose:
          from pathos.parallel import stats
  
      warnings.warn(
          "Distributed evaluation is an untested experimental feature and"
          " may not work."
      )
  
      workers = pp_Pool(nprocs, servers=servers)
  
      # Split into even chunks
      chunks = np.array_split(
          self._samples, int(nprocs) * len(servers), axis=0
      )
  
      tmp_f = self._wrap_func(func)
  
      res = list(workers.map(tmp_f, chunks))
  
      self.results = self._collect_results(res)
  
      if verbose:
          print(stats(), "\n")
  
      workers.clear()
  
      return self
  
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 12 for calling the ProblemSpec obj's underlying member method code with example usage: obj.evaluate_distributed(func) and returns: self