Exemple #1
0
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){
Exemple #2
0
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
Exemple #3
0
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 = []
Exemple #4
0
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"
Exemple #6
0
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])