Example #1
0
    def testNumpyFloat(self):

        class A(Object):
            f = Float.T()
            i = Int.T()

        try:
            import numpy as num

            a = A(f=num.float64(1.0), i=num.int64(1))
            a2 = load_string(a.dump())
            assert a2.f == 1.0
            assert a2.i == 1

            with self.assertRaises(ValidationError):
                a.validate()

            a = A(f=num.float32(1.0), i=num.int32(1))
            a2 = load_string(a.dump())
            assert a2.f == 1.0
            assert a2.i == 1

            with self.assertRaises(ValidationError):
                a.validate()

        except ImportError:
            pass
Example #2
0
    def testNumpyFloat(self):
        class A(Object):
            f = Float.T()
            i = Int.T()

        try:
            import numpy as num

            a = A(f=num.float64(1.0), i=num.int64(1))
            a2 = load_string(a.dump())
            assert a2.f == 1.0
            assert a2.i == 1

            with self.assertRaises(ValidationError):
                a.validate()

            a = A(f=num.float32(1.0), i=num.int32(1))
            a2 = load_string(a.dump())
            assert a2.f == 1.0
            assert a2.i == 1

            with self.assertRaises(ValidationError):
                a.validate()

        except ImportError:
            pass
Example #3
0
    def testAny(self):
        class X(Object):
            y = Int.T(default=1)

        class A(Object):
            x = Any.T()
            lst = List.T(Any.T())

        a1 = A(x=X(y=33))
        a1.validate()
        a1c = load_string(a1.dump())
        self.assertEqual(a1c.x.y, 33)

        a2 = A(x=22, lst=['a', 44, X(y=22)])
        a2.validate()
        a2c = load_string(a2.dump())
        self.assertEqual(a2c.x, 22)
        self.assertEqual(a2c.lst[:2], ['a', 44])
        self.assertEqual(a2c.lst[2].y, 22)

        a3 = A(x=X(y='10'))
        with self.assertRaises(ValidationError):
            a3.validate()

        a3.regularize()
        assert a3.x.y == 10
Example #4
0
    def testAny(self):
        class X(Object):
            y = Int.T(default=1)

        class A(Object):
            x = Any.T()
            l = List.T(Any.T())

        a1 = A(x=X(y=33))
        a1.validate()
        a1c = load_string(a1.dump())
        self.assertEqual(a1c.x.y, 33)

        a2 = A(x=22, l=['a', 44, X(y=22)])
        a2.validate()
        a2c = load_string(a2.dump())
        self.assertEqual(a2c.x, 22)
        self.assertEqual(a2c.l[:2], ['a', 44])
        self.assertEqual(a2c.l[2].y, 22)

        a3 = A(x=X(y='10'))
        with self.assertRaises(ValidationError):
            a3.validate()

        a3.regularize()
        assert a3.x.y == 10
Example #5
0
    def test_dump_load(self):

        r = trace.FrequencyResponse()

        r = trace.PoleZeroResponse([0j, 0j], [1j, 2j, 1 + 3j, 1 - 3j], 1.0)
        r.regularize()
        r2 = guts.load_string(r.dump())
        assert cnumeq(r.poles, r2.poles, 1e-6)
        assert cnumeq(r.zeros, r2.zeros, 1e-6)
        assert numeq(r.constant, r2.constant)

        r = trace.SampledResponse([0., 1., 5., 10.], [0., 1., 1., 0.])

        r.regularize()
        r2 = guts.load_string(r.dump())
        assert numeq(r.frequencies, r2.frequencies, 1e-6)
        assert cnumeq(r.values, r2.values, 1e-6)

        r = trace.IntegrationResponse(2, 5.0)
        r2 = guts.load_string(r.dump())
        assert numeq(r.n, r2.n)
        assert numeq(r.gain, r2.gain, 1e-6)

        r = trace.DifferentiationResponse(2, 5.0)
        r2 = guts.load_string(r.dump())
        assert numeq(r.n, r2.n)
        assert numeq(r.gain, r2.gain, 1e-6)

        r = trace.AnalogFilterResponse(a=[1.0, 2.0, 3.0], b=[2.0, 3.0])
        r2 = guts.load_string(r.dump())
        assert numeq(r.a, r2.a, 1e-6)
        assert numeq(r.b, r2.b, 1e-6)
