<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def switch(scm, to_branch, verbose, fake):
 """Switches from one branch to another, safely stashing and restoring local changes. """

    scm.fake = fake
    scm.verbose = fake or verbose

    scm.repo_check()

    if to_branch is None:
        scm.display_available_branches()
        raise click.BadArgumentUsage('Please specify a branch to switch to')

    scm.stash_log()
    status_log(scm.checkout_branch, 'Switching to {0}.'.format(
        crayons.yellow(to_branch)), to_branch)
    scm.unstash_log()