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
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
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
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)
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')
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))
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))
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))
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
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
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))
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
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)
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
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)
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()
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)
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()
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)
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)
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)