optional: a dataframe of franchises as created by ffs_franchises() - overrides the n_teams argument and will attach actual franchise IDs to the schedule output.
seed
an integer to control reproducibility
Details
It starts with the circle method for round robin scheduling, grows or shrinks the schedule to match the required number of weeks, and then shuffles both the order that teams are assigned in and the order that weeks are generated. This doesn't "guarantee" unique schedules, but there are n_teams! x n_weeks! permutations of the schedule so it's very very likely that the schedules are unique (3x10^18 possible schedules for a 12 team league playing 13 weeks).