code: def step(self):
          # type: () -> bool
          
          with self.__lock:
              self.__value -= 1
              if self.__value == 0:
                  # All done
                  self.__event.set()
                  return True
              elif self.__value < 0:
                  # Gone too far
                  raise ValueError("The counter has gone below 0")
  
          return False
docs: Decreases the internal counter. Raises an error if the counter goes
          below 0
  
          :return: True if this step was the final one, else False
          :raise ValueError: The counter has gone below 0