code: def generic_distribution(target, seeds, func):
      r
      seeds = target[seeds]
      value = func.ppf(seeds)
      return value
docs: r"""
      Accepts an 'rv_frozen' object from the Scipy.stats submodule and returns
      values from the distribution for the given seeds
  
      This uses the ``ppf`` method of the stats object
  
      Parameters
      ----------
      target : OpenPNM Object
          The object which this model is associated with. This controls the
          length of the calculated array, and also provides access to other
          necessary properties.
  
      seeds : string, optional
          The dictionary key on the Geometry object containing random seed values
          (between 0 and 1) to use in the statistical distribution.
  
      func : object
          An 'rv_frozen' object from the Scipy.stats library with all of the
          parameters pre-specified.
  
      Examples
      --------
      The following code illustrates the process of obtaining a 'frozen' Scipy
      stats object and adding it as a model:
  
      >>> import scipy
      >>> import openpnm as op
      >>> pn = op.network.Cubic(shape=[3, 3, 3])
      >>> geo = op.geometry.GenericGeometry(network=pn, pores=pn.Ps, throats=pn.Ts)
      >>> geo.add_model(propname='pore.seed',
      ...               model=op.models.geometry.pore_seed.random)
  
      Now retrieve the stats distribution and add to ``geo`` as a model:
  
      >>> stats_obj = scipy.stats.weibull_min(c=2, scale=.0001, loc=0)
      >>> geo.add_model(propname='pore.size',
      ...               model=op.models.geometry.pore_size.generic_distribution,
      ...               seeds='pore.seed',
      ...               func=stats_obj)
  
  
      >>> import matplotlib.pyplot as plt
      >>> fig = plt.hist(stats_obj.ppf(q=scipy.rand(1000)), bins=50)