Exemple #1
0
 def test_var_dims(self):
     self.assertEqual(parse('var * bool', self.sym),
                      ct.DataShape(ct.Var(), ct.bool_))
     self.assertEqual(parse('var * var * bool', self.sym),
                      ct.DataShape(ct.Var(), ct.Var(), ct.bool_))
     self.assertEqual(parse('M * 5 * var * bool', self.sym),
                      ct.DataShape(ct.TypeVar('M'), ct.Fixed(5), ct.Var(), ct.bool_))
Exemple #2
0
 def test_typevar_dims(self):
     self.assertEqual(parse('M * bool', self.sym),
                      ct.DataShape(ct.TypeVar('M'), ct.bool_))
     self.assertEqual(parse('A * B * bool', self.sym),
                      ct.DataShape(ct.TypeVar('A'), ct.TypeVar('B'), ct.bool_))
     self.assertEqual(parse('A... * X * 3 * bool', self.sym),
                      ct.DataShape(ct.Ellipsis(ct.TypeVar('A')), ct.TypeVar('X'),
                                   ct.Fixed(3), ct.bool_))
Exemple #3
0
 def test_ellipses(self):
     self.assertEqual(parse('... * bool', self.sym),
                      ct.DataShape(ct.Ellipsis(), ct.bool_))
     self.assertEqual(parse('M * ... * bool', self.sym),
                      ct.DataShape(ct.TypeVar('M'), ct.Ellipsis(), ct.bool_))
     self.assertEqual(parse('M * ... * 3 * bool', self.sym),
                      ct.DataShape(ct.TypeVar('M'), ct.Ellipsis(),
                                   ct.Fixed(3), ct.bool_))
Exemple #4
0
 def test_unsigned_integers(self):
     self.assertEqual(parse('uint8', self.sym), ct.DataShape(ct.uint8))
     self.assertEqual(parse('uint16', self.sym), ct.DataShape(ct.uint16))
     self.assertEqual(parse('uint32', self.sym), ct.DataShape(ct.uint32))
     self.assertEqual(parse('uint64', self.sym), ct.DataShape(ct.uint64))
     #self.assertEqual(parse('uint128', self.sym),
     #                 ct.DataShape(ct.uint128))
     self.assertEqual(parse('uintptr', self.sym), ct.DataShape(ct.uintptr))
Exemple #5
0
 def test_complex(self):
     self.assertEqual(parse('complex[float32]', self.sym),
                      ct.DataShape(ct.complex_float32))
     self.assertEqual(parse('complex[float64]', self.sym),
                      ct.DataShape(ct.complex_float64))
     self.assertEqual(parse('complex', self.sym), ct.DataShape(ct.complex_))
     # 'complex' is an alias for 'complex[float64]'
     self.assertEqual(parse('complex', self.sym),
                      parse('complex[float64]', self.sym))
Exemple #6
0
 def test_float(self):
     self.assertEqual(parse('float16', self.sym), ct.DataShape(ct.float16))
     self.assertEqual(parse('float32', self.sym), ct.DataShape(ct.float32))
     self.assertEqual(parse('float64', self.sym), ct.DataShape(ct.float64))
     # self.assertEqual(parse('float128', self.sym),
     #                 ct.DataShape(ct.float128))
     self.assertEqual(parse('real', self.sym), ct.DataShape(ct.real))
     # 'real' is an alias for 'float64'
     self.assertEqual(parse('real', self.sym), parse('float64', self.sym))
Exemple #7
0
 def test_fixed_dims(self):
     self.assertEqual(parse('3 * bool', self.sym),
                      ct.DataShape(ct.Fixed(3), ct.bool_))
     self.assertEqual(parse('7 * 3 * bool', self.sym),
                      ct.DataShape(ct.Fixed(7), ct.Fixed(3), ct.bool_))
     self.assertEqual(parse('5 * 3 * 12 * bool', self.sym),
                      ct.DataShape(ct.Fixed(5), ct.Fixed(3),
                                   ct.Fixed(12), ct.bool_))
     self.assertEqual(parse('2 * 3 * 4 * 5 * bool', self.sym),
                      ct.DataShape(ct.Fixed(2), ct.Fixed(3),
                                   ct.Fixed(4), ct.Fixed(5), ct.bool_))
Exemple #8
0
 def test_tuple(self):
     # Simple tuple
     self.assertEqual(parse('(float32)', self.sym),
                      ct.DataShape(ct.Tuple([ct.DataShape(ct.float32)])))
     self.assertEqual(parse('(int16, int32)', self.sym),
                      ct.DataShape(ct.Tuple([ct.DataShape(ct.int16),
                                             ct.DataShape(ct.int32)])))
     # A trailing comma is ok
     self.assertEqual(parse('(float32,)', self.sym),
                      ct.DataShape(ct.Tuple([ct.DataShape(ct.float32)])))
     self.assertEqual(parse('(int16, int32,)', self.sym),
                      ct.DataShape(ct.Tuple([ct.DataShape(ct.int16),
                                             ct.DataShape(ct.int32)])))
