code: def range(self, x_data=None):
          
          if x_data is None:
              try:
                  x_data = evaluation.evaluate_inverse(
                      self, numpy.array([[0.5]]*len(self)))
              except StochasticallyDependentError:
                  x_data = approximation.find_interior_point(self)
              shape = (len(self),)
              if hasattr(self, "_range"):
                  return self._range(x_data, {})
          else:
              x_data = numpy.asfarray(x_data)
              shape = x_data.shape
              x_data = x_data.reshape(len(self), -1)
  
          q_data = evaluation.evaluate_bound(self, x_data)
          q_data = q_data.reshape((2,)+shape)
          return q_data
docs: Generate the upper and lower bounds of a distribution.
  
          Args:
              x_data (numpy.ndarray) :
                  The bounds might vary over the sample space. By providing
                  x_data you can specify where in the space the bound should be
                  taken.  If omitted, a (pseudo-)random sample is used.
  
          Returns:
              (numpy.ndarray):
                  The lower (out[0]) and upper (out[1]) bound where
                  out.shape=(2,)+x_data.shape