Exemplo n.º 1
0
    def test_simple_format(self):
        t, u = rescale_time(6, unit='s')
        self.assertEqual((t, u), (6, 's'))

        t, u = rescale_time(6, unit='ms')
        self.assertEqual((t, u), (6000, 'ms'))

        t, u = rescale_time(6, unit='min')
        self.assertEqual((t, u), (0.1, 'min'))
Exemplo n.º 2
0
    def test_auto_format(self):
        t, u = rescale_time(6, unit='a')
        self.assertEqual((t, u), (6, 's'))

        t, u = rescale_time(0.006, unit='auto')
        self.assertEqual((t, u), (6, 'ms'))

        t, u = rescale_time(6000, unit='AUTO')
        self.assertEqual((t, u), (100, 'min'))
Exemplo n.º 3
0
        def wrapped(*args, **kwargs):
            start = counter()
            return_value = _f(*args, **kwargs)
            interval = counter() - start
            wrapped.interval = interval

            if print_fn is not None:
                nonlocal name
                if name is None:
                    name = _f.__name__ + ': '
                t, u = rescale_time(interval, unit=unit)
                print_str = f'{name}{t:.3g} {u}'
                print_fn(print_str)

            return return_value
Exemplo n.º 4
0
    def __next__(self):
        try:
            now = counter()
            if self._last:
                interval = now - self._last
                self.intervals.append(interval)
                t, u = rescale_time(interval, self.unit)
                self.iteration_print_fn(
                    f'iteration {self.num_iterations:4}: {t:.3g} {u}')

            self._last = now

            return next(self.iterable)

        except StopIteration:
            self.print_summary()
            raise StopIteration
Exemplo n.º 5
0
    def print_summary(self):
        """ Print statistics of times elapsed in each iteration

        It is called automatically when the iteration ends.

        Use `summary_print_fn` argument in the constructor to control
        if and where the summary is printed.

        """
        # Leave an empty line if iterations and summary are printed to
        # the same output.
        if self.iteration_print_fn == self.summary_print_fn:
            print_str = '\n'
        else:
            print_str = ''

        if self.num_iterations == 0:
            print_str = 'no iterations'
        elif self.num_iterations == 1:
            t, u = rescale_time(self.intervals[0], unit=self.unit)
            print_str += f'one iteration: {t:.3g} {u}'
        else:
            t_total, u_total = rescale_time(self.total, self.unit)

            t_median, u = rescale_time(median(self.intervals), self.unit)
            t_min, _ = rescale_time(min(self.intervals), u)
            t_mean, _ = rescale_time(mean(self.intervals), u)
            t_max, _ = rescale_time(max(self.intervals), u)
            t_std, _ = rescale_time(stdev(self.intervals), u)

            print_str += f'total {self.num_iterations} iterations '
            print_str += f'in {t_total:.3g} {u_total}\n'
            print_str += f'min/median/max: ' \
                         f'{t_min:.3g}' \
                         f'/{t_median:.3g}' \
                         f'/{t_max:.3g} {u}\n'
            print_str += f'average (std): ' \
                         f'{t_mean:.3g} ' \
                         f'({t_std:.3g}) {u}'

        self.summary_print_fn(print_str)
Exemplo n.º 6
0
 def __exit__(self, exc_type, exc_val, exc_tb):
     self._interval = self.interval
     t, u = rescale_time(self.interval, self.unit)
     print_str = f"{self.name}{t:.3g} {u}"
     self._print_fn(print_str)