Example #6
0
    def testSObject(self):

        class DotName(SObject):
            network = String.T()
            station = String.T()

            def __init__(self, s=None, **kwargs):
                if s is not None:
                    network, station = s.split('.')
                    kwargs = dict(network=network, station=station)

                SObject.__init__(self, **kwargs)

            def __str__(self):
                return '.'.join((self.network, self.station))

        class X(Object):
            xmltagname = 'root'
            dn = DotName.T()

        x = X(dn=DotName(network='abc', station='def'))
        self.assertEqual(x.dn.network, 'abc')
        self.assertEqual(x.dn.station, 'def')
        x = load_string(dump(x))
        self.assertEqual(x.dn.network, 'abc')
        self.assertEqual(x.dn.station, 'def')
        x = load_xml_string(dump_xml(x))
        self.assertEqual(x.dn.network, 'abc')
        self.assertEqual(x.dn.station, 'def')
Example #7
0
    def testSObject(self):

        class DotName(SObject):
            network = String.T()
            station = String.T()

            def __init__(self, s=None, **kwargs):
                if s is not None:
                    network, station = s.split('.')
                    kwargs = dict(network=network, station=station)

                SObject.__init__(self, **kwargs)

            def __str__(self):
                return '.'.join((self.network, self.station))

        class X(Object):
            xmltagname = 'root'
            dn = DotName.T()

        x = X(dn=DotName(network='abc', station='def'))
        self.assertEqual(x.dn.network, 'abc')
        self.assertEqual(x.dn.station, 'def')
        x = load_string(dump(x))
        self.assertEqual(x.dn.network, 'abc')
        self.assertEqual(x.dn.station, 'def')
        x = load_xml_string(dump_xml(x))
        self.assertEqual(x.dn.network, 'abc')
        self.assertEqual(x.dn.station, 'def')
Example #8
0
    def testArray(self):
        from pyrocko.guts_array import Array
        import numpy as num

        shapes = [(None,), (1,), (10,), (1000,)]
        for shape in shapes:
            for serialize_as in ('base64', 'table'):
                class A(Object):
                    xmltagname = 'aroot'
                    arr = Array.T(
                        shape=shape,
                        dtype=num.int,
                        serialize_as=serialize_as,
                        serialize_dtype='>i8')

                n = shape[0] or 1000
                a = A(arr=num.arange(n, dtype=num.int))

                b = load_string(a.dump())
                self.assertTrue(num.all(a.arr == b.arr))

                b = load_xml_string(a.dump_xml())
                self.assertTrue(num.all(a.arr == b.arr))

                if shape[0] is not None:
                    with self.assertRaises(ValidationError):
                        a = A(arr=num.arange(n+10, dtype=num.int))
                        a.validate()

        for s0 in [None, 2, 10]:
            for s1 in [None, 2, 10]:
                class A(Object):
                    xmltagname = 'aroot'
                    arr = Array.T(
                        shape=(s0, s1),
                        dtype=num.int)

                n0 = s0 or 100
                n1 = s1 or 100
                a = A(arr=num.arange(n0*n1, dtype=num.int).reshape((n0, n1)))
                b = load_string(a.dump())
                self.assertTrue(num.all(a.arr == b.arr))

                b = load_xml_string(a.dump_xml())
                self.assertTrue(num.all(a.arr == b.arr))
Example #9
0
    def testArray(self):
        from pyrocko.guts_array import Array
        import numpy as num

        shapes = [(None,), (1,), (10,), (1000,)]
        for shape in shapes:
            for serialize_as in ('base64', 'table', 'npy', 'base64+meta'):
                class A(Object):
                    xmltagname = 'aroot'
                    arr = Array.T(
                        shape=shape,
                        dtype=num.int,
                        serialize_as=serialize_as,
                        serialize_dtype='>i8')

                n = shape[0] or 10
                a = A(arr=num.arange(n, dtype=num.int))
                b = load_string(a.dump())
                self.assertTrue(num.all(a.arr == b.arr))

                if serialize_as != 'base64+meta':
                    b = load_xml_string(a.dump_xml())
                    self.assertTrue(num.all(a.arr == b.arr))

                if shape[0] is not None:
                    with self.assertRaises(ValidationError):
                        a = A(arr=num.arange(n+10, dtype=num.int))
                        a.validate()

        for s0 in [None, 2, 10]:
            for s1 in [None, 2, 10]:
                class A(Object):
                    xmltagname = 'aroot'
                    arr = Array.T(
                        shape=(s0, s1),
                        dtype=num.int)

                n0 = s0 or 100
                n1 = s1 or 100
                a = A(arr=num.arange(n0*n1, dtype=num.int).reshape((n0, n1)))
                b = load_string(a.dump())
                self.assertTrue(num.all(a.arr == b.arr))

                b = load_xml_string(a.dump_xml())
                self.assertTrue(num.all(a.arr == b.arr))
