code: def calculate_metabolic_coverage(model):
      u
      if len(model.reactions) == 0 or len(model.genes) == 0:
          raise ValueError("The model contains no reactions or genes.")
      return float(len(model.reactions)) / float(len(model.genes))
docs: u"""
      Return the ratio of reactions and genes included in the model.
  
      Determine whether the amount of reactions and genes in model not equal to
      zero, then return the ratio.
  
      Parameters
      ----------
      model : cobra.Model
          The metabolic model under investigation.
  
      Returns
      -------
      float
          The ratio of reactions to genes also called metabolic coverage.
  
      Raises
      ------
      ValueError
          If the model does not contain either reactions or genes.
  
      Notes
      -----
      According to [1]_ this is a good quality indicator expressing the degree of
      metabolic coverage i.e. modeling detail of a given reconstruction. The
      authors explain that models with a 'high level of modeling detail have
      ratios >1, and [models] with low level of detail have ratios <1'. They
      explain that 'this difference arises because [models] with basic or
      intermediate levels of detail often include many reactions in which several
      gene products and their enzymatic transformations are ‘lumped’'.
  
      References
      ----------
      .. [1] Monk, J., Nogales, J., & Palsson, B. O. (2014). Optimizing
            genome-scale network reconstructions. Nature Biotechnology, 32(5),
            447–452. http://doi.org/10.1038/nbt.2870