def test_ast_sqllite(self):
     ds = SQLDataSource(
         dialect='sqlite',
         database='sample_data.db',
         table='sample_tbl',
     )
     nodes = [
         (Name('input'),
          Call(Name('dbConnect'), Call(Name('dbDriver'),
                                       Constant('SQLite')),
               (Name('dbname'), Constant('sample_data.db')))),
         (Name('input_table'), Constant('sample_tbl')),
     ]
     self.assertEqual(ds.ast(), nodes)
Exemplo n.º 2
0
def seq_to_vector(seq):
    """ Convert a Python sequence to an R vector.
    """
    # R does not distinguish between length 1 vectors and scalars.
    if len(seq) == 1:
        return cast_to_constant(seq[0])

    return Call(Name('c'), [cast_to_constant(item) for item in seq])
 def test_ast_mysql(self):
     ds = SQLDataSource(
         dialect='mysql',
         host='example.com',
         user='******',
         password='******',
         database='sample_data',
         table='sample_tbl',
     )
     nodes = [
         (Name('input'),
          Call(Name('dbConnect'), Call(Name('dbDriver'), Constant('MySQL')),
               (Name('dbname'), Constant('sample_data')),
               (Name('user'), Constant('frodo')),
               (Name('password'), Constant('friend')),
               (Name('host'), Constant('example.com')))),
         (Name('input_table'), Constant('sample_tbl')),
     ]
     self.assertEqual(ds.ast(), nodes)
Exemplo n.º 4
0
    def test_numerical_control(self):
        breaks = [0, 30, 60, 90, 120]
        control = NumericalControl(name='age_bin',
                                   expression='age',
                                   auto_breaks=False,
                                   breaks=breaks)
        ast = Call(
            Name('def_control'),
            (Name('age_bin'),
             Call(Name('cut'), Raw('age'),
                  (Name('breaks'), Call(Name('c'), map(Constant, breaks))),
                  (Name('right'), Constant(False)))))
        self.assertEqual(control.ast(), ast)

        control.auto_breaks = True
        control.num_breaks = 5
        control.closed_on_left = False
        ast = Call(Name('def_control'), (Name('age_bin'),
                                         Call(Name('cut'), Raw('age'),
                                              (Name('breaks'), Constant(5)))))
        self.assertEqual(control.ast(), ast)
Exemplo n.º 5
0
def OperatorReduce(op, args, default=None):
    """ Reduces the argument list by applying a binary operator.
    
    Assumes the operator is left associative.
    """
    if len(args) == 0:
        if default is None:
            raise ValueError('Empty list and no default value')
        else:
            return default
    elif len(args) == 1:
        return args[0]
    else:
        return Call(op, OperatorReduce(op, args[:-1], default), args[-1])
Exemplo n.º 6
0
 def test_ast_rds(self):
     ds = FileDataSource(path='foo.RDS')
     target = Call(Name('readRDS'), Constant('foo.RDS'))
     self.assertEqual(ds.ast(), target)
Exemplo n.º 7
0
 def test_ast_xls(self):
     ds = FileDataSource(path='foo.xls')
     target = Call(Name('read.xlsx'), Constant('foo.xls'), Constant(1))
     self.assertEqual(ds.ast(), target)
Exemplo n.º 8
0
def Assign(name, value):
    """ Macro to create assignment call.
    """
    return Call(Name('<-'), name, value)
Exemplo n.º 9
0
def seq_to_list(seq):
    """ Convert a Python sequence to an R list.
    """
    return Call(Name('list'), [cast_to_constant(item) for item in seq])
Exemplo n.º 10
0
 def test_factor_control(self):
     control = FactorControl(name='gender', expression='GENDER')
     ast = Call(Name('def_control'), (Name('gender'), Raw('GENDER')))
     self.assertEqual(control.ast(), ast)