docs: def run(self):
          """Run FastGapFill command"""
  
          # Create solver
          solver = self._get_solver()
  
          # Load compound information
          def compound_name(id):
              if id not in self._model.compounds:
                  return id
              return self._model.compounds[id].properties.get('name', id)
  
          # TODO: The exchange and transport reactions have tuple names. This
          # means that in Python 3 the reactions can no longer be directly
          # compared (e.g. while sorting) so define this helper function as a
          # workaround.
          def reaction_key(r):
              return r if isinstance(r, tuple) else (r,)
  
          # Calculate penalty if penalty file exists
          penalties = {}
          if self._args.penalty is not None:
              for line in self._args.penalty:
                  line, _, comment = line.partition('#')
                  line = line.strip()
                  if line == '':
                      continue
                  rxnid, penalty = line.split(None, 1)
                  penalties[rxnid] = float(penalty)
  
          model_extended, weights = create_extended_model(
              self._model,
              db_penalty=self._args.db_penalty,
              ex_penalty=self._args.ex_penalty,
              tp_penalty=self._args.tp_penalty,
              penalties=penalties)
  
          epsilon = self._args.epsilon
          core = set()
          if self._args.subset is None:
              for r in self._mm.reactions:
                  if not self._mm.is_exchange(r):
                      core.add(r)
          else:
              for line in self._args.subset:
                  line = line.strip()
                  if line == '':
                      continue
                  core.add(line)
          induced = fastgapfill(model_extended, core, weights=weights,
                                epsilon=epsilon, solver=solver)
  
          for reaction_id in sorted(self._mm.reactions):
              rx = self._mm.get_reaction(reaction_id)
              rxt = rx.translated_compounds(compound_name)
              print('{}\t{}\t{}\t{}'.format(reaction_id, 'Model', 0, rxt))
  
          for rxnid in sorted(induced, key=reaction_key):
              if self._mm.has_reaction(rxnid):
                  continue
              rx = model_extended.get_reaction(rxnid)
              rxt = rx.translated_compounds(compound_name)
              print('{}\t{}\t{}\t{}'.format(
                  rxnid, 'Add', weights.get(rxnid, 1), rxt))