original_docstring: 
          There is generally two use cases that must be supported here.
  
          1) Whenever the composite has gone to a recognised state (i.e. :data:`~py_trees.common.Status.FAILURE` or SUCCESS),
          or 2) when a higher level parent calls on it to truly stop (INVALID).
  
          In only the latter case will children need to be forcibly stopped as well. In the first case, they will
          have stopped themselves appropriately already.
  
          Args:
              new_status (:class:`~py_trees.common.Status`): behaviour will transition to this new status
          
docstring: There is generally two use cases that must be supported here.
  1) Whenever the composite has gone to a recognised state ,
  or 2) when a higher level parent calls on it to truly stop (INVALID).
  
  In only the latter case will children need to be forcibly stopped as well. In the first case, they will
  have stopped themselves appropriately already.
docstring_tokens: There is generally two use cases that must be supported here . 1 ) Whenever the composite has gone to a recognised state or 2 ) when a higher level parent calls on it to truly stop ( INVALID ) . In only the latter case will children need to be forcibly stopped as well . In the first case they will have stopped themselves appropriately already .
code: def stop(self, new_status=Status.INVALID):
          """
          There is generally two use cases that must be supported here.
  
          1) Whenever the composite has gone to a recognised state (i.e. :data:`~py_trees.common.Status.FAILURE` or SUCCESS),
          or 2) when a higher level parent calls on it to truly stop (INVALID).
  
          In only the latter case will children need to be forcibly stopped as well. In the first case, they will
          have stopped themselves appropriately already.
  
          Args:
              new_status (:class:`~py_trees.common.Status`): behaviour will transition to this new status
          """
          self.logger.debug("%s.stop()[%s]" % (self.__class__.__name__, "%s->%s" % (self.status, new_status) if self.status != new_status else "%s" % new_status))
          if new_status == Status.INVALID:
              for child in self.children:
                  child.stop(new_status)
          # This part just replicates the Behaviour.stop function. We replicate it here so that
          # the Behaviour logging doesn't duplicate the composite logging here, just a bit cleaner this way.
          self.terminate(new_status)
          self.status = new_status
          self.iterator = self.tick()
code_tokens: def stop ( self , new_status = Status . INVALID ) : self . logger . debug ( "%s.stop()[%s]" % ( self . __class__ . __name__ , "%s->%s" % ( self . status , new_status ) if self . status != new_status else "%s" % new_status ) ) if new_status == Status . INVALID : for child in self . children : child . stop ( new_status ) self . terminate ( new_status ) self . status = new_status self . iterator = self . tick ( )
short_docstring: There is generally two use cases that must be supported here.
short_docstring_tokens: There is generally two use cases that must be supported here .
comment: """
          There is generally two use cases that must be supported here.
  
          1) Whenever the composite has gone to a recognised state (i.e. :data:`~py_trees.common.Status.FAILURE` or SUCCESS),
          or 2) when a higher level parent calls on it to truly stop (INVALID).
  
          In only the latter case will children need to be forcibly stopped as well. In the first case, they will
          have stopped themselves appropriately already.
  
          Args:
              new_status (:class:`~py_trees.common.Status`): behaviour will transition to this new status
          """$SEP$# This part just replicates the Behaviour.stop function. We replicate it here so that$SEP$# the Behaviour logging doesn't duplicate the composite logging here, just a bit cleaner this way.