from tyrell.enumerator import SmtEnumerator from tyrell.decider import Example, SmtBasicDecider from tyrell.synthesizer import Synthesizer from tyrell.logger import get_logger import rpy2.robjects as robjects import argparse from utils.Table import Table from utils.InputTable import InputTable import os, signal import itertools import sys import math from utils.interpreter import RTransformer logger = get_logger('tyrell') number = 0 counter_ = 1 tabs = {} inc_tabs = {} robjects.r(''' library(dplyr) library(tidyr) library(tibble) library(compare) library(lubridate) normalit <- function(m){ m/sum(m) } normalit_100 <- function(m){
from z3 import * from collections import deque from tyrell.enumerator.enumerator import Enumerator from functools import reduce import collections from tyrell import dsl as D from tyrell.logger import get_logger logger = get_logger('tyrell.enumerator.bidirection_smt') # Each statement has opcode, args, and lhs. class Stmt: def __init__(self, opcode, args, lhs): self.opcode = opcode self.args = args self.lhs = lhs #FIXME: assuming all statements return tables. self.type = 'Table' self.ast = None def __repr__(self): # if self.ast: return str(self.ast) # else: # return str(self.lhs) + ' = ' + str(self.opcode) + '(' + str(self.args) + ')' class SmtEnumerator(Enumerator): # z3 solver
from z3 import * from collections import deque from tyrell.enumerator.enumerator import Enumerator from tyrell.enumerator.optimizer import Optimizer from tyrell import dsl as D from tyrell.logger import get_logger logger = get_logger('tyrell.enumerator.smt') class AST: def __init__(self): self.head = None class ASTNode: def __init__(self, nb=None, depth=None, children=None): self.id = nb self.depth = depth self.children = children self.production = None # FIXME: Currently this enumerator requires an "Empty" production to function properly class SmtEnumerator(Enumerator): # z3 solver z3_solver = Solver() # productions that are leaf leaf_productions = []
from abc import ABC, abstractmethod from typing import Any from tyrell.interpreter import InterpreterError from tyrell.enumerator import Enumerator from tyrell.decider import Decider from tyrell.dsl import Node from tyrell.logger import get_logger logger = get_logger('tyrell.synthesizer') class Synthesizer(ABC): _enumerator: Enumerator _decider: Decider def __init__(self, enumerator: Enumerator, decider: Decider): self._enumerator = enumerator self._decider = decider @property def enumerator(self): return self._enumerator @property def decider(self): return self._decider def synthesize(self): '''
import base64 import time import hashlib from jinja2 import Template from tyrell.spec import parse from tyrell.enumerator import SmtEnumerator from tyrell.interpreter import PostOrderInterpreter from tyrell.decider import Example, ExampleConstraintDecider from tyrell.synthesizer import Synthesizer from tyrell.dsl import Builder from tyrell.logger import get_logger logger = get_logger('SQLSynth') lowercases = "abcdefghijklmnopqrstuvwxyz" uppercases = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" tolower = str.maketrans(uppercases, lowercases) class Interpreter(PostOrderInterpreter): def eval_ConstString(self, v): return v def eval_constString(sefl, node, args): return args[0] def eval_ConstBool(self, v): return v == "True"
from ast import literal_eval from typing import List, cast from tyrell.spec.spec import TypeSpec, ProductionSpec, ProgramSpec, PredicateSpec, TyrellSpec from tyrell.spec.type import Type, EnumType, ValueType from tyrell.spec.expr import * from tyrell.spec.parser import Visitor_Recursive from tyrell.spec.util import enum_set_domain from tyrell.logger import get_logger logger = get_logger('tyrell.desugar') class ParseTreeProcessingError(RuntimeError): pass class TypeCollector(Visitor_Recursive): _spec: TypeSpec def __init__(self): self._spec = TypeSpec() def enum_decl(self, tree): name = str(tree.children[0]) domain = [literal_eval(str(x)) for x in tree.children[1].children] self._spec.define_type(EnumType(name, domain)) def enum_set_decl(self, tree): name = str(tree.children[0]) max_len = int(tree.children[1])