code: def n_choose_k(n, k):
      
      return int(reduce(MUL, (Fraction(n-i, i+1) for i in range(k)), 1))
docs: get the number of quartets as n-choose-k. This is used
      in equal splits to decide whether a split should be exhaustively sampled
      or randomly sampled. Edges near tips can be exhaustive while highly nested
      edges probably have too many quartets