def testVirtualFlatten(self, timeseries_model):
        def side_effect(slug__in):
            return self.getTimeSeriesFilterReturnValue(slug__in, include_virtual=True)
        timeseries_model.objects.filter.side_effect = side_effect
        timeseries = self.test_timeseries['v2']
        equation = combine.evaluate_equation(timeseries['equation'])

        self.assertEqual(unicode(equation._timeseries), 'v1')
        equation.flatten()
        self.assertEqual(unicode(equation._timeseries), u'a + b ÷ c')

        self.assertEqual(timeseries_model.objects.filter.call_args_list,
                         [((), {'slug__in': set(['v1'])}),
                          ((), {'slug__in': set(['a', 'b', 'c'])})])

        timeseries_model.objects.filter.reset_mock()

        evaluator = equation.get_evaluator()
        self.assertEqual(equation.get_slugs(), set('abc'))

        for i in range(10):
            readings = self.getTestReadings()
            self.assertEqual(evaluator(readings),
                             timeseries['func'](readings))
            self.assertFalse(timeseries_model.objects.filter.called)
    def testVirtualNested(self, timeseries_model):
        def side_effect(slug__in):
            return self.getTimeSeriesFilterReturnValue(slug__in, include_virtual=True)
        timeseries_model.objects.filter.side_effect = side_effect
        timeseries = self.test_timeseries['v3']

        equation = combine.evaluate_equation(timeseries['equation'])

        evaluator = equation.get_evaluator()
        self.assertEqual(equation.get_slugs(), set('abcd'))

        for i in range(10):
            readings = self.getTestReadings()
            self.assertEqual(evaluator(readings),
                             timeseries['func'](readings))
    def testSimple(self, timeseries_model):
        timeseries_model.objects.filter.return_value = self.getTimeSeriesFilterReturnValue(['a', 'b', 'c'])
        timeseries = self.test_timeseries['v1']
        equation = combine.evaluate_equation(timeseries['equation'])

        evaluator = equation.get_evaluator()
        self.assertEqual(equation.get_slugs(), set('abc'))

        timeseries_model.objects.filter.assert_called_once_with(slug__in=set(['a', 'b', 'c']))
        timeseries_model.objects.filter.reset_mock()

        for i in range(10):
            readings = self.getTestReadings()
            self.assertEqual(evaluator(readings),
                             timeseries['func'](readings))
            self.assertFalse(timeseries_model.objects.filter.called)
    def testVirtualWithout(self):
        timeseries = self.test_timeseries['v2']
        equation = combine.evaluate_equation(timeseries['equation'])

        self.assertRaises(NameError, equation.get_evaluator)
    def testSimpleWithMissing(self):
        timeseries = self.test_timeseries['v1']
        equation = combine.evaluate_equation(timeseries['equation'])

        self.assertRaises(NameError, equation.get_evaluator)
 def testEvaluate(self):
     for timeseries in self.test_timeseries.itervalues():
         combine.evaluate_equation(timeseries['equation'])