Exemple #9
0
 def assertExpectedParse(ds_str, expected):
     # Set the expected value, and call the parser
     expected_blah[0] = expected
     self.assertEqual(parse(ds_str, sym), ct.DataShape(ct.float32))
     # Make sure the expected value was actually run by
     # check that it reset the expected value to None
     self.assertEqual(expected_blah[0], None,
                      'The test unary type constructor did not run')
Exemple #10
0
    def test_binary_dtype_constr(self):
        # Create a symbol table with no types in it, so we can
        # make some isolated type constructors for testing
        sym = datashape.TypeSymbolTable(bare=True)
        # A limited set of dtypes for testing
        sym.dtype['int8'] = ct.int8
        sym.dtype['uint16'] = ct.uint16
        sym.dtype['float64'] = ct.float64
        # TypeVar type constructor
        sym.dtype_constr['typevar'] = ct.TypeVar
        # Binary dtype constructor that asserts on the argument values
        expected_arg = [None, None]

        def _binary_type_constr(a, b):
            self.assertEqual(a, expected_arg[0])
            self.assertEqual(b, expected_arg[1])
            expected_arg[0] = None
            expected_arg[1] = None
            return ct.float32

        sym.dtype_constr['binary'] = _binary_type_constr

        def assertExpectedParse(ds_str, expected_a, expected_b):
            # Set the expected value, and call the parser
            expected_arg[0] = expected_a
            expected_arg[1] = expected_b
            self.assertEqual(parse(ds_str, sym), ct.DataShape(ct.float32))
            # Make sure the expected value was actually run by
            # check that it reset the expected value to None
            self.assertEqual(expected_arg, [None, None],
                             'The test binary type constructor did not run')

        # Positional args
        assertExpectedParse('binary[1, 0]', 1, 0)
        assertExpectedParse('binary[0, "test"]', 0, 'test')
        assertExpectedParse('binary[int8, "test"]', ct.DataShape(ct.int8),
                            'test')
        assertExpectedParse('binary[[1,3,5], "test"]', [1, 3, 5], 'test')
        # Positional and keyword args
        assertExpectedParse('binary[0, b=1]', 0, 1)
        assertExpectedParse('binary["test", b=A]', 'test',
                            ct.DataShape(ct.TypeVar('A')))
        assertExpectedParse('binary[[3, 6], b=int8]', [3, 6],
                            ct.DataShape(ct.int8))
        assertExpectedParse('binary[Arg, b=["x", "test"]]',
                            ct.DataShape(ct.TypeVar('Arg')), ['x', 'test'])
        # Keyword args
        assertExpectedParse('binary[a=1, b=0]', 1, 0)
        assertExpectedParse('binary[a=[int8, A, uint16], b="x"]', [
            ct.DataShape(ct.int8),
            ct.DataShape(ct.TypeVar('A')),
            ct.DataShape(ct.uint16)
        ], 'x')
Exemple #11
0
 def test_signed_integers(self):
     self.assertEqual(parse('int8', self.sym), ct.DataShape(ct.int8))
     self.assertEqual(parse('int16', self.sym), ct.DataShape(ct.int16))
     self.assertEqual(parse('int32', self.sym), ct.DataShape(ct.int32))
     self.assertEqual(parse('int64', self.sym), ct.DataShape(ct.int64))
     #self.assertEqual(parse('int128', self.sym),
     #                 ct.DataShape(ct.int128))
     self.assertEqual(parse('int', self.sym), ct.DataShape(ct.int_))
     # 'int' is an alias for 'int32'
     self.assertEqual(parse('int', self.sym), parse('int32', self.sym))
     self.assertEqual(parse('intptr', self.sym), ct.DataShape(ct.intptr))
Exemple #12
0
 def test_option(self):
     self.assertEqual(parse('option[int32]', self.sym),
                      ct.DataShape(ct.Option(ct.int32)))
     self.assertEqual(parse('?int32', self.sym),
                      ct.DataShape(ct.Option(ct.int32)))
     self.assertEqual(
         parse('2 * 3 * option[int32]', self.sym),
         ct.DataShape(ct.Fixed(2), ct.Fixed(3), ct.Option(ct.int32)))
     self.assertEqual(
         parse('2 * 3 * ?int32', self.sym),
         ct.DataShape(ct.Fixed(2), ct.Fixed(3), ct.Option(ct.int32)))
     self.assertEqual(
         parse('2 * option[3 * int32]', self.sym),
         ct.DataShape(ct.Fixed(2),
                      ct.Option(ct.DataShape(ct.Fixed(3), ct.int32))))
     self.assertEqual(
         parse('2 * ?3 * int32', self.sym),
         ct.DataShape(ct.Fixed(2),
                      ct.Option(ct.DataShape(ct.Fixed(3), ct.int32))))
