docs: def child_of(self, tax_id):
          """Return None or a tax id of a child of *tax_id*.
  
          If *tax_id* is None, then always returns None. Otherwise
          returns a child if one exists, else None. The child must have
          a proper rank below that of tax_id (i.e., genus, species, but
          not no_rank or below_below_kingdom).
          """
          if tax_id is None:
              return None
          parent_id, rank = self._node(tax_id)
          s = select([self.nodes.c.tax_id],
                     and_(self.nodes.c.parent_id == tax_id,
                          or_(*[self.nodes.c.rank == r
                                for r in self.ranks_below(rank)])))
          res = s.execute()
          output = res.fetchone()
          if not output:
              msg = ('No children of tax_id {} with '
                     'rank below {} found in database')
              msg = msg.format(tax_id, rank)
              log.warning(msg)
              return None
          else:
              r = output[0]
              assert self.is_ancestor_of(r, tax_id)
              return r