[sprout.random] add generate_canonical