Esempio n. 1
0
    def test_sum_statics(self):

        nrecords = 8

        store = gf.BaseStore(self.create(nrecords=nrecords))
        for i in xrange(5):
            n = random.randint(0, 5)
            indices = num.random.randint(nrecords, size=n)
            weights = num.random.random(n)
            shifts = num.random.random(n)*nrecords

            dyn = store.sum(
                indices, shifts, weights,
                itmin=None,
                nsamples=None,
                decimate=1,
                implementation='c',
                optimization='enable')

            sta = store.sum_statics(
                indices, weights,
                implementation=None,
                optimization='enable')

            if len(dyn.data) > 0:
                num.testing.assert_array_almost_equal(dyn.data[-1], sta.value,
                                                      5)

        store.close()
Esempio n. 2
0
    def test_sum_statics(self):

        nrecords = 20

        store = gf.BaseStore(self.create(nrecords=nrecords))
        for i in xrange(5):
            n = random.randint(1, 10)
            indices = num.random.randint(nrecords, size=n).astype(num.uint64)
            weights = num.random.random(n).astype(num.float32)
            shifts = (num.random.random(n) * nrecords / 4).astype(num.float32)
            it = random.randint(0, 5)

            dyn = store.sum(indices,
                            shifts,
                            weights,
                            itmin=it,
                            nsamples=1,
                            decimate=1,
                            implementation='c',
                            optimization='enable')

            sta = store.sum_statics(indices,
                                    shifts,
                                    weights,
                                    it,
                                    1,
                                    nthreads=1)

            if len(dyn.data) > 0:
                num.testing.assert_array_almost_equal(dyn.data[-1], sta[0], 5)

        store.close()
Esempio n. 3
0
    def test_sum(self):

        nrecords = 8
        random.seed(0)
        num.random.seed(0)

        store = gf.BaseStore(self.create(nrecords=nrecords))

        for deci in (1, 2, 3, 4):
            for i in range(300):
                n = random.randint(0, 5)
                indices = num.random.randint(nrecords, size=n)
                weights = num.random.random(n)
                shifts = num.random.random(n) * nrecords
                shifts[::2] = num.round(shifts[::2])

                for itmin, nsamples in [(None, None),
                                        (random.randint(0, nrecords),
                                         random.randint(0, nrecords))]:

                    a = store.sum(indices,
                                  shifts,
                                  weights,
                                  itmin=itmin,
                                  nsamples=nsamples,
                                  decimate=deci)

                    b = store.sum(indices,
                                  shifts,
                                  weights,
                                  itmin=itmin,
                                  nsamples=nsamples,
                                  decimate=deci,
                                  implementation='alternative')

                    c = store.sum(indices,
                                  shifts,
                                  weights,
                                  itmin=itmin,
                                  nsamples=nsamples,
                                  decimate=deci,
                                  implementation='reference')

                    self.assertEqual(a.itmin, c.itmin)
                    num.testing.assert_array_almost_equal(a.data, c.data, 2)

                    self.assertEqual(b.itmin, c.itmin)
                    num.testing.assert_array_almost_equal(b.data, c.data, 2)

        store.close()
Esempio n. 4
0
    def test_get_spans(self):
        nrecords = 8
        random.seed(0)
        num.random.seed(0)

        store = gf.BaseStore(self.create(nrecords=nrecords))
        for deci in (1, 2, 3, 4):
            for i in range(nrecords):
                tr = store.get(i, decimate=deci)
                itmin, itmax = store.get_span(i, decimate=deci)
                self.assertEqual(tr.itmin, itmin)
                self.assertEqual(tr.data.size, itmax - itmin + 1)

        store.close()
Esempio n. 5
0
    def create(self, deltat=1.0, nrecords=10):
        d = mkdtemp(prefix='gfstore')
        store = gf.BaseStore.create(d, deltat, nrecords, force=True)

        store = gf.BaseStore(d, mode='w')
        for i in range(nrecords):
            data = num.asarray(num.random.random(random.randint(0, 7)),
                               dtype=gf.gf_dtype)

            tr = gf.GFTrace(data=data, itmin=1 + i)
            store.put(i, tr)

        store.close()
        self.tempdirs.append(d)
        return d
