def get_value_type_for_slot(self, slot_name, formatted: bool = False) -> str: """ Get the value type for a given slot. Parameters ---------- slot_name: str The name or alias of a slot in the Biolink Model formatted: bool Whether to format element names as CURIEs Returns ------- str The slot type """ element_type = None element = self.get_element(slot_name) if element: types = self.get_all_types() if element.range in types: et = element.range else: et = 'uriorcurie' if formatted: element_type = format_element(self.generator.obj_for(et)) else: element_type = et return element_type
def get_parent(self, name: str, formatted: bool = False) -> Optional[str]: """ Gets the name of the parent. Parameters ---------- name: str The name of an element in the Biolink Model formatted: bool Whether to format element names as CURIEs Returns ------- Optional[str] The name of the given elements parent """ parent = None element = self.get_element(name) if element: p = element.is_a if isinstance(element, Definition) else None if p and formatted: parent = format_element(element) else: parent = p return parent
def _format_all_elements(self, elements: List[str], formatted: bool = False) -> List[str]: """ Format all the elements in a given list. Parameters ---------- elements: str A list of elements formatted: bool Whether to format element names as CURIEs Returns ------- List[str] The formatted list of elements """ if formatted: formatted_elements = [ format_element(self.generator.obj_for(x)) for x in elements ] else: formatted_elements = elements return formatted_elements
def get_element_by_mapping( self, identifier: str, most_specific: bool = False, formatted: bool = False, mixin: bool = True, ) -> Optional[str]: """ Get a Biolink Model element by mapping. This method return the common ancestor of the set of elements referenced by uriorcurie. Parameters ---------- identifier: str The identifier as an IRI or CURIE most_specific: bool Whether or not to get the first available mapping in the order of specificity or to get all mappings of varying specificity formatted: bool Whether to format element names as CURIEs mixin: bool If True, then that means we want to find mixin ancestors as well as is_a ancestors Returns ------- Optional[str] The Biolink element (or the common ancestor) corresponding to the given URI/CURIE """ if most_specific: mappings = self._get_element_by_mapping(identifier) else: mappings = self.get_all_elements_by_mapping(identifier) if mappings: ancestors: List[List[str]] = [] for m in mappings: ancestors.append( [x for x in self.get_ancestors(m, mixin)[::-1] if x in mappings] ) logger.debug(ancestors) without_empty_lists = list(filter(None, ancestors)) common_ancestors = reduce( lambda s, l: s.intersection(set(l)), without_empty_lists[1:], set(without_empty_lists[0]) ) logger.debug("common_ancestors") logger.debug(common_ancestors) for a in without_empty_lists[0]: logger.debug("ancestors[0]") logger.debug(a) if a in common_ancestors: if formatted: element = format_element(self.generator.obj_for(a)) else: element = a return element
def get_element_by_mapping(self, identifier: str, most_specific: bool = False, formatted: bool = False) -> Optional[str]: """ Get a Biolink Model element by mapping. This method return the common ancestor of the set of elements referenced by uriorcurie. Parameters ---------- identifier: str The identifier as an IRI or CURIE most_specific: bool Whether or not to get the first available mapping in the order of specificity or to get all mappings of varying specificity formatted: bool Whether to format element names as CURIEs Returns ------- Optional[str] The Biolink element (or the common ancestor) corresponding to the given URI/CURIE """ if most_specific: mappings = self._get_element_by_mapping(identifier) else: mappings = self.get_all_elements_by_mapping(identifier) if mappings: ancestors: List[List[str]] = [] for m in mappings: ancestors.append( [x for x in self.get_ancestors(m)[::-1] if x in mappings]) common_ancestors = reduce(lambda s, l: s.intersection(set(l)), ancestors[1:], set(ancestors[0])) for a in ancestors[0]: if a in common_ancestors: if formatted: element = format_element(self.generator.obj_for(a)) else: element = a return element
def test_format_element(query, toolkit): n = format_element(toolkit.get_element(query[0])) assert n == query[1]