[docs]defvalidate_temporal_relations(self,hed_string_obj)->list[dict]:""" Validate onset/offset/inset tag relations Parameters: hed_string_obj (HedString): The HED string to check. Returns: list[dict]: A list of issues found in validating onsets (i.e., out of order onsets, repeated def names). """onset_issues=[]used_def_names=set()fortemporal_tag,temporal_groupinhed_string_obj.find_top_level_tags(anchor_tags=DefTagNames.TEMPORAL_KEYS):ifnottemporal_tag:return[]def_tags=temporal_group.find_def_tags(include_groups=0)ifnotdef_tags:continuedef_tag=def_tags[0]def_name=def_tag.extensionifdef_name.casefold()inused_def_names:onset_issues+=ErrorHandler.format_error(TemporalErrors.ONSET_SAME_DEFS_ONE_ROW,tag=temporal_tag,def_name=def_name)continueused_def_names.add(def_tag.extension.casefold())# At this point we have either an onset or offset tag and it's nameonset_issues+=self._handle_onset_or_offset(def_tag,temporal_tag)returnonset_issues
def_handle_onset_or_offset(self,def_tag,onset_offset_tag):is_onset=onset_offset_tag.short_base_tag==DefTagNames.ONSET_KEYfull_def_name=def_tag.extensionifis_onset:# onset can never fail as it implies an offsetself._onsets[full_def_name.casefold()]=full_def_nameelse:is_offset=onset_offset_tag.short_base_tag==DefTagNames.OFFSET_KEYiffull_def_name.casefold()notinself._onsets:ifis_offset:returnErrorHandler.format_error(TemporalErrors.OFFSET_BEFORE_ONSET,tag=def_tag)else:returnErrorHandler.format_error(TemporalErrors.INSET_BEFORE_ONSET,tag=def_tag)elifis_offset:delself._onsets[full_def_name.casefold()]return[]
[docs]@staticmethoddefcheck_for_banned_tags(hed_string)->list[dict]:""" Returns an issue for every tag found from the banned list (for files without onset column). Parameters: hed_string (HedString): The string to check. Returns: list[dict]: The validation issues associated with the characters. Each issue is dictionary. """banned_tag_list=DefTagNames.TIMELINE_KEYSissues=[]fortaginhed_string.get_all_tags():iftag.short_base_taginbanned_tag_list:issues+=ErrorHandler.format_error(TemporalErrors.TEMPORAL_TAG_NO_TIME,tag)returnissues