def test_max_without_collapse_same_as_avg(self): self.query.add_series(self.single_series, self.rep_mode, self.series_periodicity) data = self.query.run() other_query = ESQuery(settings.TEST_INDEX) other_query.add_series(self.single_series, self.rep_mode, self.series_periodicity, collapse_agg='max') other_data = other_query.run() for i, row in enumerate(data): self.assertEqual(tuple(row), tuple(other_data[i]))
def test_query_add_aggregation(self): avg_query = ESQuery(index=settings.TEST_INDEX) avg_query.add_series(self.single_series, self.rep_mode, self.series_periodicity, 'avg') data = avg_query.run() self.query.add_series(self.single_series, self.rep_mode, self.series_periodicity, 'sum') for i, row in enumerate(data): avg_value = data[i][1] sum_value = row[1] # En query común el parámetro collapse_agg NO TIENE EFECTO self.assertEqual(avg_value, sum_value)
def test_add_query_aggregation(self): avg_query = ESQuery(index=settings.TEST_INDEX) avg_query.add_series(self.single_series, self.rep_mode, self.series_periodicity, 'avg') data = avg_query.run() self.query.add_series(self.single_series, self.rep_mode, self.series_periodicity, 'sum') sum_data = self.query.run() for i, row in enumerate(sum_data): # Suma debe ser siempre mayor que el promedio sum_value = row[1] avg_value = data[i][1] self.assertGreater(sum_value, avg_value)
def test_preserve_query_order(self): self.query.add_series(self.single_series, self.rep_mode, self.series_periodicity) self.query.add_series(self.delayed_series, self.rep_mode, self.series_periodicity) query = ESQuery(index=settings.TEST_INDEX) query.add_series(self.single_series, self.rep_mode, self.series_periodicity) query.sort('asc') first_date = query.run()[0][0] self.query.sort('asc') data = self.query.run() self.assertEqual(data[0][0], first_date)
def test_min_max_collapse_agg_with_rep_mode(self): self.query.add_series(self.single_series, 'percent_change', self.series_periodicity) self.query.add_pagination(start=1, limit=12) data = self.query.run() other_query = ESQuery(settings.TEST_INDEX) other_query.add_series(self.single_series, 'percent_change', self.series_periodicity, collapse_agg='max') other_query.add_pagination(start=0, limit=1) other_query.add_collapse('year') other_data = other_query.run() min_val = max([row[1] for row in data]) self.assertAlmostEqual(min_val, other_data[0][1], places=5)
def test_end_of_period_with_rep_mode(self): self.query.add_series(self.single_series, 'percent_change', self.series_periodicity, 'end_of_period') self.query.add_collapse('year') self.query.sort('asc') data = self.query.run() orig_eop = ESQuery(index=settings.TEST_INDEX) orig_eop.add_series(self.single_series, self.rep_mode, self.series_periodicity, 'end_of_period') orig_eop.add_collapse('year') orig_eop.sort('asc') end_of_period = orig_eop.run() for i, row in enumerate(data): # El primero es nulo en pct change value = end_of_period[i + 1][1] / end_of_period[i][1] - 1 self.assertAlmostEqual(value, row[1])
def test_same_series_rep_mode(self): self.query.add_series(self.single_series, self.rep_mode, self.series_periodicity) self.query.add_series(self.single_series, 'percent_change_a_year_ago', self.series_periodicity) data = self.query.run() other_query = ESQuery(settings.TEST_INDEX) other_query.add_series(self.single_series, 'percent_change_a_year_ago', self.series_periodicity) other_query.add_series(self.single_series, self.rep_mode, self.series_periodicity) other_data = other_query.run() # Esperado: mismos resultados, invertidos en orden de fila for i, row in enumerate(data): other_row = other_data[i] self.assertEqual(row[0], other_row[0]) self.assertEqual(row[1], other_row[2]) self.assertEqual(row[2], other_row[1])
def test_index_continuity(self): self.query.add_series(self.delayed_series, self.rep_mode, self.series_periodicity) self.query.add_series(self.single_series, self.rep_mode, self.series_periodicity) self.query.add_filter(start="1910", end="1920") self.query.sort('asc') query = ESQuery(index=settings.TEST_INDEX) query.add_series(self.single_series, self.rep_mode, self.series_periodicity) query.add_filter(start="1921") # Garantiza datos vacíos entre 1920-1921 query.add_pagination(start=0, limit=1000) query.sort('asc') data = self.query.run() current_date = iso8601.parse_date(data[0][0]) for row in data[1:]: row_date = iso8601.parse_date(row[0]) self.assertEqual(current_date + relativedelta(months=1), row_date) current_date = row_date
def test_query_fills_nulls_second_series(self): self.query.add_series(self.delayed_series, self.rep_mode, self.series_periodicity) self.query.add_series(self.single_series, self.rep_mode, self.series_periodicity) query = ESQuery(index=settings.TEST_INDEX) query.add_series(self.single_series, self.rep_mode, self.series_periodicity) query.sort('asc') delayed_first_date = iso8601.parse_date(query.run()[0][0]) self.query.sort('asc') data = self.query.run() delayed_series_index = 2 # Segunda serie agregada for row in data: current_date = iso8601.parse_date(row[0]) if current_date < delayed_first_date: self.assertEqual(row[delayed_series_index], None) else: break
def test_end_of_period(self): query = ESQuery(index=settings.TEST_INDEX) query.add_series(self.single_series, self.rep_mode, self.series_periodicity) query.add_pagination(start=0, limit=1000) query.sort('asc') query.add_filter(start="1970") orig_data = query.run() self.query.add_series(self.single_series, self.rep_mode, self.series_periodicity, 'end_of_period') self.query.add_filter(start="1970") self.query.add_collapse('year') eop_data = self.query.run() for eop_row in eop_data: eop_value = eop_row[1] year = iso8601.parse_date(eop_row[0]).year for row in orig_data: row_date = iso8601.parse_date(row[0]) if row_date.year == year and row_date.month == 12: self.assertAlmostEqual(eop_value, row[1], 5) # EOP trae pérdida de precisión break
def setUp(self): self.query = ESQuery(settings.TEST_INDEX)
def test_preserve_query_order(self): data = self._run_query([self.serie, self.delayed_serie]) query = ESQuery(index=settings.TS_INDEX) first_date = query.run_for_series([self.serie])['data'][0][0] self.assertEqual(data[0][0], first_date)
def setUp(self): self.query = ESQuery(settings.TS_INDEX) field = Field.objects.get(identifier=self.single_series) self.serie = SeriesQuery(field, self.rep_mode) delayed_serie_model = Field.objects.get(identifier=self.delayed_series) self.delayed_serie = SeriesQuery(delayed_serie_model, self.rep_mode)