docstr: find the upper bound on the statistical quantity
  
  Input:
      axis: int, the index of y on which to find bound (all, by default)
      axmap: map instance, to execute each axis in parallel (None, by default)
      instance: bool, if True, return the solver instance (False, by default)
  
  Additional Input:
      solver: mystic.solver instance [default: DifferentialEvolutionSolver2]
      npop: population size [default: None]
      id: a unique identifier for the solver [default: None]
      nested: mystic.solver instance [default: None], for ensemble solvers
      x0: initial parameter guess [default: use RandomInitialPoints]
      maxiter: max number of iterations [default: defined in solver]
      maxfun: max number of objective evaluations [default: defined in solver]
      evalmon: mystic.monitor instance [default: Monitor], for evaluations
      stepmon: mystic.monitor instance [default: Monitor], for iterations
      map: pathos map instance for solver.SetMapper [default: None]
      save: iteration frequency to save solver [default: None]
      opts: dict of configuration options for solver.Solve [default: {}]
  
  Returns:
      upper bound on the statistical quantity, for the specified axis
      
docstr_tok: ["find","the","upper","bound","on","the","statistical","quantity","Input",":","axis",":","int",",","the","index","of","y","on","which","to","find","bound","(","all",",","by","default",")","axmap",":","map","instance",",","to","execute","each","axis","in","parallel","(","None",",","by","default",")","instance",":","bool",",","if","True",",","return","the","solver","instance","(","False",",","by","default",")","Additional","Input",":","solver",":","mystic.solver","instance","[","default",":","DifferentialEvolutionSolver2","]","npop",":","population","size","[","default",":","None","]","id",":","a","unique","identifier","for","the","solver","[","default",":","None","]","nested",":","mystic.solver","instance","[","default",":","None","]",",","for","ensemble","solvers","x0",":","initial","parameter","guess","[","default",":","use","RandomInitialPoints","]","maxiter",":","max","number","of","iterations","[","default",":","defined","in","solver","]","maxfun",":","max","number","of","objective","evaluations","[","default",":","defined","in","solver","]","evalmon",":","mystic.monitor","instance","[","default",":","Monitor","]",",","for","evaluations","stepmon",":","mystic.monitor","instance","[","default",":","Monitor","]",",","for","iterations","map",":","pathos","map","instance","for","solver.SetMapper","[","default",":","None","]","save",":","iteration","frequency","to","save","solver","[","default",":","None","]","opts",":","dict","of","configuration","options","for","solver.Solve","[","default",":","{","}","]","Returns",":","upper","bound","on","the","statistical","quantity",",","for","the","specified","axis"]
code: def upper_bound(self, axis=None, **kwds):
      """find the upper bound on the statistical quantity
  
      Input:
          axis: int, the index of y on which to find bound (all, by default)
          axmap: map instance, to execute each axis in parallel (None, by default)
          instance: bool, if True, return the solver instance (False, by default)
  
      Additional Input:
          solver: mystic.solver instance [default: DifferentialEvolutionSolver2]
          npop: population size [default: None]
          id: a unique identifier for the solver [default: None]
          nested: mystic.solver instance [default: None], for ensemble solvers
          x0: initial parameter guess [default: use RandomInitialPoints]
          maxiter: max number of iterations [default: defined in solver]
          maxfun: max number of objective evaluations [default: defined in solver]
          evalmon: mystic.monitor instance [default: Monitor], for evaluations
          stepmon: mystic.monitor instance [default: Monitor], for iterations
          map: pathos map instance for solver.SetMapper [default: None]
          save: iteration frequency to save solver [default: None]
          opts: dict of configuration options for solver.Solve [default: {}]
  
      Returns:
          upper bound on the statistical quantity, for the specified axis
      """
      full = kwds.pop("instance", False)
      # self._upper.clear() #XXX: good idea?
      if self.axes is None or axis is not None:
          # solve for upper bound of objective (in measure space)
          solver = self._upper_bound(axis, **kwds)
          self._upper[None if self.axes is None else axis] = solver
          if full:
              return solver
          return solver.bestEnergy
      # else axis is None
      solvers = self._upper_bound(axis, **kwds)
      for i, solver in enumerate(solvers):
          self._upper[i] = solver
      if full:
          return solvers
      return tuple(i.bestEnergy for i in solvers)
  
imports: import mystic.cache
  from mystic.cache import cached
  from mystic.cache.archive import dict_archive, file_archive, read
  from mystic.math import almostEqual
  from mystic.math.discrete import product_measure
  from mystic.math.samples import random_samples
  from mystic.solvers import DifferentialEvolutionSolver2
  from mystic.monitors import Monitor
  from ouq_models import WrapModel
label_desc: Use image node_id 4 for calling the BaseOUQ obj's underlying member method code with example usage: obj.upper_bound(axis) and returns: tuple, solver, solvers, solver