Example #10
0
    def testEmpty(self):
        class A(Object):
            pass

        class B(Object):
            a = A.T()

        b = B(a=A())
        b2 = load_string(b.dump())
        assert (isinstance(b2.a, A))
Example #11
0
    def test_yaml(self):
        ydata = num.random.random(100)
        tmin = time.time()
        tr1 = trace.Trace(
            'N', 'STA1', '', 'BHZ', tmin=tmin, deltat=0.1, ydata=ydata)

        s = guts.dump(tr1)
        tr2 = guts.load_string(s)

        assert tr1 == tr2
Example #12
0
    def testTypedListClass(self):

        FloatList = make_typed_list_class(Float)

        class A(Object):
            vals = FloatList.T()

        a = A(vals=[1., 2., 3.])
        a.validate()
        a2 = load_string(a.dump())
        assert a2.vals == a.vals
Example #13
0
    def testEmpty(self):

        class A(Object):
            pass

        class B(Object):
            a = A.T()

        b = B(a=A())
        b2 = load_string(b.dump())
        assert(isinstance(b2.a, A))
Example #14
0
    def testTypedListClass(self):

        FloatList = make_typed_list_class(Float)

        class A(Object):
            vals = FloatList.T()

        a = A(vals=[1., 2., 3.])
        a.validate()
        a2 = load_string(a.dump())
        assert a2.vals == a.vals
Example #15
0
    def testArrayNoDtype(self):
        from pyrocko.guts_array import Array
        import numpy as num

        class A(Object):
            arr = Array.T(serialize_as='base64+meta')

        for dtype in (num.int, num.float):
            a = A(arr=num.zeros((3, 3), dtype=dtype))
            b = load_string(a.dump())
            assert a.arr.shape == b.arr.shape
            self.assertTrue(num.all(a.arr == b.arr))

        b_int = load_string  # noqa
Example #16
0
    def testArrayNoDtype(self):
        from pyrocko.guts_array import Array
        import numpy as num

        class A(Object):
            arr = Array.T(serialize_as='base64+meta')

        for dtype in (num.int, num.float):
            a = A(arr=num.zeros((3, 3), dtype=dtype))
            b = load_string(a.dump())
            assert a.arr.shape == b.arr.shape
            self.assertTrue(num.all(a.arr == b.arr))

        b_int = load_string  # noqa
Example #17
0
    def test_dump_load(self):

        r = trace.FrequencyResponse()

        r = trace.PoleZeroResponse([0j, 0j], [1j, 2j, 1+3j, 1-3j], 1.0)
        r.regularize()
        r2 = guts.load_string(r.dump())
        assert cnumeq(r.poles, r2.poles, 1e-6)
        assert cnumeq(r.zeros, r2.zeros, 1e-6)
        assert numeq(r.constant, r2.constant)

        r = trace.SampledResponse(
            [0., 1., 5., 10.],
            [0., 1., 1., 0.])

        r.regularize()
        r2 = guts.load_string(r.dump())
        assert numeq(r.frequencies, r2.frequencies, 1e-6)
        assert cnumeq(r.values, r2.values, 1e-6)

        r = trace.IntegrationResponse(2, 5.0)
        r2 = guts.load_string(r.dump())
        assert numeq(r.n, r2.n)
        assert numeq(r.gain, r2.gain, 1e-6)

        r = trace.DifferentiationResponse(2, 5.0)
        r2 = guts.load_string(r.dump())
        assert numeq(r.n, r2.n)
        assert numeq(r.gain, r2.gain, 1e-6)

        r = trace.AnalogFilterResponse(
            a=[1.0, 2.0, 3.0],
            b=[2.0, 3.0])
        r2 = guts.load_string(r.dump())
        assert numeq(r.a, r2.a, 1e-6)
        assert numeq(r.b, r2.b, 1e-6)