Exemple #13
0
 def test_null(self):
     self.assertEqual(parse('null', self.sym), ct.DataShape(ct.null))
Exemple #14
0
 def test_struct(self):
     # Simple struct
     self.assertEqual(
         parse('{x: int16, y: int32}', self.sym),
         ct.DataShape(
             ct.Record([('x', ct.DataShape(ct.int16)),
                        ('y', ct.DataShape(ct.int32))])))
     # A trailing comma is ok
     self.assertEqual(
         parse('{x: int16, y: int32,}', self.sym),
         ct.DataShape(
             ct.Record([('x', ct.DataShape(ct.int16)),
                        ('y', ct.DataShape(ct.int32))])))
     # Field names starting with _ and caps
     self.assertEqual(
         parse('{_x: int16, Zed: int32,}', self.sym),
         ct.DataShape(
             ct.Record([('_x', ct.DataShape(ct.int16)),
                        ('Zed', ct.DataShape(ct.int32))])))
     # A slightly bigger example
     ds_str = """3 * var * {
                     id : int32,
                     name : string,
                     description : {
                         language : string,
                         text : string
                     },
                     entries : var * {
                         date : date,
                         text : string
                     }
                 }"""
     int32 = ct.DataShape(ct.int32)
     string = ct.DataShape(ct.string)
     date = ct.DataShape(ct.date_)
     ds = (ct.Fixed(3), ct.Var(),
           ct.Record([
               ('id', int32), ('name', string),
               ('description',
                ct.DataShape(
                    ct.Record([('language', string), ('text', string)]))),
               ('entries',
                ct.DataShape(ct.Var(),
                             ct.Record([('date', date), ('text', string)])))
           ]))
     self.assertEqual(parse(ds_str, self.sym), ct.DataShape(*ds))
Exemple #15
0
 def test_bool(self):
     self.assertEqual(parse('bool', self.sym), ct.DataShape(ct.bool_))
Exemple #16
0
def test_funcproto(sym):
    # Simple funcproto
    assert (parse('(float32) -> float64', sym) == ct.DataShape(
        ct.Function(ct.DataShape(ct.float32), ct.DataShape(ct.float64))))
    assert (parse('(int16, int32) -> bool', sym) == ct.DataShape(
        ct.Function(ct.DataShape(ct.int16), ct.DataShape(ct.int32),
                    ct.DataShape(ct.bool_))))
    # A trailing comma is ok
    assert (parse('(float32,) -> float64', sym) == ct.DataShape(
        ct.Function(ct.DataShape(ct.float32), ct.DataShape(ct.float64))))
    assert_dshape_equal(
        parse('(int16, int32,) -> bool', sym),
        ct.DataShape(
            ct.Function(ct.DataShape(ct.int16), ct.DataShape(ct.int32),
                        ct.DataShape(ct.bool_))))

    # Empty argument signature.
    assert_dshape_equal(parse('() -> bool', sym),
                        ct.DataShape(ct.Function(ct.DataShape(ct.bool_), )))
Exemple #17
0
def test_funcproto(sym):
    # Simple funcproto
    assert (parse('(float32) -> float64', sym) == ct.DataShape(
        ct.Function(ct.DataShape(ct.float32), ct.DataShape(ct.float64))))
    assert (parse('(int16, int32) -> bool', sym) == ct.DataShape(
        ct.Function(ct.DataShape(ct.int16), ct.DataShape(ct.int32),
                    ct.DataShape(ct.bool_))))
    # A trailing comma is ok
    assert (parse('(float32,) -> float64', sym) == ct.DataShape(
        ct.Function(ct.DataShape(ct.float32), ct.DataShape(ct.float64))))
    assert (parse('(int16, int32,) -> bool', sym) == ct.DataShape(
        ct.Function(ct.DataShape(ct.int16), ct.DataShape(ct.int32),
                    ct.DataShape(ct.bool_))))
