docs: def boot(self, width=None, height=None,
               only_if_needed=True, check_booted=True, **boot_kwargs):
          """Boot a SpiNNaker machine.
  
          The system will be booted from the Ethernet connected chip whose
          hostname was given as the argument to the MachineController. With the
          default arguments this method will only boot systems which have not
          already been booted and will wait until machine is completely booted
          (and raise a :py:exc:`.SpiNNakerBootError` on failure).
  
          This method uses :py:func:`rig.machine_control.boot.boot` to send boot
          commands to the machine and update the struct files contained within
          this object according to those used during boot.
  
          .. warning::
  
              Booting the system over the open internet is likely to fail due to
              the port number being blocked by most ISPs and UDP not being
              reliable. A proxy such as `spinnaker_proxy
              <https://github.com/project-rig/spinnaker_proxy>`_ may be useful in
              this situation.
  
          Parameters
          ----------
          width, height : *Deprecated*
              **Deprecated.** In older versions of SC&MP, it was necessary to
              indicate the size of the machine being booted. These parameters are
              now ignored and setting them will produce a deprecation warning.
          scamp_binary : filename or None
              Filename of the binary to boot the machine with or None to use the
              SC&MP binary bundled with Rig.
          sark_struct : filename or None
              The 'sark.struct' file which defines the datastructures or None to
              use the one bundled with Rig.
          boot_delay : float
              Number of seconds to pause between sending boot data packets.
          post_boot_delay : float
              Number of seconds to wait after sending last piece of boot data to
              give SC&MP time to re-initialise the Ethernet interface.
          only_if_needed : bool
              If ``only_if_needed`` is True (the default), this method checks to
              see if the machine is already booted and only attempts to boot the
              machine if neccessary.
  
              If ``only_if_needed`` is False, the boot commands will be sent to
              the target machine without checking if it is already booted or not.
  
              .. warning::
  
                  If the machine has already been booted, sending the boot
                  commands again will not 'reboot' the machine with the newly
                  supplied boot image, even if ``only_if_needed`` is False.
          check_booted : bool
              If ``check_booted`` is True this method waits for the machine to be
              fully booted before returning. If False, this check is skipped and
              the function returns as soon as the machine's Ethernet interface is
              likely to be up (but not necessarily before booting has completed).
          sv_overrides : {name: value, ...}
              Additional arguments used to override the default values in the
              'sv' struct defined in the struct file.
  
          Returns
          -------
          bool
              Returns True if the machine was sent boot commands, False if the
              machine was already booted.
  
          Raises
          ------
          rig.machine_control.machine_controller.SpiNNakerBootError
              Raised when ``check_booted`` is True and the boot process was
              unable to boot the machine. Also raised when ``only_if_needed`` is
              True and the remote host is a BMP.
  
          Notes
          -----
          The constants `rig.machine_control.boot.spinX_boot_options` can be used
          to specify boot parameters, for example::
  
              controller.boot(**spin3_boot_options)
  
          This is neccessary on boards such as SpiNN-3 boards if the more than
          LED 0 are required by an application since by default, only LED 0 is
          enabled.
          """
          # Report deprecated width/height arguments
          if width is not None or height is not None:
              warnings.warn("Machine width and height are no longer needed when "
                            "booting a machine.", DeprecationWarning)
  
          # Check to see if the machine is already booted first
          if only_if_needed:
              # We create a new MachineController which fails quickly if it
              # doesn't receieve a reply (since typically the machine is already
              # booted).
              quick_fail_mc = MachineController(self.initial_host, n_tries=1)
              try:
                  info = quick_fail_mc.get_software_version(255, 255, 0)
                  if "SpiNNaker" not in info.version_string:
                      raise SpiNNakerBootError(
                          "Remote host is not a SpiNNaker machine and so cannot "
                          "be booted. (Are you using a BMP IP/hostname?)")
  
                  # Machine did not need booting
                  return False
              except SCPError:
                  # The machine is not responding to SCP so it needs booting.
                  pass
  
          # Actually boot the machine
          boot_kwargs.setdefault("boot_port", self.boot_port)
          self.structs = boot.boot(self.initial_host, **boot_kwargs)
          assert len(self.structs) > 0
  
          # Wait for the machine to completely boot
          if check_booted:
              try:
                  p2p_address = (255, 255)
                  while p2p_address == (255, 255):
                      time.sleep(0.1)
                      p2p_address = self.get_software_version(
                          255, 255, 0).position
              except SCPError:
                  # Machine did not respond
                  raise SpiNNakerBootError(
                      "The remote machine could not be booted.")
  
          # The machine was sent boot commands
          return True