Mercurial > repos > shellac > sam_consensus_v3
comparison env/lib/python3.9/site-packages/pip/_vendor/progress/__init__.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4f3585e2f14b |
---|---|
1 # Copyright (c) 2012 Giorgos Verigakis <verigak@gmail.com> | |
2 # | |
3 # Permission to use, copy, modify, and distribute this software for any | |
4 # purpose with or without fee is hereby granted, provided that the above | |
5 # copyright notice and this permission notice appear in all copies. | |
6 # | |
7 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
8 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
9 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
10 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
11 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
12 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
13 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
14 | |
15 from __future__ import division, print_function | |
16 | |
17 from collections import deque | |
18 from datetime import timedelta | |
19 from math import ceil | |
20 from sys import stderr | |
21 try: | |
22 from time import monotonic | |
23 except ImportError: | |
24 from time import time as monotonic | |
25 | |
26 | |
27 __version__ = '1.5' | |
28 | |
29 HIDE_CURSOR = '\x1b[?25l' | |
30 SHOW_CURSOR = '\x1b[?25h' | |
31 | |
32 | |
33 class Infinite(object): | |
34 file = stderr | |
35 sma_window = 10 # Simple Moving Average window | |
36 check_tty = True | |
37 hide_cursor = True | |
38 | |
39 def __init__(self, message='', **kwargs): | |
40 self.index = 0 | |
41 self.start_ts = monotonic() | |
42 self.avg = 0 | |
43 self._avg_update_ts = self.start_ts | |
44 self._ts = self.start_ts | |
45 self._xput = deque(maxlen=self.sma_window) | |
46 for key, val in kwargs.items(): | |
47 setattr(self, key, val) | |
48 | |
49 self._width = 0 | |
50 self.message = message | |
51 | |
52 if self.file and self.is_tty(): | |
53 if self.hide_cursor: | |
54 print(HIDE_CURSOR, end='', file=self.file) | |
55 print(self.message, end='', file=self.file) | |
56 self.file.flush() | |
57 | |
58 def __getitem__(self, key): | |
59 if key.startswith('_'): | |
60 return None | |
61 return getattr(self, key, None) | |
62 | |
63 @property | |
64 def elapsed(self): | |
65 return int(monotonic() - self.start_ts) | |
66 | |
67 @property | |
68 def elapsed_td(self): | |
69 return timedelta(seconds=self.elapsed) | |
70 | |
71 def update_avg(self, n, dt): | |
72 if n > 0: | |
73 xput_len = len(self._xput) | |
74 self._xput.append(dt / n) | |
75 now = monotonic() | |
76 # update when we're still filling _xput, then after every second | |
77 if (xput_len < self.sma_window or | |
78 now - self._avg_update_ts > 1): | |
79 self.avg = sum(self._xput) / len(self._xput) | |
80 self._avg_update_ts = now | |
81 | |
82 def update(self): | |
83 pass | |
84 | |
85 def start(self): | |
86 pass | |
87 | |
88 def clearln(self): | |
89 if self.file and self.is_tty(): | |
90 print('\r\x1b[K', end='', file=self.file) | |
91 | |
92 def write(self, s): | |
93 if self.file and self.is_tty(): | |
94 line = self.message + s.ljust(self._width) | |
95 print('\r' + line, end='', file=self.file) | |
96 self._width = max(self._width, len(s)) | |
97 self.file.flush() | |
98 | |
99 def writeln(self, line): | |
100 if self.file and self.is_tty(): | |
101 self.clearln() | |
102 print(line, end='', file=self.file) | |
103 self.file.flush() | |
104 | |
105 def finish(self): | |
106 if self.file and self.is_tty(): | |
107 print(file=self.file) | |
108 if self.hide_cursor: | |
109 print(SHOW_CURSOR, end='', file=self.file) | |
110 | |
111 def is_tty(self): | |
112 return self.file.isatty() if self.check_tty else True | |
113 | |
114 def next(self, n=1): | |
115 now = monotonic() | |
116 dt = now - self._ts | |
117 self.update_avg(n, dt) | |
118 self._ts = now | |
119 self.index = self.index + n | |
120 self.update() | |
121 | |
122 def iter(self, it): | |
123 with self: | |
124 for x in it: | |
125 yield x | |
126 self.next() | |
127 | |
128 def __enter__(self): | |
129 self.start() | |
130 return self | |
131 | |
132 def __exit__(self, exc_type, exc_val, exc_tb): | |
133 self.finish() | |
134 | |
135 | |
136 class Progress(Infinite): | |
137 def __init__(self, *args, **kwargs): | |
138 super(Progress, self).__init__(*args, **kwargs) | |
139 self.max = kwargs.get('max', 100) | |
140 | |
141 @property | |
142 def eta(self): | |
143 return int(ceil(self.avg * self.remaining)) | |
144 | |
145 @property | |
146 def eta_td(self): | |
147 return timedelta(seconds=self.eta) | |
148 | |
149 @property | |
150 def percent(self): | |
151 return self.progress * 100 | |
152 | |
153 @property | |
154 def progress(self): | |
155 return min(1, self.index / self.max) | |
156 | |
157 @property | |
158 def remaining(self): | |
159 return max(self.max - self.index, 0) | |
160 | |
161 def start(self): | |
162 self.update() | |
163 | |
164 def goto(self, index): | |
165 incr = index - self.index | |
166 self.next(incr) | |
167 | |
168 def iter(self, it): | |
169 try: | |
170 self.max = len(it) | |
171 except TypeError: | |
172 pass | |
173 | |
174 with self: | |
175 for x in it: | |
176 yield x | |
177 self.next() |