code: def reboot(self):
          
          if self.is_bootloader:
              self.fastboot.reboot()
              return
          with self.handle_reboot():
              self.adb.reboot()
docs: Reboots the device.
  
          Generally one should use this method to reboot the device instead of
          directly calling `adb.reboot`. Because this method gracefully handles
          the teardown and restoration of running services.
  
          This method is blocking and only returns when the reboot has completed
          and the services restored.
  
          Raises:
              Error: Waiting for completion timed out.