docs: def get_next_upper_library_root_state(self):
          """ Get next upper library root state
  
          The method recursively checks state parent states till finding a StateMachine as parent or a library root state.
          If self is a LibraryState the next upper library root state is searched and it is not handed self.state_copy.
  
          :return library root state (Execution or ContainerState) or None if self is not a library root state or
          inside of such
          :rtype rafcon.core.states.library_state.State:
          """
          from rafcon.core.state_machine import StateMachine
  
          if self.is_root_state_of_library:
              return self
  
          state = self
          while state.parent is not None and not isinstance(state.parent, StateMachine):
              if state.parent.is_root_state_of_library:
                  return state.parent
              state = state.parent
          return None