code: public static <W, S extends GenericSemiring<W>> UnionSemiring<W, S> makeForOrdering(S weightSemiring,
                                                                                        Ordering<W> ordering,
                                                                                        MergeStrategy<W> merge) {
      return makeForOrdering(weightSemiring, ordering, merge, UnionMode.NORMAL);
    }
docs: Creates a new union semirng for the given underlying weight semiring and ordering
  
  @param weightSemiring underlying weight semiring
  @param ordering       the ordering to govern elements in the union set; note that when ordering indicates that two
  elements are equal, that is when the merge strategy will be called to merge them
  @param merge          the way two elements should be combined when the ordering strategy indicates they are equal
  @param <W>            the underlying weight type
  @param <S>            the underlying semiring type for W
  @return