コード例 #1
0
    def insert(self, count, extents, obj=None):
        # The extents from the old rtree impl are [xmin,ymin,xmax,ymax]
        minval = extents[0]
        maxval = extents[2]

        from coverage_model.basic_types import Span
        span = Span(minval, maxval, value=obj)

        if span not in self._spans:
            self._spans.append(span)
コード例 #2
0
 def deserialize(cls, src_str):
     if isinstance(src_str, basestring) and src_str.startswith(cls.__name__):
         tmp = src_str.strip(cls.__name__)
         rtp = RTreeProxy()
         for span_tpl in tmp.split('::span::'):
             if span_tpl == '':
                 continue
             a, b, c, d, e = span_tpl.split('_')
             span_tpl = (int(b), int(c), int(d), e)
             from coverage_model.basic_types import Span
             span = Span.from_iterable(span_tpl)
             rtp._spans.append(span)
         return rtp
     raise TypeError('Improper formatting for RTreeProxy deserialization: %s' % src_str)
コード例 #3
0
def express_slice(slice_, total_shape):
    from coverage_model.basic_types import Span
    fsl = fix_slice(slice_, total_shape)
    ret = []
    for i, x in enumerate(fsl):
        if isinstance(x, slice):
            start = x.start if not x.start is None else 0
            stop = x.stop if not x.stop is None else total_shape[i]
            step = x.step if not x.step is None else 1
            ret.append(slice(start, stop, step))
        elif isinstance(x, Span):
            low = x.lower_bound if not x.lower_bound is None else 0
            up = x.upper_bound if not x.upper_bound is None else total_shape[i]
            ret.append(Span(low, up, x.offset, x.value))
        else:
            ret.append(x)

    return tuple(ret)
コード例 #4
0
    def test_ndspan(self):
        min_int = np.iinfo('int64').min
        max_int = np.iinfo('int64').max

        s = NdSpan([Span(None, 10), Span(3, 30), Span(20, None)])
        self.assertIn((8, 5, 23), s)
        self.assertIn((min_int, 29, max_int), s)
        self.assertNotIn((12, 5, 28), s)
        self.assertNotIn([-29, 30, 21], s)
        self.assertNotIn([2, 23, 19], s)
        self.assertEqual(s.shape, (0, 27, 0))
        self.assertEqual(len(s), 0)

        s = NdSpan([Span(0, 20), Span(4, 8), Span(9, 18)])
        self.assertIn((7, 4, 15), s)
        self.assertIn((0, 7, 10), s)
        self.assertNotIn((20, 3, 18), s)
        self.assertEqual(s.shape, (20, 4, 9))
        self.assertEqual(len(s), 20 * 4 * 9)
コード例 #5
0
    def test_span(self):
        min_int = np.iinfo('int64').min
        max_int = np.iinfo('int64').max

        # Unlimited bounds
        s = Span(value=10)
        self.assertIn(min_int, s)
        self.assertIn(0, s)
        self.assertIn(max_int, s)
        self.assertEqual(len(s), 0)
        self.assertEqual(s.value, 10)
        self.assertEqual(s.indices(7), (0, 7, 1))
        self.assertEqual(s.offset_indices(7), (0, 7, 1))


        # Unlimited lower bound
        s = Span(None, 5, offset=3, value='bob')
        self.assertIn(min_int, s)
        self.assertIn(-18, s)
        self.assertIn(0, s)
        self.assertNotIn(5, s)
        self.assertNotIn(6, s)
        self.assertNotIn(19, s)
        self.assertEqual(len(s), 0)
        self.assertEqual(s.value, 'bob')
        self.assertEqual(s.indices(10), (0, 5, 1))
        self.assertEqual(s.offset_indices(10), (0, 8, 1))

        # Unlimited upper bound
        s = Span(5, None, offset=-2, value=9.38)
        self.assertIn(max_int, s)
        self.assertIn(18, s)
        self.assertIn(6, s)
        self.assertIn(5, s)
        self.assertNotIn(4, s)
        self.assertNotIn(-12, s)
        self.assertEqual(len(s), 0)
        self.assertEqual(s.value, 9.38)
        self.assertEqual(s.indices(12), (5, 12, 1))
        self.assertEqual(s.offset_indices(12), (3, 12, 1))

        # Fully bounded
        s = Span(10, 68, offset=6, value=4)
        self.assertIn(34, s)
        self.assertNotIn(8, s)
        self.assertNotIn(90, s)
        self.assertEqual(len(s), 58)
        self.assertEqual(s.value, 4)
        self.assertEqual(s.indices(30), (10, 30, 1))
        self.assertEqual(s.offset_indices(30), (16, 30, 1))
