def aggregate_variable_combined(ud: UD) -> AggregateVariableCombined: d = Drawer(ud) return AggregateVariableCombined([ d.draw(any_string), d.draw(aggregate_variable_name), d.draw(any_string) ])
def merge_query_query(ud: UD) -> Query: d = Drawer(ud) nav = d.draw(navigation()) trm = d.draw(term) # merge query need to start with navigation part without additional props parts = [Part(trm), Part(AllTerm(), navigation=nav)] return Query(parts)
def durations_gen(ud: UD) -> str: d = Drawer(ud) result = d.draw(sampled_from(["", "+", "-"])) first = True for duration in d.draw(lists(duration_gen, min_size=1, max_size=4)): if first: first = False else: result += d.draw(combines_gen) result += duration return result
def with_clause(ud: UD) -> WithClause: d = Drawer(ud) op = d.draw(query_operations) num = d.draw(integers(min_value=0)) nav = d.draw(navigation()) trm = d.optional(term) wc = d.optional(with_clause()) return WithClause(WithClauseFilter(op, num), nav, trm, wc)
def navigation(ud: UD) -> Navigation: d = Drawer(ud) start = d.draw(integers(min_value=0, max_value=1)) length = d.draw(integers(min_value=0, max_value=100)) ed = d.draw(edge_type) direction = d.draw(edge_direction) return Navigation(start, length + start, [ed], direction)
def merge_term(ud: UD) -> MergeTerm: d = Drawer(ud) pre = d.draw(term) queries = d.draw(lists(merge_query, min_size=1, max_size=1)) pst = d.optional(term) return MergeTerm(pre, queries, pst)
def composite_term(ud: UD) -> CombinedTerm: d = Drawer(ud) trm = leaf_term | composite_term() return CombinedTerm(d.draw(trm), d.draw(combine_term), d.draw(trm))