Example #18
0
    def test_sgrid(self):

        r = gf.Range

        source = gf.DCSource()
        sgrid = source.grid(rake=r(-10, 10, 1),
                            strike=r(-100, 100, n=21),
                            depth=r('0k .. 100k : 10k'),
                            moment=r(1, 2, 1))

        sgrid = guts.load_string(sgrid.dump())
        n = len(sgrid)
        i = 0
        for source in sgrid:
            i += 1

        assert i == n
Example #19
0
    def basicTypeTest(self):

        class X(Object):
            a = Type.T()
            b = Type.T(optional=True)
            c = Type.T(default=sample)
            d = List.T(Type.T())
            e = Tuple.T(1, Type.T())
            xmltagname = 'x'

        x = X(a=sample_in, e=(sample_in,))
        x.d.append(sample_in)
        if sample_in is not sample:
            with self.assertRaises(ValidationError):
                x.validate()

        x.validate(regularize=sample_in is not sample)
        self.assertEqualNanAware(sample, x.a)

        if not xml:
            x2 = load_string(x.dump())

        else:
            x2 = load_xml_string(x.dump_xml())

        self.assertEqualNanAware(x.a, x2.a)
        self.assertIsNone(x.b)
        self.assertIsNone(x2.b)
        self.assertEqualNanAware(sample, x.c)
        self.assertEqualNanAware(sample, x2.c)
        self.assertTrue(isinstance(x.d, list))
        self.assertTrue(isinstance(x2.d, list))
        self.assertEqualNanAware(x.d[0], sample)
        self.assertEqualNanAware(x2.d[0], sample)
        self.assertEqual(len(x.d), 1)
        self.assertEqual(len(x2.d), 1)
        self.assertTrue(isinstance(x.e, tuple))
        self.assertTrue(isinstance(x2.e, tuple))
        self.assertEqualNanAware(x.e[0], sample)
        self.assertEqualNanAware(x2.e[0], sample)
        self.assertEqual(len(x.e), 1)
        self.assertEqual(len(x2.e), 1)
Example #20
0
    def basicTypeTest(self):

        class X(Object):
            a = Type.T()
            b = Type.T(optional=True)
            c = Type.T(default=sample)
            d = List.T(Type.T())
            e = Tuple.T(1, Type.T())
            xmltagname = 'x'

        x = X(a=sample_in, e=(sample_in,))
        x.d.append(sample_in)
        if sample_in is not sample:
            with self.assertRaises(ValidationError):
                x.validate()

        x.validate(regularize=sample_in is not sample)
        self.assertEqualNanAware(sample, x.a)

        if not xml:
            x2 = load_string(x.dump())

        else:
            x2 = load_xml_string(x.dump_xml())

        self.assertEqualNanAware(x.a, x2.a)
        self.assertIsNone(x.b)
        self.assertIsNone(x2.b)
        self.assertEqualNanAware(sample, x.c)
        self.assertEqualNanAware(sample, x2.c)
        self.assertTrue(isinstance(x.d, list))
        self.assertTrue(isinstance(x2.d, list))
        self.assertEqualNanAware(x.d[0], sample)
        self.assertEqualNanAware(x2.d[0], sample)
        self.assertEqual(len(x.d), 1)
        self.assertEqual(len(x2.d), 1)
        self.assertTrue(isinstance(x.e, tuple))
        self.assertTrue(isinstance(x2.e, tuple))
        self.assertEqualNanAware(x.e[0], sample)
        self.assertEqualNanAware(x2.e[0], sample)
        self.assertEqual(len(x.e), 1)
        self.assertEqual(len(x2.e), 1)
