def _query(self, selectors, first, last, npoints): '''Common core of query implementation shared between ``query`` and ``query_continuous``. Returns: list of timestamps, list of resampled series (each a list of resampled points), list of Selector objects, timedelta between timestamps ''' # Parse selectors selector_objs = [] for selector in selectors: name, reduce_strategy, interp_strategy = parse_selector(selector) config = self.get_config(name) if config is None: raise BadSelectorError('Unknown series name "%s"' % name) selector_obj = create_selector(series_config=config, reduction=reduce_strategy, interpolation=interp_strategy) selector_objs.append(selector_obj) # Compute bin boundaries bin_half_delta = (last - first) / ((npoints - 1) * 2) bin_boundaries = [first + bin_half_delta * (2 * i - 1) for i in range(npoints + 1)] bin_centers = [first + bin_half_delta * (2 * i) for i in range(npoints)] # Collect and resample points for each series resampled_series = self._get_resampled_series(selector_objs, bin_boundaries[:-1], bin_boundaries[1:], bin_centers) return bin_centers, resampled_series, selector_objs, 2 * bin_half_delta
def test_create_selector_override_both(): config = dict(name='foo', type='int32', reduction='sum', interpolation='none') s = create_selector(config, reduction='closest', interpolation='previous') assert s.series_name == 'foo' assert s.datatype.is_int_scalar() assert s.datatype.base == 'int32' assert s.reduction == 'closest' assert s.interpolation == 'previous' assert s.reduction_func == reduce_closest assert s.interpolation_func == interp_previous
def test_create_selector_defaults(): config = dict(name='foo', type='int32', reduction='sum', interpolation='none') s = create_selector(config) assert s.series_name == 'foo' assert s.datatype.is_int_scalar() assert s.datatype.base == 'int32' assert s.reduction == 'sum' assert s.interpolation == 'none' assert s.reduction_func == reduce_sum assert s.interpolation_func == interp_none
def test_apply_strategies(): config = dict(name='foo', type='int32', reduction='sum', interpolation='zero') s = create_selector(config) # Dummy time t = datetime(2013, 8, 26, 11, 0, 0) center_times = [datetime(2013, 8, 26, i + 1, 0, 0) for i in range(5)] groups = [[(t, 1), (t, 5), (t, 10)], [(t, 2), (t, 2)], [], [(t, 1)], [(t, 4), (t, 5), (t, 6)]] resampled_values = s.apply_strategies(center_times, groups) assert np.array_equal(resampled_values, [16, 4, 0, 1, 15])