          if not self.has_error:
              return
          logger.debug("Thread error caught: %s", self.errors)
          error = self.errors[0]
          raise error[1].with_traceback(error[2])
  
      def is_alive(self) -> bool:
          """ Check if any threads are still alive
 
</s> remove     def is_alive(self):
        """ Return true if any thread is alive else false """
 </s> add     def is_alive(self) -> bool:
        """ Check if any threads are still alive

        Returns
        -------
        bool
            ``True`` if any threads are alive. ``False`` if no threads are alive
        """ </s> remove     def check_and_raise_error(self):
        """ Checks for errors in thread and raises them in caller """
 </s> add     def check_and_raise_error(self) -> None:
        """ Checks for errors in thread and raises them in caller.

        Raises
        ------
        Error
            Re-raised error from within the thread
        """ </s> remove     def completed(self):
        """ Return False if there are any alive threads else True """
 </s> add     def completed(self) -> bool:
        """ Check if all threads have completed

        Returns
        -------
        ``True`` if all threads have completed otherwise ``False``
        """ </s> remove     def run(self):
 </s> add     def run(self) -> None:
        """ Runs the target, reraising any errors from within the thread in the caller. """ </s> remove     def name(self):
        """ Return thread name """
 </s> add     def name(self) -> str:
        """ :str: The name of the thread """
        assert error is not None
          if not self.has_error:
              return
          logger.debug("Thread error caught: %s", self.errors)
          error = self.errors[0]
        assert error is not None
          raise error[1].with_traceback(error[2])
  
      def is_alive(self) -> bool:
          """ Check if any threads are still alive
keep keep keep add keep keep keep keep
 bugfix - timelapse image loader
multithreading.py - typing + docs 
lib/multithreading.py