Exemple #18
0
 def test_funcproto(self):
     # Simple funcproto
     self.assertEqual(
         parse('(float32) -> float64', self.sym),
         ct.DataShape(
             ct.Function(ct.DataShape(ct.float32),
                         ct.DataShape(ct.float64))))
     self.assertEqual(
         parse('(int16, int32) -> bool', self.sym),
         ct.DataShape(
             ct.Function(ct.DataShape(ct.int16), ct.DataShape(ct.int32),
                         ct.DataShape(ct.bool_))))
     # A trailing comma is ok
     self.assertEqual(
         parse('(float32,) -> float64', self.sym),
         ct.DataShape(
             ct.Function(ct.DataShape(ct.float32),
                         ct.DataShape(ct.float64))))
     self.assertEqual(
         parse('(int16, int32,) -> bool', self.sym),
         ct.DataShape(
             ct.Function(ct.DataShape(ct.int16), ct.DataShape(ct.int32),
                         ct.DataShape(ct.bool_))))
Exemple #19
0
 def test_void(self):
     self.assertEqual(parse('void', self.sym), ct.DataShape(ct.void))
Exemple #20
0
    def test_unary_dtype_constr(self):
        # Create a symbol table with no types in it, so we can
        # make some isolated type constructors for testing
        sym = datashape.TypeSymbolTable(bare=True)
        # A limited set of dtypes for testing
        sym.dtype['int8'] = ct.int8
        sym.dtype['uint16'] = ct.uint16
        sym.dtype['float64'] = ct.float64
        # TypeVar type constructor
        sym.dtype_constr['typevar'] = ct.TypeVar
        # Unary dtype constructor that asserts on the argument value
        expected_blah = [None]

        def _unary_type_constr(blah):
            self.assertEqual(blah, expected_blah[0])
            expected_blah[0] = None
            return ct.float32

        sym.dtype_constr['unary'] = _unary_type_constr

        def assertExpectedParse(ds_str, expected):
            # Set the expected value, and call the parser
            expected_blah[0] = expected
            self.assertEqual(parse(ds_str, sym), ct.DataShape(ct.float32))
            # Make sure the expected value was actually run by
            # check that it reset the expected value to None
            self.assertEqual(expected_blah[0], None,
                             'The test unary type constructor did not run')

        # Integer parameter (positional)
        assertExpectedParse('unary[0]', 0)
        assertExpectedParse('unary[100000]', 100000)
        # String parameter (positional)
        assertExpectedParse('unary["test"]', 'test')
        assertExpectedParse("unary['test']", 'test')
        assertExpectedParse('unary["\\uc548\\ub155"]', u'\uc548\ub155')
        assertExpectedParse(u'unary["\uc548\ub155"]', u'\uc548\ub155')
        # DataShape parameter (positional)
        assertExpectedParse('unary[int8]', ct.DataShape(ct.int8))
        assertExpectedParse('unary[X]', ct.DataShape(ct.TypeVar('X')))
        # Empty list parameter (positional)
        assertExpectedParse('unary[[]]', [])
        # List of integers parameter (positional)
        assertExpectedParse('unary[[0, 3, 12]]', [0, 3, 12])
        # List of strings parameter (positional)
        assertExpectedParse('unary[["test", "one", "two"]]',
                            ["test", "one", "two"])
        # List of datashapes parameter (positional)
        assertExpectedParse('unary[[float64, int8, uint16]]', [
            ct.DataShape(ct.float64),
            ct.DataShape(ct.int8),
            ct.DataShape(ct.uint16)
        ])

        # Integer parameter (keyword)
        assertExpectedParse('unary[blah=0]', 0)
        assertExpectedParse('unary[blah=100000]', 100000)
        # String parameter (keyword)
        assertExpectedParse('unary[blah="test"]', 'test')
        assertExpectedParse("unary[blah='test']", 'test')
        assertExpectedParse('unary[blah="\\uc548\\ub155"]', u'\uc548\ub155')
        assertExpectedParse(u'unary[blah="\uc548\ub155"]', u'\uc548\ub155')
        # DataShape parameter (keyword)
        assertExpectedParse('unary[blah=int8]', ct.DataShape(ct.int8))
        assertExpectedParse('unary[blah=X]', ct.DataShape(ct.TypeVar('X')))
        # Empty list parameter (keyword)
        assertExpectedParse('unary[blah=[]]', [])
        # List of integers parameter (keyword)
        assertExpectedParse('unary[blah=[0, 3, 12]]', [0, 3, 12])
        # List of strings parameter (keyword)
        assertExpectedParse('unary[blah=["test", "one", "two"]]',
                            ["test", "one", "two"])
        # List of datashapes parameter (keyword)
        assertExpectedParse('unary[blah=[float64, int8, uint16]]', [
            ct.DataShape(ct.float64),
            ct.DataShape(ct.int8),
            ct.DataShape(ct.uint16)
        ])
Exemple #21
0
 def test_object(self):
     self.assertEqual(parse('object', self.sym), ct.DataShape(ct.object_))