def get_time_interval(lst: KQMLList) -> tra.TimeInterval: try: lb = lst.gets('lower-bound') ub = lst.gets('upper-bound') unit = lst.gets('unit') return tra.TimeInterval(lb, ub, unit) except Exception as e: raise tra.InvalidTimeIntervalError(e)
def get_molecular_quantity(lst: KQMLList) -> tra.MolecularQuantity: try: quant_type = lst.gets('type') value = lst.gets('value') if quant_type == 'concentration': unit = lst.gets('unit') else: unit = None return tra.MolecularQuantity(quant_type, value, unit) except Exception as e: raise tra.InvalidMolecularQuantityError(e)
def get_molecular_condition(lst: KQMLList) -> tra.MolecularCondition: try: condition_type = lst.gets('type') quantity_ref_lst = lst.get('quantity') quantity = get_molecular_quantity_ref(quantity_ref_lst) if condition_type == 'exact': value = get_molecular_quantity(lst.get('value')) elif condition_type == 'multiple': value = lst.gets('value') else: value = None return tra.MolecularCondition(condition_type, quantity, value) except Exception as e: raise tra.InvalidMolecularConditionError(e)
def get_molecular_quantity_ref(lst: KQMLList) -> tra.MolecularQuantityReference: try: quant_type = lst.gets('type') entity_lst = lst.get('entity') entity = get_molecular_entity(entity_lst) return tra.MolecularQuantityReference(quant_type, entity) except Exception as e: raise tra.InvalidMolecularQuantityRefError(e)
def get_temporal_pattern(lst: KQMLList) -> tra.TemporalPattern: pattern_type = lst.gets('type') entities_lst = lst.get('entities') entities = [] if entities_lst is None: entities_lst = [] for e in entities_lst: entity = get_molecular_entity(e) entities.append(entity) time_limit_lst = lst.get('time-limit') if time_limit_lst is None: time_limit = None else: time_limit = get_time_interval(time_limit_lst) # TODO: handle more pattern-specific extra arguments value_lst = lst.get('value') if value_lst is not None: value = get_molecular_quantity(value_lst) else: value = None tp = tra.TemporalPattern(pattern_type, entities, time_limit, value=value) return tp