docs: def _execute_current_child(self):
          """ Collect all data for a child state and execute it.
          :return:
          """
  
          self.child_state.input_data = self.get_inputs_for_state(self.child_state)
          self.child_state.output_data = self.create_output_dictionary_for_state(self.child_state)
  
          # process data of last state
          if self.last_error:
              self.child_state.input_data['error'] = copy.deepcopy(self.last_error)
          self.last_error = None
          if self.last_child:
              # do not set the last state to inactive before executing the new one
              self.last_child.state_execution_status = StateExecutionStatus.INACTIVE
  
          self.child_state.generate_run_id()
          if not self.backward_execution:  # only add history item if it is not a backward execution
              self.execution_history.push_call_history_item(
                  self.child_state, CallType.EXECUTE, self, self.child_state.input_data)
          self.child_state.start(self.execution_history, backward_execution=self.backward_execution,
                                 generate_run_id=False)
  
          self.child_state.join()
  
          # this line is important to indicate the parent the current execution status
          # it may also change during the execution of an hierarchy state
          # e.g. a hierarchy state may be started in forward execution mode but can leave in backward execution mode
          # print(self.child_state)
          # print(self.child_state.backward_execution)
          self.backward_execution = self.child_state.backward_execution
          # for h in self.execution_history._history_items:
          #     print(h)
  
          if self.preempted:
              if self.backward_execution:
                  # this is the case if the user backward step through its state machine and stops it
                  # as preemption behaviour in backward mode is not defined, set the state to forward mode
                  # to ensure clean state machine shutdown
                  self.backward_execution = False
  
          # set last_error and self.last_child
          if self.child_state.final_outcome is not None:  # final outcome can be None if only one state in a
              # hierarchy state is executed and immediately backward executed
              if self.child_state.final_outcome.outcome_id == -1:  # if the child_state aborted save the error
                  self.last_error = ""
                  if 'error' in self.child_state.output_data:
                      self.last_error = self.child_state.output_data['error']
          self.last_child = self.child_state