blob: 98a60f7a747d9296831b7c1bb56390c167ec6cda [file] [log] [blame]
Victor Stinner4ffe9c22018-06-14 14:58:13 +02001import math
Victor Stinner4d299832019-04-26 04:08:53 +02002import os.path
3import sys
Victor Stinner7ad16eb2018-06-01 11:04:45 +02004import textwrap
5
6
7def format_duration(seconds):
Victor Stinner4ffe9c22018-06-14 14:58:13 +02008 ms = math.ceil(seconds * 1e3)
9 seconds, ms = divmod(ms, 1000)
10 minutes, seconds = divmod(seconds, 60)
11 hours, minutes = divmod(minutes, 60)
Victor Stinner7ad16eb2018-06-01 11:04:45 +020012
Victor Stinner4ffe9c22018-06-14 14:58:13 +020013 parts = []
Victor Stinner7ad16eb2018-06-01 11:04:45 +020014 if hours:
Victor Stinner4ffe9c22018-06-14 14:58:13 +020015 parts.append('%s hour' % hours)
16 if minutes:
17 parts.append('%s min' % minutes)
18 if seconds:
Victor Stinnerde3195c2019-10-03 17:26:25 +020019 if parts:
20 # 2 min 1 sec
21 parts.append('%s sec' % seconds)
22 else:
23 # 1.0 sec
24 parts.append('%.1f sec' % (seconds + ms / 1000))
Victor Stinner4ffe9c22018-06-14 14:58:13 +020025 if not parts:
Victor Stinnerde3195c2019-10-03 17:26:25 +020026 return '%s ms' % ms
Victor Stinner4ffe9c22018-06-14 14:58:13 +020027
28 parts = parts[:2]
29 return ' '.join(parts)
Victor Stinner7ad16eb2018-06-01 11:04:45 +020030
31
32def removepy(names):
33 if not names:
34 return
35 for idx, name in enumerate(names):
36 basename, ext = os.path.splitext(name)
37 if ext == '.py':
38 names[idx] = basename
39
40
41def count(n, word):
42 if n == 1:
43 return "%d %s" % (n, word)
44 else:
45 return "%d %ss" % (n, word)
46
47
48def printlist(x, width=70, indent=4, file=None):
49 """Print the elements of iterable x to stdout.
50
51 Optional arg width (default 70) is the maximum line length.
52 Optional arg indent (default 4) is the number of blanks with which to
53 begin each line.
54 """
55
56 blanks = ' ' * indent
57 # Print the sorted list: 'x' may be a '--random' list or a set()
58 print(textwrap.fill(' '.join(str(elt) for elt in sorted(x)), width,
59 initial_indent=blanks, subsequent_indent=blanks),
60 file=file)
Victor Stinner4d299832019-04-26 04:08:53 +020061
62
63def print_warning(msg):
64 print(f"Warning -- {msg}", file=sys.stderr, flush=True)