コード例 #6
0
    def inspect_bricks(self, cov_pth, dataset_id, param_name):
        brick_domains_new = None
        new_brick_list = None
        brick_list_spans = None
        tD = None
        bD = None
        min_data_bound = None
        max_data_bound = None

        spans = []
        pdir = os.path.join(cov_pth, dataset_id, param_name)
        # TODO: Check for brick files, if none then skip this entirely
        if os.path.exists(pdir) and len(os.listdir(pdir)) > 0:
            for brick in [
                    os.path.join(pdir, x) for x in os.listdir(pdir)
                    if (not param_name in x) and ('.hdf5' in x)
            ]:
                brick_guid = os.path.basename(brick).replace('.hdf5', '')
                with h5py.File(brick, 'r') as f:
                    ds = f[brick_guid]
                    fv = ds.fillvalue
                    low = ds[0]
                    up = ds.value.max()
                    low = low if low != fv else None
                    if low < up:
                        spans.append(
                            Span(lower_bound=low,
                                 upper_bound=up,
                                 value=brick_guid))

            if len(spans) > 0:
                spans.sort()
                min_data_bound = min([s.lower_bound for s in spans])
                max_data_bound = max([s.upper_bound for s in spans])

                bricks_sorted = [[
                    s.value, s.lower_bound, s.upper_bound,
                    int(s.upper_bound - s.lower_bound + 1)
                ] for s in spans]

                # brick_list
                # {'0BC3FF45-60FB-440A-980D-80C9CEB6F799': (((0, 99999),),
                #                                           (0,),
                #                                           (100000,),
                #                                           (100000,)),
                #  '5AF8B7A8-49DE-47FB-8671-B9BE8164CC8F': (((100000, 199999),),
                #                                           (100000,),
                #                                           (100000,),
                #                                           (29600,))}
                # TODO: Surely we can get a hold of the bricking_scheme from some global location???
                brick_size = 100000
                chunk_size = 100000
                start = 0
                stop = brick_size - 1
                brick_list_spans = []
                new_brick_list = {}
                for brick in bricks_sorted:
                    new_brick = [
                        brick[0],
                        (((start, stop), ), (start, ), (brick_size, ),
                         (brick[3], ))
                    ]
                    brick_list_spans.append(
                        Span(lower_bound=start,
                             upper_bound=stop,
                             value=new_brick))
                    new_brick_list[brick[0]] = (((start, stop), ), (start, ),
                                                (brick_size, ), (brick[3], ))
                    start = start + brick_size
                    stop = start + brick_size - 1
                brick_list_spans.sort()

                # brick_domains
                # [(129600,), (100000,), (100000,), {'brick_size': 100000, 'chunk_size': 100000}]
                maxes = [sum(b[3]) for b in new_brick_list.values()]
                tD = (sum(maxes), )
                bD = (brick_size, )
                cD = (chunk_size, )
                bricking_scheme = {}
                bricking_scheme['brick_size'] = brick_size
                bricking_scheme['chunk_size'] = chunk_size
                brick_domains_new = [tD, bD, cD, bricking_scheme]

        return brick_domains_new, new_brick_list, brick_list_spans, tD, bD, min_data_bound, max_data_bound
コード例 #7
0
        if isinstance(
                value,
                SparseConstantValue):  # RDT --> Coverage style assignment
            value = value[0, :]

        if not isinstance(value, AbstractParameterValue):
            # If the value is an array/iterable, we only take the first one of the outermost dimension
            value = np.atleast_1d(value)[0, ...]
            bv = np.atleast_1d(value)[0]
            bnds = (bv, bv)
        else:
            bnds = value.bounds

        if not hasattr(spans, '__iter__') and spans == self.fill_value:
            spans = [Span(value=value)]
            slice_ = (self.shape[0] - 1, )

        # Get the last span
        lspn = spans[-1]
        if isinstance(lspn.value, AbstractParameterValue):
            pndim = len(lspn.value.shape)
        else:
            pndim = np.atleast_1d(lspn.value).ndim
        if isinstance(value, AbstractParameterValue):
            nndim = len(value.shape)
        else:
            nndim = np.atleast_1d(value).ndim

        if pndim != nndim:
            raise ValueError(
コード例 #8
0
    def test_span(self):
        min_int = np.iinfo('int64').min
        max_int = np.iinfo('int64').max

        # Unlimited bounds
        s = Span(value=10)
        self.assertIn(min_int, s)
        self.assertIn(0, s)
        self.assertIn(max_int, s)
        self.assertEqual(len(s), 0)
        self.assertEqual(s.value, 10)
        self.assertEqual(s.indices(7), (0, 7, 1))
        self.assertEqual(s.offset_indices(7), (0, 7, 1))

        # Unlimited lower bound
        s = Span(None, 5, offset=3, value='bob')
        self.assertIn(min_int, s)
        self.assertIn(-18, s)
        self.assertIn(0, s)
        self.assertNotIn(5, s)
        self.assertNotIn(6, s)
        self.assertNotIn(19, s)
        self.assertEqual(len(s), 0)
        self.assertEqual(s.value, 'bob')
        self.assertEqual(s.indices(10), (0, 5, 1))
        self.assertEqual(s.offset_indices(10), (0, 8, 1))

        # Unlimited upper bound
        s = Span(5, None, offset=-2, value=9.38)
        self.assertIn(max_int, s)
        self.assertIn(18, s)
        self.assertIn(6, s)
        self.assertIn(5, s)
        self.assertNotIn(4, s)
        self.assertNotIn(-12, s)
        self.assertEqual(len(s), 0)
        self.assertEqual(s.value, 9.38)
        self.assertEqual(s.indices(12), (5, 12, 1))
        self.assertEqual(s.offset_indices(12), (3, 12, 1))

        # Fully bounded
        s = Span(10, 68, offset=6, value=4)
        self.assertIn(34, s)
        self.assertNotIn(8, s)
        self.assertNotIn(90, s)
        self.assertEqual(len(s), 58)
        self.assertEqual(s.value, 4)
        self.assertEqual(s.indices(30), (10, 30, 1))
        self.assertEqual(s.offset_indices(30), (16, 30, 1))