docs: def set_program_profile(self, n, commands,
                              program_or_profile='program',
                              timeout=1.0, max_retries=0):
          """ Sets a program/profile on the drive.
  
          Sets program or profile 'n' on the drive to the sequence of
          commands in 'commands'. If the existing program is identical, it
          is not overwritten (can't check this for a profile). Returns
          whether the program or profile was successfully set or not (if
          the existing one is identical, it is considered a success).
  
          Parameters
          ----------
          n : int
              Which program to set.
          commands : list or tuple of strings
              ``list`` or ``tuple`` of commands to send to the drive. Each
              command must be a string.
          program_or_profile : {'program', 'profile'}, optional
              Whether to read a program or a profile. Anything other than
              these two values implies the default.
          timeout : number, optional
              Optional timeout in seconds to use when reading the
              response. A negative value or ``None`` indicates that the
              an infinite timeout should be used.
          max_retries : int, optional
              Maximum number of retries to do per command in the case of
              errors.
  
          Returns
          -------
          success : bool
              Whether the program or profile was successfully set or not
              (an identical program already existing on the drive is
              considered a success).
  
          Notes
          -----
          'commands' gets wrapped between ['DEL PROGn', 'DEF PROGn'] and
          'END' or the equivalent profile ones.
  
          See Also
          --------
          get_program : Gets a program.
          run_program_profile : Runs a program or profile.
  
          """
          # Grab the n'th program on the drive and strip commands. If we
          # are doing a profile, None will be used as a placeholder.
          if program_or_profile != 'profile':
              current_program = self.get_program(n, timeout=timeout, \
                  max_retries=max_retries+2)
          else:
              current_program = None
          stripped_commands = utilities.strip_commands(commands)
  
          # If the two are identical and we are doing a program, then
          # nothing needs to be done and the program is already set
          # (return True). Otherwise, it needs to be overwritten. If there
          # were no errors on the last command, then it was written
          # successfully. Otherwise, the program or profile needs to be
          # terminated and then deleted.
  
          if current_program is not None \
                  and current_program == stripped_commands:
              return True
          else:
              # Construct the End Of Responses for each command that will
              # be sent. They are '\n' for deletion and ending, but are
              # '\n- ' for the rest.
              eor = ['\n'] + (['\n- '] * (1 + len(stripped_commands))) \
                  + ['\n']
  
              # The commands consist of a header that tells which program
              # or profile to set, the stripped commands, followed by an
              # 'END'.
              if program_or_profile != 'profile':
                  header = ['DEL PROG'+str(int(n)),
                            'DEF PROG'+str(int(n))]
              else:
                  header = ['DEL PROF'+str(int(n)),
                            'DEF PROF'+str(int(n))]
              responses = self.driver.send_commands(\
                  header + stripped_commands + ['END'], \
                  timeout=timeout, max_retries=max_retries, eor=eor)
  
              # Check to see if it was set successfully. If it was (the
              # last command had no errors), return True. Otherwise, the
              # program or profile needs to be ended and deleted before
              # returning False.
              if not self.driver.command_error(responses[-1]):
                  return True
              else:
                  if program_or_profile != 'profile':
                      cmds = ['END', 'DEL PROG'+str(int(n))]
                  else:
                      cmds = ['END', 'DEL PROF'+str(int(n))]
                  self.driver.send_commands(cmds, timeout=timeout,
                                             max_retries=max_retries+2)
                  return False