Example #21
0
    def testStyles(self):
        for cls, Class in [(str, String), (unicode, Unicode)]:

            class A(Object):
                s = Class.T(yamlstyle=None)
                s_singlequoted = Class.T(yamlstyle="'")
                s_doublequoted = Class.T(yamlstyle='"')
                s_literal = Class.T(yamlstyle='|')
                s_folded = Class.T(yamlstyle='>')
                l_block = List.T(Class.T(yamlstyle="'"), yamlstyle='block')
                l_flow = List.T(Class.T(yamlstyle="'"), yamlstyle='flow')

            a = A(s=cls('hello'),
                  s_singlequoted=cls('hello'),
                  s_doublequoted=cls('hello'),
                  s_literal=cls('hello\nhello\n'),
                  s_folded=cls('hello'),
                  l_block=[cls('a'), cls('b'), cls('c')],
                  l_flow=[cls('a'), cls('b'), cls('c')])

            a.validate()

            a2 = load_string(a.dump())
            s2 = ('\n'.join(a2.dump().splitlines()[1:]))
            assert type(a2.s) == cls

            assert s2 == '''
s: hello
s_singlequoted: 'hello'
s_doublequoted: "hello"
s_literal: |
  hello
  hello
s_folded: >-
  hello
l_block:
- 'a'
- 'b'
- 'c'
l_flow: ['a', 'b', 'c']
'''.strip()
Example #22
0
    def testDict(self):
        class A(Object):
            d = Dict.T(Int.T(), Float.T())

        a = A(d={1: 2.0})

        with self.assertRaises(NotImplementedError):
            a.dump_xml()

        a2 = load_string(a.dump())
        self.assertEqual(a2.dump(), a.dump())

        for (k1, v1), (k2, v2) in [[('1', 2.0), (1, 2.0)],
                                   [(1, '2.0'), (1, 2.0)],
                                   [('1', '2.0'), (1, 2.0)]]:

            a = A(d={k1: v1})
            with self.assertRaises(ValidationError):
                a.validate()

            a.regularize()
            self.assertEqual(a.d[k2], v2)
Example #23
0
    def testStyles(self):
        class A(Object):
            s = String.T(yamlstyle=None)
            s_singlequoted = String.T(yamlstyle="'")
            s_doublequoted = String.T(yamlstyle='"')
            s_literal = String.T(yamlstyle='|')
            s_folded = String.T(yamlstyle='>')
            l_block = List.T(String.T(yamlstyle="'"), yamlstyle='block')
            l_flow = List.T(String.T(yamlstyle="'"), yamlstyle='flow')

        a = A(
            s='hello',
            s_singlequoted='hello',
            s_doublequoted='hello',
            s_literal='hello\nhello\n',
            s_folded='hello',
            l_block=['a', 'b', 'c'],
            l_flow=['a', 'b', 'c'])

        a.validate()

        a2 = load_string(a.dump())
        s2 = ('\n'.join(a2.dump().splitlines()[1:]))

        assert s2 == '''
s: hello
s_singlequoted: 'hello'
s_doublequoted: "hello"
s_literal: |
  hello
  hello
s_folded: >-
  hello
l_block:
- 'a'
- 'b'
- 'c'
l_flow: ['a', 'b', 'c']
'''.strip()
Example #24
0
    def testStyles(self):
        class A(Object):
            s = String.T(yamlstyle=None)
            s_singlequoted = String.T(yamlstyle="'")
            s_doublequoted = String.T(yamlstyle='"')
            s_literal = String.T(yamlstyle='|')
            s_folded = String.T(yamlstyle='>')
            l_block = List.T(String.T(yamlstyle="'"), yamlstyle='block')
            l_flow = List.T(String.T(yamlstyle="'"), yamlstyle='flow')

        a = A(
            s='hello',
            s_singlequoted='hello',
            s_doublequoted='hello',
            s_literal='hello\nhello\n',
            s_folded='hello',
            l_block=['a', 'b', 'c'],
            l_flow=['a', 'b', 'c'])

        a.validate()

        a2 = load_string(a.dump())
        s2 = ('\n'.join(a2.dump().splitlines()[1:]))

        assert s2 == '''
s: hello
s_singlequoted: 'hello'
s_doublequoted: "hello"
s_literal: |
  hello
  hello
s_folded: >-
  hello
l_block:
- 'a'
- 'b'
- 'c'
l_flow: ['a', 'b', 'c']
'''.strip()
Example #25
0
    def testDict(self):
        class A(Object):
            d = Dict.T(Int.T(), Float.T())

        a = A(d={1: 2.0})

        with self.assertRaises(NotImplementedError):
            a.dump_xml()

        a2 = load_string(a.dump())
        self.assertEqual(a2.dump(), a.dump())

        for (k1, v1), (k2, v2) in [
                [('1', 2.0), (1, 2.0)],
                [(1, '2.0'), (1, 2.0)],
                [('1', '2.0'), (1, 2.0)]]:

            a = A(d={k1: v1})
            with self.assertRaises(ValidationError):
                a.validate()

            a.regularize()
            self.assertEqual(a.d[k2], v2)
