docs: def get_children(self, inner_edge):
          """ Given an edge in the tree, returns the child nodes of the head and
          the tail nodes of the edge, for instance:
  
              A      C    | A, B, C and D are the children of the edge --->,
               \    /     | C and D are the head node children, and A and B
               t--->h     | are the tail node children.
               /    \
              B      D    | Output: {'head': [<C>, <D>], 'tail': [<A>, <B>]}
  
          N1: Edges are directional in dendropy trees. The head node of an
          edge is automatically a child of the tail node, but we don't want this.
          """
  
          h = inner_edge.head_node
          t = inner_edge.tail_node
          if not self.tree._tree.seed_node == t:
              original_seed = self.tree._tree.seed_node
              self.tree._tree.reseed_at(t)
          else:
              original_seed = None
          head_children = h.child_nodes()
          tail_children = list(set(t.child_nodes()) - {h})  # See N1
          if original_seed:
              self.tree._tree.reseed_at(original_seed)
  
          return {'head': head_children, 'tail': tail_children}