code: def _f_gen(self, c):
          
          lf_idx = self.candidate_classes.index(c.__class__)
          labels = lambda c: [(c.id, lf.__name__, lf(c)) for lf in self.lfs[lf_idx]]
          for cid, lf_key, label in labels(c):
              # Note: We assume if the LF output is an int, it is already
              # mapped correctly
              if isinstance(label, int):
                  yield cid, lf_key, label
              # None is a protected LF output value corresponding to 0,
              # representing LF abstaining
              elif label is None:
                  yield cid, lf_key, 0
              elif label in c.values:
                  if c.cardinality > 2:
                      yield cid, lf_key, c.values.index(label) + 1
                  # Note: Would be nice to not special-case here, but for
                  # consistency we leave binary LF range as {-1,0,1}
                  else:
                      val = 1 if c.values.index(label) == 0 else -1
                      yield cid, lf_key, val
              else:
                  raise ValueError(
                      f"Can't parse label value {label} for candidate values {c.values}"
                  )
docs: Convert lfs into a generator of id, name, and labels.
  
          In particular, catch verbose values and convert to integer ones.