Esempio n. 6
0
    def test_partial_get(self):
        nrecords = 8
        random.seed(0)
        num.random.seed(0)

        store = gf.BaseStore(self.create(nrecords=nrecords))
        for deci in (1, 2, 3, 4):
            for i in range(0, nrecords):
                tra = store.get(i, decimate=deci, implementation='c')
                trb = store.get(i, decimate=deci, implementation='python')
                self.assertEqual(tra.itmin, trb.itmin)
                self.assertEqual(tra.data.size, trb.data.size)
                self.assertTrue(numeq(tra.data, trb.data, 0.001))
                self.assertTrue(numeq(tra.begin_value, trb.begin_value, 0.001))
                self.assertTrue(numeq(tra.end_value, trb.end_value, 0.001))

                tr = tra

                itmin_gf, nsamples_gf = tr.itmin, tr.data.size
                for itmin in range(itmin_gf - nsamples_gf,
                                   itmin_gf + nsamples_gf + 1):

                    for nsamples in range(0, nsamples_gf * 3):
                        for implementation in ['c', 'python']:
                            tr2 = store.get(i, itmin, nsamples, decimate=deci)
                            self.assertEqual(tr2.itmin, max(tr.itmin, itmin))
                            self.assertEqual(
                                tr2.itmin + tr2.data.size,
                                max(
                                    min(tr.itmin + tr.data.size,
                                        itmin + nsamples),
                                    tr2.itmin + tr2.data.size))

                            ilo = max(tr.itmin, tr2.itmin)
                            ihi = min(tr.itmin + tr.data.size,
                                      tr2.itmin + tr2.data.size)

                            a = tr.data[ilo - tr.itmin:ihi - tr.itmin]
                            b = tr2.data[ilo - tr2.itmin:ihi - tr2.itmin]

                            self.assertTrue(numeq(a, b, 0.001))

        store.close()
Esempio n. 7
0
    def test_sum(self):

        nrecords = 8
        random.seed(0)
        num.random.seed(0)

        store = gf.BaseStore(self.create(nrecords=nrecords))

        from pyrocko.gf import store_ext
        store.open()

        store_ext.store_mapping_init(
            store.cstore, 'type_0',
            arr([0]), arr([nrecords-1]), arr([1]),
            num.array([nrecords], dtype=num.uint64),
            1)

        for deci in (1, 2, 3, 4):
            for i in range(300):
                n = random.randint(0, 5)
                indices = num.random.randint(nrecords, size=n)
                weights = num.random.random(n)
                shifts = num.random.random(n)*nrecords
                shifts[::2] = num.round(shifts[::2])

                for itmin, nsamples in [(None, None),
                                        (random.randint(0, nrecords),
                                         random.randint(0, nrecords))]:

                    a = store.sum(
                        indices, shifts, weights,
                        itmin=itmin,
                        nsamples=nsamples,
                        decimate=deci)

                    b = store.sum(
                        indices, shifts, weights,
                        itmin=itmin,
                        nsamples=nsamples,
                        decimate=deci,
                        implementation='alternative')

                    c = store.sum(
                        indices, shifts, weights,
                        itmin=itmin,
                        nsamples=nsamples,
                        decimate=deci,
                        implementation='reference')

                    self.assertEqual(a.itmin, c.itmin)
                    num.testing.assert_array_almost_equal(
                        a.data, c.data, 2)

                    self.assertEqual(b.itmin, c.itmin)
                    num.testing.assert_array_almost_equal(
                        b.data, c.data, 2)

                    if deci != 1:
                        continue

                    nthreads = 1
                    source_coords = num.zeros((n, 5))
                    source_coords[:, 4] = indices
                    receiver_coords = num.zeros((1, 5))
                    source_terms = num.zeros((n, 1))
                    source_terms[:, 0] = weights
                    results = store_ext.store_calc_timeseries(
                        store.cstore,
                        source_coords,
                        source_terms,
                        shifts,
                        receiver_coords,
                        'dummy',
                        'nearest_neighbor',
                        num.array(
                            [itmin if itmin is not None else 0],
                            dtype=num.int32),
                        num.array(
                            [nsamples if nsamples is not None else -1],
                            dtype=num.int32),
                        nthreads)

                    d = gf.GFTrace(*results[0][:2])
                    self.assertEqual(a.itmin, d.itmin)
                    num.testing.assert_array_almost_equal(
                        a.data, d.data, 2)

        store.close()