def test_is_concept_dereifiable(self, mini_amr): m = Model() assert not m.is_concept_dereifiable('chase-01') assert not m.is_concept_dereifiable(':mod') assert not m.is_concept_dereifiable('have-mod-91') m = Model.from_dict(mini_amr) assert not m.is_concept_dereifiable('chase-01') assert not m.is_concept_dereifiable(':mod') assert m.is_concept_dereifiable('have-mod-91')
def _dereify_agenda(g: Graph, model: Model) -> _Dereification: alns = alignments(g) agenda: _Dereification = {} fixed: Set[Target] = set([g.top]) inst: Dict[Variable, BasicTriple] = {} other: Dict[Variable, List[BasicTriple]] = {} for triple in g.triples: var, role, tgt = triple if role == CONCEPT_ROLE: inst[var] = triple else: fixed.add(tgt) if var not in other: other[var] = [triple] else: other[var].append(triple) for var, instance in inst.items(): if (var not in fixed and len(other.get(var, [])) == 2 and model.is_concept_dereifiable(instance[2])): # passed initial checks # now figure out which other edge is the first one first, second = other[var] if get_pushed_variable(g, second) == var: first, second = second, first try: dereified = model.dereify(instance, first, second) except ModelError: pass else: # migrate epidata epidata: List[Epidatum] = [] if instance in alns: aln = alns[instance] epidata.append( RoleAlignment(aln.indices, prefix=aln.prefix)) epidata.extend(epi for epi in g.epidata[second] if not isinstance(epi, RoleAlignment)) agenda[var] = (first, dereified, epidata) return agenda