1import math 2import os.path 3import sys 4import textwrap 5from test import support 6 7 8def format_duration(seconds): 9 ms = math.ceil(seconds * 1e3) 10 seconds, ms = divmod(ms, 1000) 11 minutes, seconds = divmod(seconds, 60) 12 hours, minutes = divmod(minutes, 60) 13 14 parts = [] 15 if hours: 16 parts.append('%s hour' % hours) 17 if minutes: 18 parts.append('%s min' % minutes) 19 if seconds: 20 if parts: 21 # 2 min 1 sec 22 parts.append('%s sec' % seconds) 23 else: 24 # 1.0 sec 25 parts.append('%.1f sec' % (seconds + ms / 1000)) 26 if not parts: 27 return '%s ms' % ms 28 29 parts = parts[:2] 30 return ' '.join(parts) 31 32 33def removepy(names): 34 if not names: 35 return 36 for idx, name in enumerate(names): 37 basename, ext = os.path.splitext(name) 38 if ext == '.py': 39 names[idx] = basename 40 41 42def count(n, word): 43 if n == 1: 44 return "%d %s" % (n, word) 45 else: 46 return "%d %ss" % (n, word) 47 48 49def printlist(x, width=70, indent=4, file=None): 50 """Print the elements of iterable x to stdout. 51 52 Optional arg width (default 70) is the maximum line length. 53 Optional arg indent (default 4) is the number of blanks with which to 54 begin each line. 55 """ 56 57 blanks = ' ' * indent 58 # Print the sorted list: 'x' may be a '--random' list or a set() 59 print(textwrap.fill(' '.join(str(elt) for elt in sorted(x)), width, 60 initial_indent=blanks, subsequent_indent=blanks), 61 file=file) 62 63 64def print_warning(msg): 65 support.print_warning(msg) 66