class SimpleCase(ValueOp): input_type = [ value(name='base'), list_of(value, name='cases'), list_of(value, name='results'), value(name='default') ] def __init__(self, base, cases, results, default): assert len(cases) == len(results) ValueOp.__init__(self, base, cases, results, default) def root_tables(self): base, cases, results, default = self.args all_exprs = [base] + cases + results if default is not None: all_exprs.append(default) return ir.distinct_roots(*all_exprs) def output_type(self): base, cases, results, default = self.args out_exprs = results + [default] typename = rules.highest_precedence_type(out_exprs) return rules.shape_like(base, typename)
def test_valid_list_of_extra(): validator = rlz.tuple_of(identity) assert validator((3, 2)) == tuple([3, 2]) validator = rlz.list_of(rlz.list_of(rlz.string)) result = validator([[], ['a']]) assert result[1][0].equals(ibis.literal('a'))
class MyOp(ops.ValueOp): input_type = [ rules.list_of(rules.enum(MyEnum), name='one', as_value_expr=custom_as_value_expr), rules.list_of(rules.enum(MyEnum2), name='two', as_value_expr=custom_as_value_expr), ]
class MyOp(ops.ValueOp): input_type = [ rules.list_of( rules.integer(as_value_expr=custom_as_value_expr), name='bar', ) ]
]) def test_valid_member_of(obj, value, expected): assert rlz.member_of(obj, value) == expected @pytest.mark.parametrize(('obj', 'value', 'expected'), [(Foo, 'c', IbisTypeError), (Bar, 'c', IbisTypeError), (Baz(3), 'b', IbisTypeError)]) def test_invalid_member_of(obj, value, expected): with pytest.raises(expected): rlz.member_of(obj, value) @pytest.mark.parametrize( ('validator', 'values', 'expected'), [(rlz.list_of(identity), (3, 2), ibis.sequence([3, 2])), (rlz.list_of(rlz.integer), (3, 2), ibis.sequence([3, 2])), (rlz.list_of(rlz.integer), (3, None), ibis.sequence([3, ibis.NA])), (rlz.list_of(rlz.string), ('a', ), ibis.sequence(['a'])), (rlz.list_of(rlz.string), ['a', 'b'], ibis.sequence(['a', 'b'])), pytest.param( rlz.list_of(rlz.list_of(rlz.string)), [[], ['a']], ibis.sequence([[], ['a']]), marks=pytest.mark.xfail(raises=ValueError, reason='Not yet implemented'), ), (rlz.list_of(rlz.boolean, min_length=2), [True, False], ibis.sequence([True, False]))]) def test_valid_list_of(validator, values, expected): result = validator(values)
class StringJoin(ValueOp): input_type = [string(name='sep'), list_of(string, min_length=1)] output_type = rules.shape_like_flatargs('string')
class FindInSet(ValueOp): input_type = [string(name='needle'), list_of(string, min_length=1)] output_type = rules.shape_like_arg(0, 'int64')
]) def test_valid_member_of(obj, value, expected): assert rlz.member_of(obj, value) == expected @pytest.mark.parametrize(('obj', 'value', 'expected'), [(Foo, 'c', IbisTypeError), (Bar, 'c', IbisTypeError), (Baz(3), 'b', IbisTypeError)]) def test_invalid_member_of(obj, value, expected): with pytest.raises(expected): rlz.member_of(obj, value) @pytest.mark.parametrize( ('validator', 'values', 'expected'), [(rlz.list_of(identity), 3, ibis.sequence([3])), (rlz.list_of(identity), (3, 2), ibis.sequence([3, 2])), (rlz.list_of(rlz.integer), (3, 2), ibis.sequence([3, 2])), (rlz.list_of(rlz.integer), (3, None), ibis.sequence([3, ibis.NA])), (rlz.list_of(rlz.string), 'asd', ibis.sequence(['asd'])), (rlz.list_of(rlz.boolean, min_length=2), [True, False], ibis.sequence([True, False]))]) def test_valid_list_of(validator, values, expected): result = validator(values) assert result.equals(expected) @pytest.mark.parametrize(('validator', 'values', 'expected'), [ (rlz.list_of(rlz.double, min_length=2), [1], IbisTypeError), (rlz.list_of(rlz.integer), 1.1, IbisTypeError), ])
('obj', 'value', 'expected'), [ (Foo, 'c', IbisTypeError), (Bar, 'c', IbisTypeError), (Baz(3), 'b', IbisTypeError), ], ) def test_invalid_member_of(obj, value, expected): with pytest.raises(expected): rlz.member_of(obj, value) @pytest.mark.parametrize( ('validator', 'values', 'expected'), [ (rlz.list_of(identity), (3, 2), ibis.sequence([3, 2])), (rlz.list_of(rlz.integer), (3, 2), ibis.sequence([3, 2])), (rlz.list_of(rlz.integer), (3, None), ibis.sequence([3, ibis.NA])), (rlz.list_of(rlz.string), ('a',), ibis.sequence(['a'])), (rlz.list_of(rlz.string), ['a', 'b'], ibis.sequence(['a', 'b'])), pytest.param( rlz.list_of(rlz.list_of(rlz.string)), [[], ['a']], ibis.sequence([[], ['a']]), marks=pytest.mark.xfail( raises=ValueError, reason='Not yet implemented' ), ), ( rlz.list_of(rlz.boolean, min_length=2), [True, False],