|
44 | 44 | - **verbosity** (:class:`~.int`): Verbosity level. It controls the verbosity |
45 | 45 | level of the logger (Default: 0). Valid values are: |
46 | 46 |
|
47 | | - - 0 : quiet |
48 | | - - 1 : critical messages |
49 | | - - 2 : error messages |
50 | | - - 3 : warning messages |
51 | | - - 4 : info messages |
| 47 | + - 0: quiet |
| 48 | + - 1: critical messages |
| 49 | + - 2: error messages |
| 50 | + - 3: warning messages |
| 51 | + - 4: info messages |
52 | 52 |
|
53 | 53 | - **debug** (:class:`bool`): Enable debug mode (Default: False). If enabled, |
54 | 54 | lots of output is generated, useful for developers. |
|
117 | 117 |
|
118 | 118 | # Built-in modules |
119 | 119 | import ast |
| 120 | +import configparser |
120 | 121 | import os |
121 | 122 | import warnings |
122 | | -import configparser |
123 | | - |
124 | | -# Third party modules |
125 | 123 |
|
126 | 124 | # Own modules |
127 | 125 | from microprobe.utils.config import MicroprobeDefaultConfiguration |
128 | 126 |
|
129 | | -# Local modules |
130 | | - |
131 | | - |
132 | 127 | # Constants |
133 | 128 |
|
134 | 129 | #: Microprobe global configuration dictionary that map configuration options |
|
143 | 138 | #: installation directory, at the user home directory or in the current |
144 | 139 | #: execution directory. |
145 | 140 | _DEFAULT_CONFIG_FILE_LOCATIONS = [ |
146 | | - os.path.join( |
147 | | - os.path.dirname(__file__), _DEFAULT_CONFIG_FILE_NAME |
148 | | - ), |
149 | | - os.path.expanduser('~/.%s' % _DEFAULT_CONFIG_FILE_NAME), |
150 | | - os.path.join(os.getcwd(), _DEFAULT_CONFIG_FILE_NAME) |
| 141 | + os.path.join(os.path.dirname(__file__), _DEFAULT_CONFIG_FILE_NAME), |
| 142 | + os.path.expanduser(f"~/.{_DEFAULT_CONFIG_FILE_NAME}"), |
| 143 | + os.path.join(os.getcwd(), _DEFAULT_CONFIG_FILE_NAME), |
151 | 144 | ] |
152 | 145 |
|
153 | 146 | #: Generic configparser to support the reading of configuration files |
|
162 | 155 |
|
163 | 156 | # Initialization |
164 | 157 | if "MICROPROBERC" in os.environ: |
165 | | - _DEFAULT_CONFIG_FILE_LOCATIONS = os.environ["MICROPROBERC"].split(":") \ |
166 | | - + _DEFAULT_CONFIG_FILE_LOCATIONS |
| 158 | + _DEFAULT_CONFIG_FILE_LOCATIONS = ( |
| 159 | + os.environ["MICROPROBERC"].split(":") + _DEFAULT_CONFIG_FILE_LOCATIONS |
| 160 | + ) |
167 | 161 |
|
168 | 162 | _CONFIG.read(_DEFAULT_CONFIG_FILE_LOCATIONS) |
169 | 163 |
|
170 | 164 | for section in ["DEFAULT"] + _CONFIG.sections(): |
171 | 165 | for option, value in _CONFIG.items(section): |
172 | 166 | value = value.strip() |
173 | 167 | if option in MICROPROBE_RC: |
174 | | - value = value.replace("MICROPROBE_INSTALL_DIR", |
175 | | - os.path.dirname(__file__)) |
176 | | - if ((value.endswith(']') and value.startswith('[')) or |
177 | | - value.replace("0x", "").replace(".", "").isdigit() or |
178 | | - value in ['True', 'False']): |
| 168 | + value = value.replace( |
| 169 | + "MICROPROBE_INSTALL_DIR", os.path.dirname(__file__) |
| 170 | + ) |
| 171 | + if ( |
| 172 | + (value.endswith("]") and value.startswith("[")) |
| 173 | + or value.replace("0x", "").replace(".", "").isdigit() |
| 174 | + or value in ["True", "False"] |
| 175 | + ): |
| 176 | + # value = r'{}'.format(value) |
| 177 | + value = value.encode("unicode_escape").decode() |
179 | 178 | MICROPROBE_RC[option] = ast.literal_eval(value) |
180 | 179 | else: |
181 | 180 | MICROPROBE_RC[option] = value |
182 | 181 | else: |
183 | | - warnings.warn("Ignoring option: %s" % option) |
| 182 | + warnings.warn(f"Ignoring option: {option}") |
184 | 183 |
|
185 | 184 | # Environment configuration |
186 | 185 | if "MICROPROBEDATA" in os.environ: |
187 | 186 | MICROPROBE_RC["default_paths"] += [ |
188 | 187 | os.path.abspath(path) |
189 | | - for path in os.environ["MICROPROBEDATA"].split(":") |
190 | | - if path != '' |
| 188 | + for path in os.environ["MICROPROBEDATA"].split(";") |
| 189 | + if path != "" |
191 | 190 | ] |
192 | 191 | MICROPROBE_RC["architecture_paths"] += MICROPROBE_RC["default_paths"][:] |
193 | | - MICROPROBE_RC["microarchitecture_paths"] += \ |
194 | | - MICROPROBE_RC["default_paths"][:] |
| 192 | + MICROPROBE_RC["microarchitecture_paths"] += MICROPROBE_RC["default_paths"][ |
| 193 | + : |
| 194 | + ] |
195 | 195 | MICROPROBE_RC["environment_paths"] += MICROPROBE_RC["default_paths"][:] |
196 | 196 |
|
197 | 197 | if "MICROPROBETEMPLATES" in os.environ: |
198 | | - MICROPROBE_RC['template_paths'] += [ |
| 198 | + MICROPROBE_RC["template_paths"] += [ |
199 | 199 | os.path.abspath(elem) |
200 | | - for elem in os.environ["MICROPROBETEMPLATES"].split(":") |
201 | | - if elem != '' |
| 200 | + for elem in os.environ["MICROPROBETEMPLATES"].split(";") |
| 201 | + if elem != "" |
202 | 202 | ] |
203 | 203 |
|
204 | 204 | if "MICROPROBEWRAPPERS" in os.environ: |
205 | 205 | MICROPROBE_RC["wrapper_paths"] += [ |
206 | 206 | os.path.abspath(elem) |
207 | | - for elem in os.environ["MICROPROBEWRAPPERS"].split(":") |
208 | | - if elem != '' |
| 207 | + for elem in os.environ["MICROPROBEWRAPPERS"].split(";") |
| 208 | + if elem != "" |
209 | 209 | ] |
210 | 210 |
|
211 | 211 | if "MICROPROBEDEBUG" in os.environ: |
|
225 | 225 | elif os.environ["MICROPROBEASMHEXFMT"].strip() == "none": |
226 | 226 | MICROPROBE_RC["hex_none"] = True |
227 | 227 | else: |
228 | | - warnings.warn("Ignoring option: %s in env var MICROPROBEASMHEXFMT" % |
229 | | - os.environ["MICROPROBEASMHEXFMT"]) |
| 228 | + warnings.warn( |
| 229 | + "Ignoring option: %s in env var MICROPROBEASMHEXFMT" |
| 230 | + % os.environ["MICROPROBEASMHEXFMT"] |
| 231 | + ) |
230 | 232 |
|
231 | 233 | if "MICROPROBEPARALLELTHRESHOLD" in os.environ: |
232 | 234 | try: |
233 | | - MICROPROBE_RC["parallel_threshold"] = \ |
234 | | - int(os.environ["MICROPROBEPARALLELTHRESHOLD"].strip()) |
| 235 | + MICROPROBE_RC["parallel_threshold"] = int( |
| 236 | + os.environ["MICROPROBEPARALLELTHRESHOLD"].strip() |
| 237 | + ) |
235 | 238 | except ValueError: |
236 | 239 | warnings.warn( |
237 | | - "Ignoring option: %s in env var MICROPROBEPARALLELTHRESHOLD" % |
238 | | - os.environ["MICROPROBEPARALLELTHRESHOLD"]) |
| 240 | + "Ignoring option: %s in env var MICROPROBEPARALLELTHRESHOLD" |
| 241 | + % os.environ["MICROPROBEPARALLELTHRESHOLD"] |
| 242 | + ) |
239 | 243 |
|
240 | 244 | if "MICROPROBECPUS" in os.environ: |
241 | 245 | try: |
242 | | - MICROPROBE_RC["cpus"] = \ |
243 | | - int(os.environ["MICROPROBECPUS"].strip()) |
| 246 | + MICROPROBE_RC["cpus"] = int(os.environ["MICROPROBECPUS"].strip()) |
244 | 247 | except ValueError: |
245 | 248 | warnings.warn( |
246 | | - "Ignoring option: %s in env var MICROPROBECPUS" % |
247 | | - os.environ["MICROPROBECPUS"]) |
| 249 | + "Ignoring option: %s in env var MICROPROBECPUS" |
| 250 | + % os.environ["MICROPROBECPUS"] |
| 251 | + ) |
248 | 252 |
|
249 | 253 | if "MICROPROBENOCACHE" in os.environ: |
250 | | - MICROPROBE_RC['no_cache'] = True |
| 254 | + MICROPROBE_RC["no_cache"] = True |
| 255 | + |
| 256 | + |
| 257 | +if "MICROPROBESEED" not in os.environ: |
| 258 | + MICROPROBE_RC["seed"] = 13 |
| 259 | +else: |
| 260 | + try: |
| 261 | + MICROPROBE_RC["seed"] = int(os.environ["MICROPROBESEED"].strip()) |
| 262 | + except ValueError: |
| 263 | + warnings.warn( |
| 264 | + "Ignoring option: %s in env var MICROPROBESEED" |
| 265 | + % os.environ["MICROPROBESEED"] |
| 266 | + ) |
| 267 | + MICROPROBE_RC["seed"] = 13 |
| 268 | + |
| 269 | +if "MICROPROBEPATTERN" not in os.environ: |
| 270 | + MICROPROBE_RC["pattern"] = "random" |
| 271 | + MICROPROBE_RC["pattern_update"] = False |
| 272 | +else: |
| 273 | + try: |
| 274 | + if "_" in os.environ["MICROPROBEPATTERN"].strip(): |
| 275 | + val = os.environ["MICROPROBEPATTERN"].strip().split("_")[0] |
| 276 | + update = os.environ["MICROPROBEPATTERN"].strip().split("_")[1] |
| 277 | + else: |
| 278 | + val = os.environ["MICROPROBEPATTERN"].strip() |
| 279 | + update = False |
| 280 | + |
| 281 | + MICROPROBE_RC["pattern"] = int(val, 0) |
| 282 | + MICROPROBE_RC["pattern_update"] = update |
| 283 | + |
| 284 | + if MICROPROBE_RC["pattern"] < 0 or update not in [ |
| 285 | + "rotate", |
| 286 | + "negate", |
| 287 | + False, |
| 288 | + ]: |
| 289 | + warnings.warn( |
| 290 | + "Ignoring option: %s in env var MICROPROBEPATTERN" |
| 291 | + % os.environ["MICROPROBEPATTERN"] |
| 292 | + ) |
| 293 | + MICROPROBE_RC["pattern"] = "random" |
| 294 | + MICROPROBE_RC["pattern_update"] = False |
| 295 | + elif MICROPROBE_RC["pattern"].bit_length() == 0: |
| 296 | + MICROPROBE_RC["pattern"] = 0 |
| 297 | + else: |
| 298 | + width = MICROPROBE_RC["pattern"].bit_length() |
| 299 | + pattern = MICROPROBE_RC["pattern"] & ((1 << width) - 1) |
| 300 | + if width >= 64: |
| 301 | + MICROPROBE_RC["pattern"] = pattern & ((1 << 64) - 1) |
| 302 | + result = 0 |
| 303 | + shift = 0 |
| 304 | + while shift < 64: |
| 305 | + result |= pattern << shift |
| 306 | + shift += width |
| 307 | + MICROPROBE_RC["pattern"] = result & ((1 << 64) - 1) |
| 308 | + |
| 309 | + except ValueError: |
| 310 | + warnings.warn( |
| 311 | + "Ignoring option: %s in env var MICROPROBEPATTERN" |
| 312 | + % os.environ["MICROPROBEPATTERN"] |
| 313 | + ) |
| 314 | + MICROPROBE_RC["pattern"] = "random" |
| 315 | + MICROPROBE_RC["pattern_update"] = False |
0 commit comments