Example #26
0
    def testUnion(self):

        class X1(Object):
            xmltagname = 'root'
            m = Union.T(members=[Int.T(), StringChoice.T(['small', 'large'])])

        class U(Union):
            members = [Int.T(), StringChoice.T(['small', 'large'])]

        class X2(Object):
            xmltagname = 'root'
            m = U.T()

        for X in [X1, X2]:
            X = X1
            x1 = X(m='1')
            with self.assertRaises(ValidationError):
                x1.validate()

            x1.validate(regularize=True)
            self.assertEqual(x1.m, 1)

            x2 = X(m='small')
            x2.validate()
            x3 = X(m='fail!')
            with self.assertRaises(ValidationError):
                x3.validate()
            with self.assertRaises(ValidationError):
                x3.validate(regularize=True)

            for x in [x1, x2]:
                y = load_string(x.dump())
                self.assertEqual(x.m, y.m)

            for x in [x1, x2]:
                y = load_xml_string(x.dump_xml())
                self.assertEqual(x.m, y.m)
Example #27
0
    def testUnion(self):

        class X1(Object):
            xmltagname = 'root'
            m = Union.T(members=[Int.T(), StringChoice.T(['small', 'large'])])

        class U(Union):
            members = [Int.T(), StringChoice.T(['small', 'large'])]

        class X2(Object):
            xmltagname = 'root'
            m = U.T()

        for X in [X1, X2]:
            X = X1
            x1 = X(m='1')
            with self.assertRaises(ValidationError):
                x1.validate()

            x1.validate(regularize=True)
            self.assertEqual(x1.m, 1)

            x2 = X(m='small')
            x2.validate()
            x3 = X(m='fail!')
            with self.assertRaises(ValidationError):
                x3.validate()
            with self.assertRaises(ValidationError):
                x3.validate(regularize=True)

            for x in [x1, x2]:
                y = load_string(x.dump())
                self.assertEqual(x.m, y.m)

            for x in [x1, x2]:
                y = load_xml_string(x.dump_xml())
                self.assertEqual(x.m, y.m)
