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)
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)
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)
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])
def test_ast_rds(self): ds = FileDataSource(path='foo.RDS') target = Call(Name('readRDS'), Constant('foo.RDS')) self.assertEqual(ds.ast(), target)
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)
def Assign(name, value): """ Macro to create assignment call. """ return Call(Name('<-'), name, value)
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])
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)