docs: def check_info_on_no_update_flags(self, info):
          """Stop updates while multi-actions"""
          # TODO that could need a second clean up
          # avoid updates because of state destruction
          if 'before' in info and info['method_name'] == "remove_state":
              if info.instance is self.model.state:
                  self.no_update_state_destruction = True
              else:
                  # if the state it self is removed lock the widget to never run updates and relieve all models
                  removed_state_id = info.args[1] if len(info.args) > 1 else info.kwargs['state_id']
                  if removed_state_id == self.model.state.state_id or \
                          not self.model.state.is_root_state and removed_state_id == self.model.parent.state.state_id:
                      self.no_update_self_or_parent_state_destruction = True
                      self.relieve_all_models()
  
          elif 'after' in info and info['method_name'] == "remove_state":
              if info.instance.state_id == self.model.state.state_id:
                  self.no_update_state_destruction = False
  
          # reduce NotificationOverview generations by the fact that after could cause False and before could cause True
          if not self.no_update_state_destruction and not self.no_update_self_or_parent_state_destruction and \
                  (not self.no_update and 'before' in info or 'after' in info and self.no_update):
              return
          overview = NotificationOverview(info, False, self.__class__.__name__)
  
          # The method causing the change raised an exception, thus nothing was changed and updates are allowed
          if 'after' in info and isinstance(overview['result'][-1], Exception):
              self.no_update = False
              self.no_update_state_destruction = False
              # self.no_update_self_or_parent_state_destruction = False
              return
  
          if overview['method_name'][-1] in ['group_states', 'ungroup_state', "change_state_type",
                                             "change_root_state_type"]:
              instance_is_self = self.model.state is overview['instance'][-1]
              instance_is_parent = self.model.parent and self.model.parent.state is overview['instance'][-1]
              instance_is_parent_parent = self.model.parent and self.model.parent.parent and self.model.parent.parent.state is overview['instance'][-1]
              # print("no update flag: ", True if 'before' in info and (instance_is_self or instance_is_parent or instance_is_parent_parent) else False)
              if instance_is_self or instance_is_parent or instance_is_parent_parent:
                  self.no_update = True if 'before' in info else False
  
              if overview['prop_name'][-1] == 'state' and overview['method_name'][-1] in ["change_state_type"] and \
                      self.model.get_state_machine_m() is not None:
                  changed_model = self.model.get_state_machine_m().get_state_model_by_path(overview['args'][-1][1].get_path())
                  if changed_model not in self._model_observed:
                      self.observe_model(changed_model)