Example #28
0
    def testOptionalDefault(self):

        from pyrocko.guts_array import Array, array_equal
        import numpy as num
        assert_ae = num.testing.assert_almost_equal

        def array_equal_noneaware(a, b):
            if a is None:
                return b is None
            elif b is None:
                return a is None
            else:
                return array_equal(a, b)

        data = [
            ('a', Int.T(),
                [None, 0, 1, 2],
                ['aerr', 0, 1, 2]),
            ('b', Int.T(optional=True),
                [None, 0, 1, 2],
                [None, 0, 1, 2]),
            ('c', Int.T(default=1),
                [None, 0, 1, 2],
                [1, 0, 1, 2]),
            ('d', Int.T(default=1, optional=True),
                [None, 0, 1, 2],
                [1, 0, 1, 2]),
            ('e', List.T(Int.T()),
                [None, [], [1], [2]],
                [[], [], [1], [2]]),
            ('f', List.T(Int.T(), optional=True),
                [None, [], [1], [2]],
                [None, [], [1], [2]]),
            ('g', List.T(Int.T(), default=[1]), [
                None, [], [1], [2]],
                [[1], [], [1], [2]]),
            ('h', List.T(Int.T(), default=[1], optional=True),
                [None, [], [1], [2]],
                [[1], [], [1], [2]]),
            ('i', Tuple.T(2, Int.T()),
                [None, (1, 2)],
                ['err', (1, 2)]),
            ('j', Tuple.T(2, Int.T(), optional=True),
                [None, (1, 2)],
                [None, (1, 2)]),
            ('k', Tuple.T(2, Int.T(), default=(1, 2)),
                [None, (1, 2), (3, 4)],
                [(1, 2), (1, 2), (3, 4)]),
            ('l', Tuple.T(2, Int.T(), default=(1, 2), optional=True),
                [None, (1, 2), (3, 4)],
                [(1, 2), (1, 2), (3, 4)]),
            ('i2', Tuple.T(None, Int.T()),
                [None, (1, 2)],
                [(), (1, 2)]),
            ('j2', Tuple.T(None, Int.T(), optional=True),
                [None, (), (3, 4)],
                [None, (), (3, 4)]),
            ('k2', Tuple.T(None, Int.T(), default=(1,)),
                [None, (), (3, 4)],
                [(1,), (), (3, 4)]),
            ('l2', Tuple.T(None, Int.T(), default=(1,), optional=True),
                [None, (), (3, 4)],
                [(1,), (), (3, 4)]),
            ('m', Array.T(shape=(None,), dtype=num.int, serialize_as='list'),
                [num.arange(0), num.arange(2)],
                [num.arange(0), num.arange(2)]),
            ('n', Array.T(shape=(None,), dtype=num.int, serialize_as='list',
                          optional=True),
                [None, num.arange(0), num.arange(2)],
                [None, num.arange(0), num.arange(2)]),
            ('o', Array.T(shape=(None,), dtype=num.int, serialize_as='list',
                          default=num.arange(2)),
                [None, num.arange(0), num.arange(2), num.arange(3)],
                [num.arange(2), num.arange(0), num.arange(2), num.arange(3)]),
            ('p', Array.T(shape=(None,), dtype=num.int, serialize_as='list',
                          default=num.arange(2), optional=True),
                [None, num.arange(0), num.arange(2), num.arange(3)],
                [num.arange(2), num.arange(0), num.arange(2), num.arange(3)]),
            ('q', Dict.T(String.T(), Int.T()),
                [None, {}, {'a': 1}],
                [{}, {}, {'a': 1}]),
            ('r', Dict.T(String.T(), Int.T(), optional=True),
                [None, {}, {'a': 1}],
                [None, {}, {'a': 1}]),
            ('s', Dict.T(String.T(), Int.T(), default={'a': 1}),
                [None, {}, {'a': 1}],
                [{'a': 1}, {}, {'a': 1}]),
            ('t', Dict.T(String.T(), Int.T(), default={'a': 1}, optional=True),
                [None, {}, {'a': 1}],
                [{'a': 1}, {}, {'a': 1}]),
        ]

        for k, t, vals, exp, in data:
            last = [None]

            class A(Object):
                def __init__(self, **kwargs):
                    last[0] = len(kwargs)
                    Object.__init__(self, **kwargs)

                v = t

            A.T.class_signature()

            for v, e in zip(vals, exp):
                if isinstance(e, str) and e == 'aerr':
                    with self.assertRaises(ArgumentError):
                        if v is not None:
                            a1 = A(v=v)
                        else:
                            a1 = A()

                    continue
                else:
                    if v is not None:
                        a1 = A(v=v)
                    else:
                        a1 = A()

                if isinstance(e, str) and e == 'err':
                    with self.assertRaises(ValidationError):
                        a1.validate()
                else:
                    a1.validate()
                    a2 = load_string(dump(a1))
                    if isinstance(e, num.ndarray):
                        assert last[0] == int(
                            not (array_equal_noneaware(t.default(), a1.v)
                                 and t.optional))
                        assert_ae(a1.v, e)
                        assert_ae(a1.v, e)
                    else:
                        assert last[0] == int(
                            not(t.default() == a1.v and t.optional))
                        self.assertEqual(a1.v, e)
                        self.assertEqual(a2.v, e)
