docs: def bifurcation_partition(bif_point):
      '''Calculate the partition at a bifurcation point
  
      We first ensure that the input point has only two children.
  
      The number of nodes in each child tree is counted. The partition is
      defined as the ratio of the largest number to the smallest number.'''
      assert len(bif_point.children) == 2, 'A bifurcation point must have exactly 2 children'
  
      n = float(sum(1 for _ in bif_point.children[0].ipreorder()))
      m = float(sum(1 for _ in bif_point.children[1].ipreorder()))
      return max(n, m) / min(n, m)