Example #29
0
    def testOptionalDefault(self):

        from pyrocko.guts_array import Array, array_equal
        import numpy as num
        assert_ae = num.testing.assert_almost_equal

        def array_equal_noneaware(a, b):
            if a is None:
                return b is None
            elif b is None:
                return a is None
            else:
                return array_equal(a, b)

        data = [
            ('a', Int.T(),
                [None, 0, 1, 2],
                ['aerr', 0, 1, 2]),
            ('b', Int.T(optional=True),
                [None, 0, 1, 2],
                [None, 0, 1, 2]),
            ('c', Int.T(default=1),
                [None, 0, 1, 2],
                [1, 0, 1, 2]),
            ('d', Int.T(default=1, optional=True),
                [None, 0, 1, 2],
                [1, 0, 1, 2]),
            ('e', List.T(Int.T()),
                [None, [], [1], [2]],
                [[], [], [1], [2]]),
            ('f', List.T(Int.T(), optional=True),
                [None, [], [1], [2]],
                [None, [], [1], [2]]),
            ('g', List.T(Int.T(), default=[1]), [
                None, [], [1], [2]],
                [[1], [], [1], [2]]),
            ('h', List.T(Int.T(), default=[1], optional=True),
                [None, [], [1], [2]],
                [[1], [], [1], [2]]),
            ('i', Tuple.T(2, Int.T()),
                [None, (1, 2)],
                ['err', (1, 2)]),
            ('j', Tuple.T(2, Int.T(), optional=True),
                [None, (1, 2)],
                [None, (1, 2)]),
            ('k', Tuple.T(2, Int.T(), default=(1, 2)),
                [None, (1, 2), (3, 4)],
                [(1, 2), (1, 2), (3, 4)]),
            ('l', Tuple.T(2, Int.T(), default=(1, 2), optional=True),
                [None, (1, 2), (3, 4)],
                [(1, 2), (1, 2), (3, 4)]),
            ('i2', Tuple.T(None, Int.T()),
                [None, (1, 2)],
                [(), (1, 2)]),
            ('j2', Tuple.T(None, Int.T(), optional=True),
                [None, (), (3, 4)],
                [None, (), (3, 4)]),
            ('k2', Tuple.T(None, Int.T(), default=(1,)),
                [None, (), (3, 4)],
                [(1,), (), (3, 4)]),
            ('l2', Tuple.T(None, Int.T(), default=(1,), optional=True),
                [None, (), (3, 4)],
                [(1,), (), (3, 4)]),
            ('m', Array.T(shape=(None,), dtype=num.int, serialize_as='list'),
                [num.arange(0), num.arange(2)],
                [num.arange(0), num.arange(2)]),
            ('n', Array.T(shape=(None,), dtype=num.int, serialize_as='list',
                          optional=True),
                [None, num.arange(0), num.arange(2)],
                [None, num.arange(0), num.arange(2)]),
            ('o', Array.T(shape=(None,), dtype=num.int, serialize_as='list',
                          default=num.arange(2)),
                [None, num.arange(0), num.arange(2), num.arange(3)],
                [num.arange(2), num.arange(0), num.arange(2), num.arange(3)]),
            ('p', Array.T(shape=(None,), dtype=num.int, serialize_as='list',
                          default=num.arange(2), optional=True),
                [None, num.arange(0), num.arange(2), num.arange(3)],
                [num.arange(2), num.arange(0), num.arange(2), num.arange(3)]),
            ('q', Dict.T(String.T(), Int.T()),
                [None, {}, {'a': 1}],
                [{}, {}, {'a': 1}]),
            ('r', Dict.T(String.T(), Int.T(), optional=True),
                [None, {}, {'a': 1}],
                [None, {}, {'a': 1}]),
            ('s', Dict.T(String.T(), Int.T(), default={'a': 1}),
                [None, {}, {'a': 1}],
                [{'a': 1}, {}, {'a': 1}]),
            ('t', Dict.T(String.T(), Int.T(), default={'a': 1}, optional=True),
                [None, {}, {'a': 1}],
                [{'a': 1}, {}, {'a': 1}]),
        ]

        for k, t, vals, exp, in data:
            last = [None]

            class A(Object):
                def __init__(self, **kwargs):
                    last[0] = len(kwargs)
                    Object.__init__(self, **kwargs)

                v = t

            A.T.class_signature()

            for v, e in zip(vals, exp):
                if isinstance(e, str) and e == 'aerr':
                    with self.assertRaises(ArgumentError):
                        if v is not None:
                            a1 = A(v=v)
                        else:
                            a1 = A()

                    continue
                else:
                    if v is not None:
                        a1 = A(v=v)
                    else:
                        a1 = A()

                if isinstance(e, str) and e == 'err':
                    with self.assertRaises(ValidationError):
                        a1.validate()
                else:
                    a1.validate()
                    a2 = load_string(dump(a1))
                    if isinstance(e, num.ndarray):
                        assert last[0] == int(
                            not (array_equal_noneaware(t.default(), a1.v)
                                 and t.optional))
                        assert_ae(a1.v, e)
                        assert_ae(a1.v, e)
                    else:
                        assert last[0] == int(
                            not(t.default() == a1.v and t.optional))
                        self.assertEqual(a1.v, e)
                        self.assertEqual(a2.v, e)