diff --git a/.appveyor.yml b/.appveyor.yml index 17983b237..c2f26fc7c 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -7,10 +7,10 @@ environment: matrix: - - PYTHON: "C:\\Python35" - PYTHON: "C:\\Python36" - PYTHON: "C:\\Python37" - PYTHON: "C:\\Python38" + - PYTHON: "C:\\Python39" build: off @@ -18,8 +18,7 @@ install: - set PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH% # The package installation via our setup.py file uses easy_install, which fails to correctly install lxml. # As some Python environments don't have lxml preinstalled, install it here to avoid errors during the execution in those cases. - # Furthermore, since the move to setup.cfg on Python 3.5 it fails to automatically install nose before running nosetests. - - python -m pip install lxml nose + - python -m pip install lxml - python -m pip install --user . test_script: diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 33abe61b8..4d010c973 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -59,11 +59,6 @@ stages: paths: - coverage.xml -unit-tests:python-3.5: - <<: *unit-tests - variables: - PYTHON_VERSION: '3.5' - unit-tests:python-3.6: <<: *unit-tests variables: @@ -180,12 +175,6 @@ reuse: - schedules - web -build-docker:test:python-3.5: - extends: .build-docker - variables: - DOCKERFILE: test/Dockerfile.python-3.5 - IMAGE: test:python-3.5 - build-docker:test:python-3.6: extends: .build-docker variables: diff --git a/.travis.yml b/.travis.yml index 14dd62454..3c79675d6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,11 +7,12 @@ language: python sudo: required -dist: xenial +dist: bionic python: - - "3.5" - "3.6" - "3.7" + - "3.8" + - "3.9" install: - pip install . # Install code formatter black, but only on versions where it is available diff --git a/CHANGELOG.md b/CHANGELOG.md index 50a735f17..79e405213 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,44 @@ SPDX-License-Identifier: Apache-2.0 # BenchExec Changelog +## BenchExec 3.7 + +This is expected to be the last BenchExec release that supports Python 3.5, +newer releases will require Python 3.6 or newer. +Please [cf. issue #717](https://github.com/sosy-lab/benchexec/issues/717) +for our plan on dropping support for further Python versions. + +We would like to note that Linux kernel 5.11 +brings a major improvement for BenchExec users not on Ubuntu: +Now it should be possible to use the overlayfs feature as a regular user, +no need to pass `--read-only-dir /` and similar parameters. +We updated our [installation instructions](https://github.com/sosy-lab/benchexec/blob/master/doc/INSTALL.md) +accordingly and also clarified that BenchExec requires x86 or ARM machines +and recommend Linux kernel 4.14 or newer due to reduced cgroups overhead. + +Changes in this release: + +- In HTML tables, the following settings are now stored in the hash part of the URL: + - Column sorting + - Page size of the table, i.e., how many rows are shown + - Filters for task names that are defined by entering text + into the left-most input field of the filter row of the table. + Previously this would only work for task-name filters defined in the filter sidebar. + This means that using the back/forward navigation of the browser + will change these settings and that they can be present in shared links. +- Fix a few cases of printing of statistics information in HTML tables. + This affects corner cases like the number of visible decimal digits for `0` + and trailing zeroes for the standard deviation in the tooltip. +- When a user requests rounding to a certain number of decimal digits, + the filtering functionality of the HTML tables will now use the raw values, + not the rounded values. + This is consistent with the behavior when rounding is not explicitly requested + and BenchExec applies the default rounding rules. +- Fix harmless stack trace printed at end of `benchexec` execution + in cases like of early termination, e.g., if the tool could not be found. +- Some improvements to tool-info modules. +- Several updates of JS libraries, but this should not bring user-visible changes. + ## BenchExec 3.6 - One tool-info module improved. diff --git a/benchexec/__init__.py b/benchexec/__init__.py index b2d62d62a..698a3781d 100644 --- a/benchexec/__init__.py +++ b/benchexec/__init__.py @@ -34,7 +34,7 @@ Variables ending with "tag" contain references to XML tag objects created by the XML parser. """ -__version__ = "3.7-dev" +__version__ = "3.8-dev" class BenchExecException(Exception): diff --git a/benchexec/benchexec.py b/benchexec/benchexec.py index bf5d84fc2..2256875cc 100644 --- a/benchexec/benchexec.py +++ b/benchexec/benchexec.py @@ -56,7 +56,7 @@ def start(self, argv): for arg in self.config.files: if not os.path.exists(arg) or not os.path.isfile(arg): - parser.error("File {0} does not exist.".format(repr(arg))) + parser.error(f"File {arg!r} does not exist.") if os.path.isdir(self.config.output_path): self.config.output_path = os.path.normpath(self.config.output_path) + os.sep @@ -85,11 +85,14 @@ def create_argument_parser(self): """ parser = argparse.ArgumentParser( fromfile_prefix_chars="@", - description="""Execute benchmarks for a given tool with a set of input files. - Benchmarks are defined in an XML file given as input. - Command-line parameters can additionally be read from a file if file name prefixed with '@' is given as argument. - The tool table-generator can be used to create tables for the results. - Part of BenchExec: https://github.com/sosy-lab/benchexec/""", + description=""" + Execute benchmarks for a given tool with a set of input files. + Benchmarks are defined in an XML file given as input. + Command-line parameters can additionally be read from a file + if file name prefixed with '@' is given as argument. + The tool table-generator can be used to create tables for the results. + Part of BenchExec: https://github.com/sosy-lab/benchexec/ + """, ) parser.add_argument( @@ -110,8 +113,11 @@ def create_argument_parser(self): "--rundefinition", dest="selected_run_definitions", action="append", - help="Run only the specified RUN_DEFINITION from the benchmark definition file. " - + "This option can be specified several times and can contain wildcards.", + help=""" + Execute only the specified RUN_DEFINITION from the benchmark-definition + file. + This option can be specified several times and can contain wildcards. + """, metavar="RUN_DEFINITION", ) @@ -120,15 +126,19 @@ def create_argument_parser(self): "--tasks", dest="selected_sourcefile_sets", action="append", - help="Run only the tasks from the tasks tag with TASKS as name. " - + "This option can be specified several times and can contain wildcards.", + help=""" + Run only the tasks from the tasks tag with TASKS as name. + This option can be specified several times and can contain wildcards. + """, metavar="TASKS", ) parser.add_argument( "--tool-directory", - help="Use benchmarked tool from given directory " - "instead of looking in PATH and the current directory", + help=""" + Use benchmarked tool from given directory + instead of looking in PATH and the current directory. + """, metavar="DIR", type=util.non_empty_str, ) @@ -148,15 +158,19 @@ def create_argument_parser(self): dest="output_path", type=str, default=self.DEFAULT_OUTPUT_PATH, - help="Output prefix for the generated results. " - + "If the path is a folder files are put into it," - + "otherwise it is used as a prefix for the resulting files.", + help=""" + Output prefix for the generated results. + If the path is a folder files are put into it, + otherwise it is used as a prefix for the resulting files. + """, ) parser.add_argument( "--description-file", - help="Path to a text file whose contents will be included in the results " - "as their description", + help=""" + Path to a text file whose contents will be included in the results + as their description + """, ) parser.add_argument( @@ -164,9 +178,11 @@ def create_argument_parser(self): "--timelimit", dest="timelimit", default=None, - help='Time limit for each run, e.g. "90s" ' - "(overwrites time limit and hard time limit from XML file, " - 'use "-1" to disable time limits completely)', + help=""" + Time limit for each run, e.g. "90s" + (overwrites time limit and hard time limit from XML file, + use "-1" to disable time limits completely) + """, metavar="SECONDS", ) @@ -175,9 +191,12 @@ def create_argument_parser(self): "--walltimelimit", dest="walltimelimit", default=None, - help='Wall time limit for each run, e.g. "90s" ' - "(overwrites wall time limit from XML file, " - 'use "-1" to use CPU time limit plus a few seconds, such value is also used by default)', + help=""" + Wall time limit for each run, e.g. "90s" + (overwrites wall time limit from XML file, + use "-1" to use CPU time limit plus a few seconds, + such value is also used by default) + """, metavar="SECONDS", ) @@ -214,8 +233,10 @@ def create_argument_parser(self): dest="coreset", default=None, type=util.parse_int_list, - help="Limit the set of cores BenchExec will use for all runs " - "(Applied only if the number of CPU cores is limited).", + help=""" + Limit the set of cores BenchExec will use for all runs " + (Applied only if the number of CPU cores is limited). + """, metavar="N,M-K", ) parser.add_argument( @@ -223,7 +244,10 @@ def create_argument_parser(self): dest="use_hyperthreading", action="store_false", default=True, - help="Disable assignment of more than one sibling virtual core to a single run", + help=""" + Disable assignment of more than one sibling virtual core + to a single run + """, ) parser.add_argument( @@ -239,8 +263,8 @@ def parse_filesize_value(value): if value == -1: return None logging.warning( - 'Value "%s" for logfile size interpreted as MB for backwards compatibility, ' - "specify a unit to make this unambiguous.", + 'Value "%s" for logfile size interpreted as MB for ' + "backwards compatibility, specify a unit to make this unambiguous.", value, ) value = value * _BYTE_FACTOR * _BYTE_FACTOR @@ -262,21 +286,31 @@ def parse_filesize_value(value): "--filesCountLimit", type=int, metavar="COUNT", - help="maximum number of files the tool may write to (checked periodically, counts only files written in container mode or to temporary directories)", + help=""" + maximum number of files the tool may write to + (checked periodically, counts only files written in container mode + or to temporary directories) + """, ) parser.add_argument( "--filesSizeLimit", type=util.parse_memory_value, metavar="BYTES", - help="maximum size of files the tool may write (checked periodically, counts only files written in container mode or to temporary directories)", + help=""" + Maximum size of files the tool may write + (checked periodically, counts only files written in container mode + or to temporary directories) + """, ) parser.add_argument( "--commit", dest="commit", action="store_true", - help="If the output path is a git repository without local changes, " - + "add and commit the result files.", + help=""" + If the output path is a git repository without local changes, " + add and commit the result files. + """, ) parser.add_argument( @@ -337,31 +371,27 @@ def execute_benchmark(self, benchmark_file): self.config, self.config.start_time or util.read_local_time(), ) - self.check_existing_results(benchmark) - - self.executor.init(self.config, benchmark) - output_handler = OutputHandler( - benchmark, self.executor.get_system_info(), self.config.compress_results - ) + try: + self.check_existing_results(benchmark) - logging.debug( - "I'm benchmarking %r consisting of %s run sets using %s %s.", - benchmark_file, - len(benchmark.run_sets), - benchmark.tool_name, - benchmark.tool_version or "(unknown version)", - ) + self.executor.init(self.config, benchmark) + output_handler = OutputHandler( + benchmark, self.executor.get_system_info(), self.config.compress_results + ) + try: + logging.debug( + "I'm benchmarking %r consisting of %s run sets using %s %s.", + benchmark_file, + len(benchmark.run_sets), + benchmark.tool_name, + benchmark.tool_version or "(unknown version)", + ) - try: - result = self.executor.execute_benchmark(benchmark, output_handler) + result = self.executor.execute_benchmark(benchmark, output_handler) + finally: + output_handler.close() finally: benchmark.tool.close() - output_handler.close() - # remove useless log folder if it is empty - try: - os.rmdir(benchmark.log_folder) - except OSError: - pass if self.config.commit and not self.stopped_by_interrupt: try: @@ -385,15 +415,13 @@ def check_existing_results(self, benchmark): """ if os.path.exists(benchmark.log_folder): sys.exit( - "Output directory {0} already exists, will not overwrite existing results.".format( - benchmark.log_folder - ) + f"Output directory {benchmark.log_folder} already exists, " + f"will not overwrite existing results." ) if os.path.exists(benchmark.log_zip): sys.exit( - "Output archive {0} already exists, will not overwrite existing results.".format( - benchmark.log_zip - ) + f"Output archive {benchmark.log_zip} already exists, " + f"will not overwrite existing results." ) def stop(self): diff --git a/benchexec/cgroups.py b/benchexec/cgroups.py index 792017f76..3ea688566 100644 --- a/benchexec/cgroups.py +++ b/benchexec/cgroups.py @@ -243,8 +243,8 @@ def _register_process_with_cgrulesengd(pid): ) if failure: pass - # print('Could not register process to cgrulesndg, error {}. ' - # 'Probably the daemon will mess up our cgroups.'.format(success)) + # print(f'Could not register process to cgrulesndg, error {success}. ' + # 'Probably the daemon will mess up our cgroups.') except OSError: pass @@ -470,7 +470,7 @@ def get_value(self, subsystem, option): Do not include the subsystem name in the option name. Only call this method if the given subsystem is available. """ - assert subsystem in self, "Subsystem {} is missing".format(subsystem) + assert subsystem in self, f"Subsystem {subsystem} is missing" return util.read_file(self.per_subsystem[subsystem], subsystem + "." + option) def get_file_lines(self, subsystem, option): @@ -526,7 +526,7 @@ def read_cputime(self): @return cputime usage in seconds """ # convert nano-seconds to seconds - return float(self.get_value(CPUACCT, "usage")) / 1000000000 + return float(self.get_value(CPUACCT, "usage")) / 1_000_000_000 def read_allowed_memory_banks(self): """Get the list of all memory banks allowed by this cgroup.""" diff --git a/benchexec/check_cgroups.py b/benchexec/check_cgroups.py index 766e43ca1..7ffe5eb17 100644 --- a/benchexec/check_cgroups.py +++ b/benchexec/check_cgroups.py @@ -43,7 +43,7 @@ def check_cgroup_availability(wait=1): with tempfile.NamedTemporaryFile(mode="rt") as tmp: runexecutor.execute_run( - ["sh", "-c", "sleep {0}; cat /proc/self/cgroup".format(wait)], + ["sh", "-c", f"sleep {wait}; cat /proc/self/cgroup"], tmp.name, memlimit=1024 * 1024, # set memlimit to force check for swapaccount # set cores and memory_nodes to force usage of CPUSET @@ -55,7 +55,7 @@ def check_cgroup_availability(wait=1): line = line.strip() if ( line - and not line == "sh -c 'sleep {0}; cat /proc/self/cgroup'".format(wait) + and not line == f"sh -c 'sleep {wait}; cat /proc/self/cgroup'" and not all(c == "-" for c in line) ): lines.append(line) diff --git a/benchexec/container.py b/benchexec/container.py index fa14328bb..75762f0fb 100644 --- a/benchexec/container.py +++ b/benchexec/container.py @@ -69,31 +69,25 @@ netgroup: files automount: files """ -CONTAINER_ETC_PASSWD = """ +CONTAINER_ETC_PASSWD = f""" root:x:0:0:root:/root:/bin/bash -benchexec:x:{uid}:{gid}:benchexec:{home}:/bin/bash +benchexec:x:{CONTAINER_UID}:{CONTAINER_GID}:benchexec:{CONTAINER_HOME}:/bin/bash nobody:x:65534:65534:nobody:/:/bin/false -""".format( - uid=CONTAINER_UID, gid=CONTAINER_GID, home=CONTAINER_HOME -) +""" -CONTAINER_ETC_GROUP = """ +CONTAINER_ETC_GROUP = f""" root:x:0: -benchexec:x:{gid}: +benchexec:x:{CONTAINER_GID}: nogroup:x:65534: -""".format( - gid=CONTAINER_GID -) +""" -CONTAINER_ETC_HOSTS = """ -127.0.0.1 localhost {host} +CONTAINER_ETC_HOSTS = f""" +127.0.0.1 localhost {CONTAINER_HOSTNAME} # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters -""".format( - host=CONTAINER_HOSTNAME -) +""" CONTAINER_ETC_FILE_OVERRIDE = { b"nsswitch.conf": CONTAINER_ETC_NSSWITCH_CONF, @@ -343,7 +337,7 @@ def setup_user_mapping( proc_child = os.path.join("/proc", str(pid)) try: # map uid internally to our uid externally - uid_map = "{0} {1} 1".format(uid, parent_uid) + uid_map = f"{uid} {parent_uid} 1" util.write_file(uid_map, proc_child, "uid_map") except OSError as e: logging.warning("Creating UID mapping into container failed: %s", e) @@ -358,7 +352,7 @@ def setup_user_mapping( try: # map gid internally to our gid externally - gid_map = "{0} {1} 1".format(gid, parent_gid) + gid_map = f"{gid} {parent_gid} 1" util.write_file(gid_map, proc_child, "gid_map") except OSError as e: logging.warning("Creating GID mapping into container failed: %s", e) @@ -499,10 +493,9 @@ def duplicate_mount_hierarchy(mount_base, temp_base, work_base, dir_modes): mp = mountpoint.decode() raise OSError( e.errno, - "Creating overlay mount for '{}' failed: {}. Please use " - "other directory modes, for example '--read-only-dir {}'.".format( - mp, os.strerror(e.errno), util.escape_string_shell(mp) - ), + f"Creating overlay mount for '{mp}' failed: {os.strerror(e.errno)}. " + f"Please use other directory modes, " + f"for example '--read-only-dir {util.escape_string_shell(mp)}'.", ) elif mode == DIR_HIDDEN: diff --git a/benchexec/containerexecutor.py b/benchexec/containerexecutor.py index 0265fc2fd..a2963d0d9 100644 --- a/benchexec/containerexecutor.py +++ b/benchexec/containerexecutor.py @@ -107,11 +107,11 @@ def handle_dir_mode(path, mode): path = os.path.abspath(path) if not os.path.isdir(path): error_fn( - "Cannot specify directory mode for '{}' because it does not exist " - "or is no directory.".format(path) + f"Cannot specify directory mode for '{path}' " + f"because it does not exist or is no directory." ) if path in dir_modes: - error_fn("Cannot specify multiple directory modes for '{}'.".format(path)) + error_fn(f"Cannot specify multiple directory modes for '{path}'.") dir_modes[path] = mode for path in options.hidden_dir: @@ -189,18 +189,14 @@ def handle_container_output_args(options, parser): result_files_patterns = [os.path.normpath(p) for p in options.result_files if p] for pattern in result_files_patterns: if pattern.startswith(".."): - parser.error( - "Invalid relative result-files pattern '{}'.".format(pattern) - ) + parser.error(f"Invalid relative result-files pattern '{pattern}'.") else: result_files_patterns = ["."] output_dir = options.output_directory if os.path.exists(output_dir) and not os.path.isdir(output_dir): parser.error( - "Output directory '{}' must not refer to an existing file.".format( - output_dir - ) + f"Output directory '{output_dir}' must not refer to an existing file." ) return {"output_dir": output_dir, "result_files_patterns": result_files_patterns} @@ -285,11 +281,7 @@ def signal_handler_kill(signum, frame): except (BenchExecException, OSError) as e: if options.debug: logging.exception(e) - sys.exit( - "Cannot execute {0}: {1}.".format( - util.escape_string_shell(options.args[0]), e - ) - ) + sys.exit(f"Cannot execute {util.escape_string_shell(options.args[0])}: {e}.") return result.signal or result.value @@ -307,7 +299,7 @@ def __init__( container_system_config=True, container_tmpfs=True, *args, - **kwargs + **kwargs, ): """Create instance. @param use_namespaces: If False, disable all container features of this class @@ -354,11 +346,9 @@ def __init__( raise ValueError("Need directory mode for '/'.") for path, kind in dir_modes.items(): if kind not in DIR_MODES: - raise ValueError( - "Invalid value '{}' for directory '{}'.".format(kind, path) - ) + raise ValueError(f"Invalid value '{kind}' for directory '{path}'.") if not os.path.isabs(path): - raise ValueError("Invalid non-absolute directory '{}'.".format(path)) + raise ValueError(f"Invalid non-absolute directory '{path}'.") if path == "/proc": raise ValueError("Cannot specify directory mode for /proc.") # All dir_modes in dir_modes are sorted by length @@ -485,7 +475,7 @@ def _start_execution( memlimit=None, memory_nodes=None, *args, - **kwargs + **kwargs, ): if not self._use_namespaces: return super(ContainerExecutor, self)._start_execution(*args, **kwargs) @@ -498,17 +488,14 @@ def _start_execution( for pattern in result_files_patterns: if not pattern: raise ValueError( - "Invalid empty result-files pattern in {}".format( - result_files_patterns - ) + f"Invalid empty result-files pattern " + f"in {result_files_patterns}" ) pattern = os.path.normpath(pattern) if pattern.startswith(".."): raise ValueError( - "Invalid relative result-files pattern '{}'.".format( - pattern - ) + f"Invalid relative result-files pattern '{pattern}'." ) return self._start_execution_in_container( @@ -909,7 +896,7 @@ def wait_for_grandchild(): exitcode, ru_child = pickle.loads(received) - base_path = "/proc/{}/root".format(child_pid) + base_path = f"/proc/{child_pid}/root" parent_cleanup = parent_cleanup_fn( parent_setup, util.ProcessExitCode.from_raw(exitcode), base_path ) diff --git a/benchexec/intel_cpu_energy.py b/benchexec/intel_cpu_energy.py index 6e7a83a39..602be4824 100644 --- a/benchexec/intel_cpu_energy.py +++ b/benchexec/intel_cpu_energy.py @@ -46,7 +46,8 @@ def start(self): [self._executable, "-r"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, - bufsize=10000, + universal_newlines=True, + bufsize=10_000, preexec_fn=os.setpgrp, # Prevent delivery of Ctrl+C to subprocess ) @@ -69,7 +70,6 @@ def stop(self): for line in err.splitlines(): logging.debug("energy measurement stderr: %s", line) for line in out.splitlines(): - line = line.decode("ASCII") logging.debug("energy measurement output: %s", line) match = re.match(r"cpu(\d+)_([a-z]+)_joules=(\d+\.?\d*)", line) if not match: @@ -97,7 +97,7 @@ def format_energy_results(energy): for domain, value in domains.items(): if domain == DOMAIN_PACKAGE: cpuenergy += value - result["cpuenergy-pkg{}-{}".format(pkg, domain)] = value + result[f"cpuenergy-pkg{pkg}-{domain}"] = value result["cpuenergy"] = cpuenergy result = collections.OrderedDict(sorted(result.items())) return result diff --git a/benchexec/model.py b/benchexec/model.py index 916f00f7c..00ec83db8 100644 --- a/benchexec/model.py +++ b/benchexec/model.py @@ -103,15 +103,14 @@ def load_task_definition_file(task_def_file): format_version = str(task_def.get("format_version")) if format_version not in _TASK_DEF_VERSIONS: raise BenchExecException( - "Task-definition file {} specifies invalid format_version '{}'.".format( - task_def_file, task_def.get("format_version") - ) + f"Task-definition file {task_def_file} specifies " + f"invalid format_version '{task_def.get('format_version')}'." ) if format_version != "2.0" and "options" in task_def: raise BenchExecException( - "Task-definition file {} specifies invalid key 'options', " - "format_version needs to be at least 2.0 for this.".format(task_def_file) + f"Task-definition file {task_def_file} specifies invalid key 'options', " + f"format_version needs to be at least 2.0 for this." ) return task_def @@ -136,9 +135,8 @@ def handle_files_from_task_definition(patterns, task_def_file): ) if not expanded: raise BenchExecException( - "Pattern '{}' in task-definition file {} did not match any paths.".format( - pattern, task_def_file - ) + f"Pattern '{pattern}' in task-definition file {task_def_file} " + f"did not match any paths." ) expanded.sort() result.extend(expanded) @@ -171,19 +169,13 @@ def load_tool_info(tool_name, config): tool_module, "\n ".join(path or "." for path in sys.path), ) - sys.exit( - 'Unsupported tool "{0}" specified. ImportError: {1}'.format(tool_name, ie) - ) + sys.exit(f'Unsupported tool "{tool_name}" specified. ImportError: {ie}') except AttributeError as ae: sys.exit( - 'Unsupported tool "{0}" specified, class "Tool" is missing: {1}'.format( - tool_name, ae - ) + f'Unsupported tool "{tool_name}" specified, class "Tool" is missing: {ae}' ) except TypeError as te: - sys.exit( - 'Unsupported tool "{0}" specified. TypeError: {1}'.format(tool_name, te) - ) + sys.exit(f'Unsupported tool "{tool_name}" specified. TypeError: {te}') assert isinstance(tool, tooladapter.CURRENT_BASETOOL) return tool_module, tool @@ -232,9 +224,9 @@ def get_propertytag(parent): and not re.match("false(.*)", expected_verdict) ): raise BenchExecException( - "Invalid value '{}' for expectedverdict of in tag <{}>: " - "Only 'true', 'false', 'false()' and 'unknown' " - "are allowed!".format(expected_verdict, parent.tag) + f"Invalid value '{expected_verdict}' for expectedverdict of " + f"in tag <{parent.tag}>: " + f"Only 'true', 'false', 'false()' and 'unknown' are allowed!" ) return tag @@ -268,9 +260,8 @@ def __init__(self, benchmark_file, config, start_time): self.description = util.read_file(config.description_file) except (OSError, UnicodeDecodeError) as e: raise BenchExecException( - "File '{}' given for description could not be read: {}".format( - config.description_file, e - ) + f"File '{config.description_file}' given for description " + f"could not be read: {e}" ) self.start_time = start_time @@ -285,11 +276,11 @@ def __init__(self, benchmark_file, config, start_time): try: rootTag = ElementTree.ElementTree().parse(benchmark_file) except ElementTree.ParseError as e: - sys.exit("Benchmark file {} is invalid: {}".format(benchmark_file, e)) + sys.exit(f"Benchmark file {benchmark_file} is invalid: {e}") if "benchmark" != rootTag.tag: sys.exit( - "Benchmark file {} is invalid: " - "It's root element is not named 'benchmark'.".format(benchmark_file) + f"Benchmark file {benchmark_file} is invalid: " + f"Its root element is not named 'benchmark'." ) # get tool @@ -311,7 +302,7 @@ def parse_memory_limit(value): return util.parse_memory_value(value) else: raise ValueError( - "Memory limit must have a unit suffix, e.g., '{} MB'".format(value) + f"Memory limit must have a unit suffix, e.g., '{value} MB'" ) rlimits = {} @@ -329,13 +320,12 @@ def handle_limit_value(name, from_key, to_key, cmdline_value, parse_fn): try: rlimits[to_key] = parse_fn(value) except ValueError as e: - sys.exit("Invalid value for {} limit: {}".format(name.lower(), e)) + sys.exit(f"Invalid value for {name.lower()} limit: {e}") if rlimits[to_key] <= 0: sys.exit( - '{} limit "{}" is invalid, it needs to be a positive number ' - "(or -1 on the command line for disabling it).".format( - name, value - ) + f'{name} limit "{value}" is invalid, ' + f"it needs to be a positive number " + f"(or -1 on the command line for disabling it)." ) handle_limit_value( @@ -398,8 +388,8 @@ def handle_limit_value(name, from_key, to_key, cmdline_value, parse_fn): # get global source files, they are used in all run sets if rootTag.findall("sourcefiles"): sys.exit( - "Benchmark file {} has unsupported old format. " - "Rename tags to .".format(benchmark_file) + f"Benchmark file {benchmark_file} has unsupported old format. " + f"Rename tags to ." ) globalSourcefilesTags = rootTag.findall("tasks") @@ -428,9 +418,7 @@ def handle_limit_value(name, from_key, to_key, cmdline_value, parse_fn): ] for pattern in self.result_files_patterns: if pattern.startswith(".."): - sys.exit( - "Invalid relative result-files pattern '{}'.".format(pattern) - ) + sys.exit(f"Invalid relative result-files pattern '{pattern}'.") else: # default is "everything below current directory" self.result_files_patterns = ["."] @@ -550,8 +538,8 @@ def __init__(self, rundefinitionTag, benchmark, index, globalSourcefilesTags=[]) # get all runs, a run contains one sourcefile with options if rundefinitionTag.findall("sourcefiles"): sys.exit( - "Benchmark file {} has unsupported old format. " - "Rename tags to .".format(benchmark.benchmark_file) + f"Benchmark file {benchmark.benchmark_file} has unsupported old format. " + f"Rename tags to ." ) self.blocks = self.extract_runs_from_xml( globalSourcefilesTags + rundefinitionTag.findall("tasks"), @@ -705,8 +693,8 @@ def _read_set_file(filename): input_files_in_set = list(_read_set_file(file)) if not input_files_in_set: sys.exit( - "Error: Nothing in includes file '{}' " - "matches existing files.".format(file) + f"Error: Nothing in includes file '{file}' " + f"matches existing files." ) sourcefiles += input_files_in_set @@ -794,9 +782,7 @@ def create_run_from_task_definition( ) if not input_files: raise BenchExecException( - "Task-definition file {} does not define any input files.".format( - task_def_file - ) + f"Task-definition file {task_def_file} does not define any input files." ) required_files = handle_files_from_task_definition( task_def.get("required_files"), task_def_file @@ -825,18 +811,17 @@ def create_run_from_task_definition( for prop_dict in task_def.get("properties", []): if not isinstance(prop_dict, dict) or "property_file" not in prop_dict: raise BenchExecException( - "Missing property file for property in task-definition file {}.".format( - task_def_file - ) + f"Missing property file for property " + f"in task-definition file {task_def_file}." ) expanded = util.expand_filename_pattern( prop_dict["property_file"], os.path.dirname(task_def_file) ) if len(expanded) != 1: raise BenchExecException( - "Property pattern '{}' in task-definition file {} does not refer to exactly one file.".format( - prop_dict["property_file"], task_def_file - ) + f"Property pattern '{prop_dict['property_file']}' " + f"in task-definition file {task_def_file} " + f"does not refer to exactly one file." ) # TODO We could reduce I/O by checking absolute paths and using os.path.samestat @@ -849,9 +834,9 @@ def create_run_from_task_definition( expected_result, bool ): raise BenchExecException( - "Invalid expected result '{}' for property {} in task-definition file {}.".format( - expected_result, prop_dict["property_file"], task_def_file - ) + f"Invalid expected result '{expected_result}' " + f"for property {prop_dict['property_file']} " + f"in task-definition file {task_def_file}." ) run.expected_results[prop.filename] = result.ExpectedResult( expected_result, prop_dict.get("subproperty") @@ -866,9 +851,8 @@ def create_run_from_task_definition( return None elif len(run.expected_results) > 1: raise BenchExecException( - "Property '{}' specified multiple times in task-definition file {}.".format( - prop.filename, task_def_file - ) + f"Property '{prop.filename}' specified multiple times " + f"in task-definition file {task_def_file}." ) assert len(run.expected_results) == 1 @@ -1019,9 +1003,9 @@ def log_property_file_once(msg): if expandedPropertyFiles: if len(expandedPropertyFiles) > 1: log_property_file_once( - "Pattern {0} for input file {1} in propertyfile tag matches more than one file. Only {2} will be used.".format( - self.propertyfile, self.identifier, expandedPropertyFiles[0] - ) + f"Pattern {self.propertyfile} for input file {self.identifier} " + f"in propertyfile tag matches more than one file. " + f"Only {expandedPropertyFiles[0]} will be used." ) self.propertyfile = expandedPropertyFiles[0] elif substitutedPropertyfiles and os.path.isfile( @@ -1030,9 +1014,8 @@ def log_property_file_once(msg): self.propertyfile = substitutedPropertyfiles[0] else: log_property_file_once( - "Pattern {0} for input file {1} in propertyfile tag did not match any file. It will be ignored.".format( - self.propertyfile, self.identifier - ) + f"Pattern {self.propertyfile} for input file {self.identifier} " + f"in propertyfile tag did not match any file. It will be ignored." ) self.propertyfile = None @@ -1151,7 +1134,7 @@ def _analyze_result(self, exitcode, output, termination_reason): tool_status = "KILLED BY SIGNAL " + str(exitcode.signal) elif exitcode.value and tool_status != result.RESULT_UNKNOWN: - tool_status = "{} ({})".format(result.RESULT_ERROR, exitcode.value) + tool_status = f"{result.RESULT_ERROR} ({exitcode.value})" # Tools sometimes produce a result even after violating a resource limit. # This should not be counted, so we overwrite the result with TIMEOUT/OOM @@ -1177,7 +1160,7 @@ def _analyze_result(self, exitcode, output, termination_reason): result.RESULT_LIST_OTHER + [status, "KILLED", "KILLED BY SIGNAL 9"] ): # timeout/OOM but tool still returned some result - status = "{} ({})".format(status, tool_status) + status = f"{status} ({tool_status})" return status @@ -1265,12 +1248,10 @@ def __init__(self, tags, rlimits, config): self.cpu_model = config.cpu_model if self.cpu_cores is not None and self.cpu_cores <= 0: - raise Exception( - "Invalid value {} for required CPU cores.".format(self.cpu_cores) - ) + raise Exception(f"Invalid value {self.cpu_cores} for required CPU cores.") if self.memory is not None and self.memory <= 0: - raise Exception("Invalid value {} for required memory.".format(self.memory)) + raise Exception(f"Invalid value {self.memory} for required memory.") def __str__(self): s = "" @@ -1281,4 +1262,4 @@ def __str__(self): if self.memory: s += " Memory=" + str(self.memory / _BYTE_FACTOR / _BYTE_FACTOR) + " MB" - return "Requirements:" + (s if s else " None") + return f"Requirements: {s or ' None'}" diff --git a/benchexec/oomhandler.py b/benchexec/oomhandler.py index 2aa09f090..edaf4a89e 100644 --- a/benchexec/oomhandler.py +++ b/benchexec/oomhandler.py @@ -61,15 +61,13 @@ def __init__(self, cgroups, pid_to_kill, callbackFn=lambda reason: None): self._efd = _libc.eventfd(0, _EFD_CLOEXEC) try: - util.write_file( - "{} {}".format(self._efd, ofd), cgroup, "cgroup.event_control" - ) + util.write_file(f"{self._efd} {ofd}", cgroup, "cgroup.event_control") # If everything worked, disable Kernel-side process killing. # This is not allowed if memory.use_hierarchy is enabled, # but we don't care. try: - os.write(ofd, "1".encode("ascii")) + os.write(ofd, b"1") except OSError as e: logging.debug( "Failed to disable kernel-side OOM killer: error %s (%s)", diff --git a/benchexec/outputhandler.py b/benchexec/outputhandler.py index 1300ed5fc..9742d447c 100644 --- a/benchexec/outputhandler.py +++ b/benchexec/outputhandler.py @@ -169,9 +169,9 @@ def set_error(self, msg, runSet=None): Mark the benchmark as erroneous, e.g., because the benchmarking tool crashed. The message is intended as explanation for the user. """ - self.xml_header.set("error", msg if msg else "unknown error") + self.xml_header.set("error", msg or "unknown error") if runSet: - runSet.xml.set("error", msg if msg else "unknown error") + runSet.xml.set("error", msg or "unknown error") def store_header_in_xml(self, version, memlimit, timelimit, corelimit): @@ -229,7 +229,7 @@ def write_header_to_log(self, sysinfo): def format_line(key, value): if value is None: return "" - return (key + ":").ljust(columnWidth) + str(value).strip() + "\n" + return ((key + ":").ljust(columnWidth) + str(value)).strip() + "\n" def format_byte(key, value): if value is None: @@ -334,9 +334,7 @@ def output_before_run_set(self, runSet, start_time=None): # write run set name to terminal numberOfFiles = len(runSet.runs) numberOfFilesStr = ( - " (1 file)" - if numberOfFiles == 1 - else " ({0} files)".format(numberOfFiles) + " (1 file)" if numberOfFiles == 1 else f" ({numberOfFiles} files)" ) util.printOut( "\nexecuting run set" @@ -412,9 +410,11 @@ def output_for_skipping_run_set(self, runSet, reason=None): runSetInfo = "\n\n" if runSet.name: runSetInfo += runSet.name + "\n" - runSetInfo += "Run set {0} of {1}: skipped {2}\n".format( - runSet.index, len(self.benchmark.run_sets), reason or "" + runSetInfo += ( + f"Run set {runSet.index} of {len(self.benchmark.run_sets)}: " + f"skipped {reason or ''}".rstrip() ) + runSetInfo += "\n" self.txt_file.append(runSetInfo) def writeRunSetInfoToLog(self, runSet): @@ -426,12 +426,9 @@ def writeRunSetInfoToLog(self, runSet): if runSet.name: runSetInfo += runSet.name + "\n" runSetInfo += ( - "Run set {0} of {1} with options '{2}' and propertyfile '{3}'\n\n".format( - runSet.index, - len(self.benchmark.run_sets), - " ".join(runSet.options), - util.text_or_none(runSet.propertytag), - ) + f"Run set {runSet.index} of {len(self.benchmark.run_sets)} " + f"with options '{' '.join(runSet.options)}' and " + f"propertyfile '{util.text_or_none(runSet.propertytag)}'\n\n" ) titleLine = self.create_output_line( @@ -469,9 +466,7 @@ def output_before_run(self, run): runSet.started_runs = 1 timeStr = time.strftime("%H:%M:%S", time.localtime()) + " " - progressIndicator = " ({0}/{1})".format( - runSet.started_runs, len(runSet.runs) - ) + progressIndicator = f" ({runSet.started_runs}/{len(runSet.runs)})" terminalTitle = TERMINAL_TITLE.format(runSet.full_name + progressIndicator) if self.benchmark.num_of_threads == 1: util.printOut( @@ -614,7 +609,7 @@ def run_set_to_text(self, runSet, cputime=0, walltime=0, energy={}): lines.append(runSet.simpleLine) # write endline into txt_file - endline = "Run set {0}".format(runSet.index) + endline = f"Run set {runSet.index}" # format time, type is changed from float to string! cputime_str = ( @@ -723,7 +718,7 @@ def add_column_to_xml(self, xml, title, value, prefix="", value_suffix=""): elif title.startswith("mbm"): value_suffix = "B/s" - value = "{}{}".format(value, value_suffix) + value = f"{value}{value_suffix}" element = ElementTree.Element("column", title=title, value=value) if hidden: @@ -815,10 +810,10 @@ def _find_file_relative(name): if self.compress_results else self.xml_file_names ) + cmdline = [tableGeneratorPath] + xml_file_names util.printOut( - "In order to get HTML and CSV tables, run\n{0} '{1}'".format( - tableGeneratorPath, "' '".join(xml_file_names) - ) + "In order to get HTML and CSV tables, run\n" + + " ".join(map(util.escape_string_shell, cmdline)), ) if isStoppedByInterrupt: @@ -828,10 +823,24 @@ def _find_file_relative(name): def close(self): """Do all necessary cleanup.""" + self.txt_file.close() + if self.compress_results: with self.log_zip_lock: + zip_is_empty = not self.log_zip.namelist() self.log_zip.close() - self.txt_file.close() + + if zip_is_empty: + # remove useless ZIP file, e.g., because all runs were skipped + os.remove(self.benchmark.log_zip) + self.all_created_files.remove(self.benchmark.log_zip) + + # remove useless log folder if it is empty, + # e.g., because all logs were written to the ZIP file + try: + os.rmdir(self.benchmark.log_folder) + except OSError: + pass def get_filename(self, runSetName, fileExtension): """ diff --git a/benchexec/pqos.py b/benchexec/pqos.py index 90538f3fb..4816ff9fa 100644 --- a/benchexec/pqos.py +++ b/benchexec/pqos.py @@ -186,15 +186,13 @@ def flatten_mon_data(mon_data): if isinstance(val, dict): for sub_key, sub_val in val.items(): if len(mon_data) > 1: - flatten_key = "{0}_{1}_cpus{2}".format( - key, sub_key, core_str - ) + flatten_key = f"{key}_{sub_key}_cpus{core_str}" else: - flatten_key = "{0}_{1}".format(key, sub_key) + flatten_key = f"{key}_{sub_key}" flatten_dict[flatten_key] = sub_val else: if len(mon_data) > 1: - flatten_key = "{0}_cpus{1}".format(key, core_str) + flatten_key = f"{key}_cpus{core_str}" else: flatten_key = key flatten_dict[flatten_key] = val diff --git a/benchexec/resources.py b/benchexec/resources.py index 9785f0b56..f9aa0d15c 100644 --- a/benchexec/resources.py +++ b/benchexec/resources.py @@ -69,9 +69,8 @@ def get_cpu_cores_per_run( invalid_cores = sorted(set(coreSet).difference(set(allCpus))) if len(invalid_cores) > 0: raise ValueError( - "The following provided CPU cores are not available: {}".format( - ", ".join(map(str, invalid_cores)) - ) + "The following provided CPU cores are not available: " + + ", ".join(map(str, invalid_cores)) ) allCpus = [core for core in allCpus if core in coreSet] @@ -80,7 +79,7 @@ def get_cpu_cores_per_run( # read mapping of core to memory region cores_of_memory_region = collections.defaultdict(list) for core in allCpus: - coreDir = "/sys/devices/system/cpu/cpu{0}/".format(core) + coreDir = f"/sys/devices/system/cpu/cpu{core}/" memory_regions = _get_memory_banks_listed_in_dir(coreDir) if memory_regions: cores_of_memory_region[memory_regions[0]].append(core) @@ -113,15 +112,13 @@ def get_cpu_cores_per_run( for core in allCpus: siblings = util.parse_int_list( util.read_file( - "/sys/devices/system/cpu/cpu{0}/topology/thread_siblings_list".format( - core - ) + f"/sys/devices/system/cpu/cpu{core}/topology/thread_siblings_list" ) ) siblings_of_core[core] = siblings logging.debug("Siblings of cores are %s.", siblings_of_core) except ValueError as e: - sys.exit("Could not read CPU information from kernel: {0}".format(e)) + sys.exit(f"Could not read CPU information from kernel: {e}") return _get_cpu_cores_per_run0( coreLimit, num_of_threads, @@ -152,17 +149,17 @@ def _get_cpu_cores_per_run0( @param siblings_of_core: a mapping from each core to a list of sibling cores including the core itself (a sibling is a core sharing the same physical core) """ # First, do some checks whether this algorithm has a chance to work. - if coreLimit > len(allCpus): + coreCount = len(allCpus) + if coreLimit > coreCount: sys.exit( - "Cannot run benchmarks with {0} CPU cores, only {1} CPU cores available.".format( - coreLimit, len(allCpus) - ) + f"Cannot run benchmarks with {coreLimit} CPU cores, " + f"only {coreCount} CPU cores available." ) - if coreLimit * num_of_threads > len(allCpus): + if coreLimit * num_of_threads > coreCount: sys.exit( - "Cannot run {0} benchmarks in parallel with {1} CPU cores each, only {2} CPU cores available. Please reduce the number of threads to {3}.".format( - num_of_threads, coreLimit, len(allCpus), len(allCpus) // coreLimit - ) + f"Cannot run {num_of_threads} benchmarks in parallel " + f"with {coreLimit} CPU cores each, only {coreCount} CPU cores available. " + f"Please reduce the number of threads to {coreCount // coreLimit}." ) if not use_hyperthreading: @@ -184,41 +181,33 @@ def _get_cpu_cores_per_run0( for core in unused_cores: siblings_of_core.pop(core) logging.debug( - "Running in no-hyperthreading mode, avoiding the use of CPU cores {}".format( - unused_cores - ) + f"Running in no-hyperthreading mode, " + f"avoiding the use of CPU cores {unused_cores}" ) - unit_size = None # Number of cores per unit - for unit, cores in cores_of_unit.items(): - if unit_size is None: - unit_size = len(cores) - elif unit_size != len(cores): - sys.exit( - "Asymmetric machine architecture not supported: CPU/memory region {0} has {1} cores, but other CPU/memory region has {2} cores.".format( - unit, len(cores), unit_size - ) - ) + unit_size = len(next(iter(cores_of_unit.values()))) # Number of units per core + if any(len(cores) != unit_size for cores in cores_of_unit.values()): + sys.exit( + "Asymmetric machine architecture not supported: " + "CPUs/memory regions with different number of cores." + ) - core_size = None # Number of threads per core - for core, siblings in siblings_of_core.items(): - if core_size is None: - core_size = len(siblings) - elif core_size != len(siblings): - sys.exit( - "Asymmetric machine architecture not supported: CPU core {0} has {1} siblings, but other core has {2} siblings.".format( - core, len(siblings), core_size - ) - ) + core_size = len(next(iter(siblings_of_core.values()))) # Number of threads per core + if any(len(siblings) != core_size for siblings in siblings_of_core.values()): + sys.exit( + "Asymmetric machine architecture not supported: " + "CPU cores with different number of sibling cores." + ) all_cpus_set = set(allCpus) for core, siblings in siblings_of_core.items(): siblings_set = set(siblings) if not siblings_set.issubset(all_cpus_set): + unusable_cores = siblings_set.difference(all_cpus_set) sys.exit( - "Core assignment is unsupported because siblings {0} of core {1} are not usable. Please always make all virtual cores of a physical core available.".format( - siblings_set.difference(all_cpus_set), core - ) + f"Core assignment is unsupported because siblings {unusable_cores} " + f"of core {core} are not usable. " + f"Please always make all virtual cores of a physical core available." ) # Second, compute some values we will need. @@ -230,18 +219,19 @@ def _get_cpu_cores_per_run0( units_per_run = int(math.ceil(coreLimit_rounded_up / unit_size)) if units_per_run > 1 and units_per_run * num_of_threads > unit_count: sys.exit( - "Cannot split runs over multiple CPUs/memory regions and at the same time assign multiple runs to the same CPU/memory region. Please reduce the number of threads to {0}.".format( - unit_count // units_per_run - ) + f"Cannot split runs over multiple CPUs/memory regions " + f"and at the same time assign multiple runs to the same CPU/memory region. " + f"Please reduce the number of threads to {unit_count // units_per_run}." ) runs_per_unit = int(math.ceil(num_of_threads / unit_count)) assert units_per_run == 1 or runs_per_unit == 1 if units_per_run == 1 and runs_per_unit * coreLimit > unit_size: sys.exit( - "Cannot run {} benchmarks with {} cores on {} CPUs/memory regions with {} cores, because runs would need to be split across multiple CPUs/memory regions. Please reduce the number of threads.".format( - num_of_threads, coreLimit, unit_count, unit_size - ) + f"Cannot run {num_of_threads} benchmarks with {coreLimit} cores " + f"on {unit_count} CPUs/memory regions with {unit_size} cores, " + f"because runs would need to be split across multiple CPUs/memory regions. " + f"Please reduce the number of threads." ) # Warn on misuse of hyper-threading @@ -303,10 +293,11 @@ def _get_cpu_cores_per_run0( core for core in cores_of_unit[unit] if core not in cores ] - assert ( - len(cores) == coreLimit - ), "Wrong number of cores for run {} of {} - previous results: {}, remaining cores per CPU/memory region: {}, current cores: {}".format( - run + 1, num_of_threads, result, cores_of_unit, cores + assert len(cores) == coreLimit, ( + f"Wrong number of cores for run {run + 1} of {num_of_threads} " + f"- previous results: {result}, " + f"remaining cores per CPU/memory region: {cores_of_unit}, " + f"current cores: {cores}" ) blocked_cores = cores if need_HT else cores_with_siblings assert not used_cores.intersection(blocked_cores) @@ -335,7 +326,7 @@ def get_memory_banks_per_run(coreAssignment, cgroups): for cores in coreAssignment: mems = set() for core in cores: - coreDir = "/sys/devices/system/cpu/cpu{0}/".format(core) + coreDir = f"/sys/devices/system/cpu/cpu{core}/" mems.update(_get_memory_banks_listed_in_dir(coreDir)) allowedMems = sorted(mems.intersection(allMems)) logging.debug( @@ -356,7 +347,7 @@ def get_memory_banks_per_run(coreAssignment, cgroups): # because this system has no NUMA support return None except ValueError as e: - sys.exit("Could not read memory information from kernel: {0}".format(e)) + sys.exit(f"Could not read memory information from kernel: {e}") def _get_memory_banks_listed_in_dir(path): @@ -381,15 +372,14 @@ def check_memory_size(memLimit, num_of_threads, memoryAssignment, my_cgroups): def check_limit(actualLimit): if actualLimit < memLimit: sys.exit( - "Cgroups allow only {} bytes of memory to be used, cannot execute runs with {} bytes of memory.".format( - actualLimit, memLimit - ) + f"Cgroups allow only {actualLimit} bytes of memory to be used, " + f"cannot execute runs with {memLimit} bytes of memory." ) elif actualLimit < memLimit * num_of_threads: sys.exit( - "Cgroups allow only {} bytes of memory to be used, not enough for {} benchmarks with {} bytes each. Please reduce the number of threads".format( - actualLimit, num_of_threads, memLimit - ) + f"Cgroups allow only {actualLimit} bytes of memory to be used, " + f"not enough for {num_of_threads} benchmarks with {memLimit} bytes " + f"each. Please reduce the number of threads." ) if not os.path.isdir("/sys/devices/system/node/"): @@ -422,7 +412,7 @@ def check_limit(actualLimit): memSizes = {mem: _get_memory_bank_size(mem) for mem in allMems} except ValueError as e: - sys.exit("Could not read memory information from kernel: {0}".format(e)) + sys.exit(f"Could not read memory information from kernel: {e}") # Check whether enough memory is allocatable on the assigned memory banks. # As the sum of the sizes of the memory banks is at most the total size of memory in the system, @@ -433,22 +423,20 @@ def check_limit(actualLimit): totalSize = sum(memSizes[mem] for mem in mems_of_run) if totalSize < memLimit: sys.exit( - "Memory banks {} do not have enough memory for one run, only {} bytes available.".format( - mems_of_run, totalSize - ) + f"Memory banks {mems_of_run} do not have enough memory for one run, " + f"only {totalSize} bytes available." ) usedMem[tuple(mems_of_run)] += memLimit if usedMem[tuple(mems_of_run)] > totalSize: sys.exit( - "Memory banks {} do not have enough memory for all runs, only {} bytes available. Please reduce the number of threads.".format( - mems_of_run, totalSize - ) + f"Memory banks {mems_of_run} do not have enough memory for all runs, " + f"only {totalSize} bytes available. Please reduce the number of threads." ) def _get_memory_bank_size(memBank): """Get the size of a memory bank in bytes.""" - fileName = "/sys/devices/system/node/node{0}/meminfo".format(memBank) + fileName = f"/sys/devices/system/node/node{memBank}/meminfo" size = None with open(fileName) as f: for line in f: @@ -456,27 +444,25 @@ def _get_memory_bank_size(memBank): size = line.split(":")[1].strip() if size[-3:] != " kB": raise ValueError( - '"{}" in file {} is not a memory size.'.format(size, fileName) + f'"{size}" in file {fileName} is not a memory size.' ) # kernel uses KiB but names them kB, convert to Byte size = int(size[:-3]) * 1024 logging.debug("Memory bank %s has size %s bytes.", memBank, size) return size - raise ValueError("Failed to read total memory from {}.".format(fileName)) + raise ValueError(f"Failed to read total memory from {fileName}.") def get_cpu_package_for_core(core): """Get the number of the physical package (socket) a core belongs to.""" return int( util.read_file( - "/sys/devices/system/cpu/cpu{0}/topology/physical_package_id".format(core) + f"/sys/devices/system/cpu/cpu{core}/topology/physical_package_id" ) ) def get_cores_of_same_package_as(core): return util.parse_int_list( - util.read_file( - "/sys/devices/system/cpu/cpu{0}/topology/core_siblings_list".format(core) - ) + util.read_file(f"/sys/devices/system/cpu/cpu{core}/topology/core_siblings_list") ) diff --git a/benchexec/result.py b/benchexec/result.py index b6cc0f62a..904c0e333 100644 --- a/benchexec/result.py +++ b/benchexec/result.py @@ -91,7 +91,7 @@ class ExpectedResult(collections.namedtuple("ExpectedResult", "result subpropert def __str__(self): result = {True: "true", False: "false"}.get(self.result, "") if result and self.subproperty: - return "{}({})".format(result, self.subproperty) + return f"{result}({self.subproperty})" return result @classmethod @@ -100,7 +100,7 @@ def from_str(cls, s): return ExpectedResult(None, None) match = re.match(r"^(true|false)(\((.+)\))?$", s) if not match: - raise ValueError("Not a valid expected verdict: {}".format(s)) + raise ValueError(f"Not a valid expected verdict: {s}") return ExpectedResult(match.group(1) == "true", match.group(3)) diff --git a/benchexec/runexecutor.py b/benchexec/runexecutor.py index e6b6b8a8f..f9b9cb179 100644 --- a/benchexec/runexecutor.py +++ b/benchexec/runexecutor.py @@ -218,9 +218,8 @@ def main(argv=None): raise ValueError() except ValueError: parser.error( - 'Cgroup value "{}" has invalid format, needs to be "subsystem.option=value".'.format( - arg - ) + f'Cgroup value "{arg}" has invalid format, ' + f'needs to be "subsystem.option=value".' ) cgroup_values[(subsystem, option)] = value cgroup_subsystems.add(subsystem) @@ -293,13 +292,13 @@ def print_optional_result(key, unit="", format_fn=str): print_optional_result("cputime", "s") for key in sorted(result.keys()): if key.startswith("cputime-"): - print("{}={:.9f}s".format(key, result[key])) + print(f"{key}={result[key]:.9f}s") print_optional_result("memory", "B") print_optional_result("blkio-read", "B") print_optional_result("blkio-write", "B") energy = intel_cpu_energy.format_energy_results(result.get("cpuenergy")) for energy_key, energy_value in energy.items(): - print("{}={}J".format(energy_key, energy_value)) + print(f"{energy_key}={energy_value}J") class RunExecutor(containerexecutor.ContainerExecutor): @@ -432,9 +431,8 @@ def _setup_cgroups(self, my_cpus, memlimit, memory_nodes, cgroup_values): except OSError as e: cgroups.remove() sys.exit( - '{} for setting cgroup option {}.{} to "{}" (error code {}).'.format( - e.strerror, subsystem, option, value, e.errno - ) + f"{e.strerror} for setting cgroup option {subsystem}.{option} " + f'to "{value}" (error code {e.errno}).' ) logging.debug( 'Cgroup value %s.%s was set to "%s", new value is now "%s".', @@ -631,7 +629,7 @@ def execute_run( files_size_limit=None, error_filename=None, write_header=True, - **kwargs + **kwargs, ): """ This function executes a given command with resource limits, @@ -673,13 +671,13 @@ def execute_run( if hardtimelimit is not None: if hardtimelimit <= 0: - sys.exit("Invalid time limit {0}.".format(hardtimelimit)) + sys.exit(f"Invalid time limit {hardtimelimit}.") if CPUACCT not in self.cgroups: logging.error("Time limit cannot be specified without cpuacct cgroup.") critical_cgroups.add(CPUACCT) if softtimelimit is not None: if softtimelimit <= 0: - sys.exit("Invalid soft time limit {0}.".format(softtimelimit)) + sys.exit(f"Invalid soft time limit {softtimelimit}.") if hardtimelimit and (softtimelimit > hardtimelimit): sys.exit("Soft time limit cannot be larger than the hard time limit.") if CPUACCT not in self.cgroups: @@ -695,7 +693,7 @@ def execute_run( walltimelimit = softtimelimit + _WALLTIME_LIMIT_DEFAULT_OVERHEAD else: if walltimelimit <= 0: - sys.exit("Invalid wall time limit {0}.".format(walltimelimit)) + sys.exit(f"Invalid wall time limit {walltimelimit}.") if cores is not None: if self.cpus is None: @@ -704,15 +702,12 @@ def execute_run( elif not cores: sys.exit("Cannot execute run without any CPU core.") elif not set(cores).issubset(self.cpus): - sys.exit( - "Cores {0} are not allowed to be used".format( - list(set(cores).difference(self.cpus)) - ) - ) + forbidden_cores = list(set(cores).difference(self.cpus)) + sys.exit(f"Cores {forbidden_cores} are not allowed to be used") if memlimit is not None: if memlimit <= 0: - sys.exit("Invalid memory limit {0}.".format(memlimit)) + sys.exit(f"Invalid memory limit {memlimit}.") if MEMORY not in self.cgroups: logging.error( "Memory limit specified, but cannot be implemented without cgroup support." @@ -726,45 +721,38 @@ def execute_run( elif len(memory_nodes) == 0: sys.exit("Cannot execute run without any memory node.") elif not set(memory_nodes).issubset(self.memory_nodes): - sys.exit( - "Memory nodes {0} are not allowed to be used".format( - list(set(memory_nodes).difference(self.memory_nodes)) - ) - ) + forbidden_nodes = list(set(memory_nodes).difference(self.memory_nodes)) + sys.exit(f"Memory nodes {forbidden_nodes} are not allowed to be used") if workingDir: if not os.path.exists(workingDir): - sys.exit("Working directory {0} does not exist.".format(workingDir)) + sys.exit(f"Working directory {workingDir} does not exist.") if not os.path.isdir(workingDir): - sys.exit("Working directory {0} is not a directory.".format(workingDir)) + sys.exit(f"Working directory {workingDir} is not a directory.") if not os.access(workingDir, os.X_OK): - sys.exit( - "Permission denied for working directory {0}.".format(workingDir) - ) + sys.exit(f"Permission denied for working directory {workingDir}.") self.cgroups.handle_errors(critical_cgroups) for ((subsystem, option), _) in cgroupValues.items(): if subsystem not in self._cgroup_subsystems: sys.exit( - 'Cannot set option "{option}" for subsystem "{subsystem}" that is not enabled. ' - 'Please specify "--require-cgroup-subsystem {subsystem}".'.format( - option=option, subsystem=subsystem - ) + f'Cannot set option "{option}" for subsystem "{subsystem}" ' + f"that is not enabled. " + f'Please specify "--require-cgroup-subsystem {subsystem}".' ) if not self.cgroups.has_value(subsystem, option): sys.exit( - 'Cannot set option "{option}" for subsystem "{subsystem}", it does not exist.'.format( - option=option, subsystem=subsystem - ) + f'Cannot set option "{option}" for subsystem "{subsystem}", ' + f"it does not exist." ) if files_count_limit is not None: if files_count_limit < 0: - sys.exit("Invalid files-count limit {0}.".format(files_count_limit)) + sys.exit(f"Invalid files-count limit {files_count_limit}.") if files_size_limit is not None: if files_size_limit < 0: - sys.exit("Invalid files-size limit {0}.".format(files_size_limit)) + sys.exit(f"Invalid files-size limit {files_size_limit}.") try: return self._execute( @@ -822,7 +810,7 @@ def _execute( max_output_size, files_count_limit, files_size_limit, - **kwargs + **kwargs, ): """ This method executes the command line and waits for the termination of it, @@ -1083,7 +1071,7 @@ def _get_cgroup_measurements(self, cgroups, ru_child, result): coretime = int(coretime) if coretime != 0: # convert nanoseconds to seconds - result["cputime-cpu" + str(core)] = coretime / 1000000000 + result["cputime-cpu" + str(core)] = coretime / 1_000_000_000 except (OSError, ValueError) as e: logging.debug( "Could not read CPU time for core %s from kernel: %s", core, e diff --git a/benchexec/systeminfo.py b/benchexec/systeminfo.py index 93317b69b..545c62a42 100644 --- a/benchexec/systeminfo.py +++ b/benchexec/systeminfo.py @@ -115,18 +115,17 @@ def __init__(self, cores=None): Create an instance that monitors the given list of cores (or all CPUs). """ self.cpu_throttle_count = {} - cpu_pattern = "[{0}]".format(",".join(map(str, cores))) if cores else "*" - for file in glob.glob( - "/sys/devices/system/cpu/cpu{}/thermal_throttle/*_throttle_count".format( - cpu_pattern - ) - ): - try: - self.cpu_throttle_count[file] = int(util.read_file(file)) - except Exception as e: - logging.warning( - "Cannot read throttling count of CPU from kernel: %s", e - ) + cores = [str(core) for core in cores] if cores else ["*"] + for core in cores: + for file in glob.iglob( + f"/sys/devices/system/cpu/cpu{core}/thermal_throttle/*_throttle_count" + ): + try: + self.cpu_throttle_count[file] = int(util.read_file(file)) + except Exception as e: + logging.warning( + "Cannot read throttling count of CPU from kernel: %s", e + ) def has_throttled(self): """ @@ -188,18 +187,18 @@ def is_turbo_boost_enabled(): boost_enabled = int(util.read_file(_TURBO_BOOST_FILE)) if not (0 <= boost_enabled <= 1): raise ValueError( - "Invalid value {} for turbo boost activation".format(boost_enabled) + f"Invalid value {boost_enabled} for turbo boost activation" ) return boost_enabled != 0 if os.path.exists(_TURBO_BOOST_FILE_PSTATE): boost_disabled = int(util.read_file(_TURBO_BOOST_FILE_PSTATE)) if not (0 <= boost_disabled <= 1): raise ValueError( - "Invalid value {} for turbo boost activation".format(boost_disabled) + f"Invalid value {boost_disabled} for turbo boost activation" ) return boost_disabled != 1 except ValueError as e: - sys.exit("Could not read turbo-boost information from kernel: {0}".format(e)) + sys.exit(f"Could not read turbo-boost information from kernel: {e}") def has_swap(): diff --git a/benchexec/tablegenerator/__init__.py b/benchexec/tablegenerator/__init__.py index c0e7e671c..e930f42c9 100644 --- a/benchexec/tablegenerator/__init__.py +++ b/benchexec/tablegenerator/__init__.py @@ -1023,11 +1023,11 @@ def filter_rows_with_differences(rows): return [] def get_index_of_column(name, cols): - assert cols, "Cannot look for column '{}' in empy column list".format(name) + assert cols, f"Cannot look for column '{name}' in empy column list" for i in range(0, len(cols)): if cols[i].title == name: return i - assert False, "Column '{}' not found in columns '{}'".format(name, cols) + assert False, f"Column '{name}' not found in columns '{cols}'" def all_equal_result(listOfResults): relevant_columns = set() @@ -1080,7 +1080,7 @@ def format_run_set_attributes_nicely(runSetResults): else: turbo = None runSetResult.attributes["turbo"] = ( - ", Turbo Boost: {}".format(turbo) if turbo else "" + f", Turbo Boost: {turbo}" if turbo else "" ) elif key == "timelimit": @@ -1101,9 +1101,7 @@ def round_to_MB(value): if unit and unit != "B": return value try: - return "{:.0f} MB".format( - int(number) / _BYTE_FACTOR / _BYTE_FACTOR - ) + return f"{int(number) / _BYTE_FACTOR / _BYTE_FACTOR:.0f} MB" except ValueError: return value @@ -1116,7 +1114,7 @@ def round_to_MHz(value): if unit and unit != "Hz": return value try: - return "{:.0f} MHz".format(int(number) / 1000 / 1000) + return f"{int(number) / 1000 / 1000:.0f} MHz" except ValueError: return value @@ -1534,7 +1532,7 @@ def handle_initial_table_state(value): value = value.lstrip("#") if not value.startswith("/"): raise argparse.ArgumentTypeError( - "Invalid value '{}', needs to start with /".format(value) + f"Invalid value '{value}', needs to start with /" ) return value @@ -1597,9 +1595,7 @@ def main(args=None): if table_definition_lists_result_files(table_definition): if options.tables: arg_parser.error( - "Invalid additional arguments '{}'.".format( - " ".join(options.tables) - ) + f"Invalid additional arguments '{' '.join(options.tables)}'." ) runSetResults = load_results_from_table_definition( @@ -1686,15 +1682,12 @@ def main(args=None): ) if options.dump_counts: # print some stats for Buildbot - print( - "REGRESSIONS {}".format( - get_regression_count(rows, options.ignoreFlappingTimeouts) - ) - ) + print("REGRESSIONS", get_regression_count(rows, options.ignoreFlappingTimeouts)) + countsList = get_counts(rows) print("STATS") for counts in countsList: - print(" ".join(str(e) for e in counts)) + print(*counts) for f in futures: f.result() # to get any exceptions that may have occurred diff --git a/benchexec/tablegenerator/columns.py b/benchexec/tablegenerator/columns.py index ef046fd5a..5b7d57b1f 100644 --- a/benchexec/tablegenerator/columns.py +++ b/benchexec/tablegenerator/columns.py @@ -115,7 +115,7 @@ def max_decimal_digits(self): return self._max_decimal_digits def __str__(self): - return "{}({})".format(self._type, self._max_decimal_digits) + return f"{self._type}({self._max_decimal_digits})" class Column(object): @@ -153,9 +153,7 @@ def __init__( # If scaling on the variables is performed, a display unit must be defined, explicitly if scale_factor is not None and scale_factor != 1 and unit is None: raise util.TableDefinitionError( - "Scale factor is defined, but display unit is not (in column {})".format( - title - ) + f"Scale factor is defined, but display unit is not (in column {title})" ) self.title = title @@ -197,7 +195,7 @@ def format_title(self): title = self.display_title or self.title if self.is_numeric() and (self.unit or self.source_unit): used_unit = self.unit or self.source_unit - return "{} ({})".format(title, used_unit) + return f"{title} ({used_unit})" else: return title @@ -307,15 +305,15 @@ def set_column_type_from(self, column_values): self.max_width = max(title_width, values_width) def __str__(self): - return "{}(title={}, pattern={}, num_of_digits={}, href={}, col_type={}, unit={}, scale_factor={})".format( - self.__class__.__name__, - self.title, - self.pattern, - self.number_of_significant_digits, - self.href, - self.type, - self.unit, - self.scale_factor, + return ( + f"{self.__class__.__name__}(" + f"title={self.title}, " + f"pattern={self.pattern}, " + f"num_of_digits={self.number_of_significant_digits}, " + f"href={self.href}, " + f"col_type={self.type}, " + f"unit={self.unit}, " + f"scale_factor={self.scale_factor})" ) @@ -483,9 +481,8 @@ def _get_column_type_heur(column, column_values): column_source_unit = curr_column_unit elif column_source_unit != curr_column_unit: raise util.TableDefinitionError( - "Attribute sourceUnit different from real source unit: {} and {} (in column {})".format( - column_source_unit, curr_column_unit, column.title - ) + f"Attribute sourceUnit different from real source unit: " + f"{column_source_unit} and {curr_column_unit} (in column {column.title})" ) if column_unit and curr_column_unit != column_unit: if explicit_unit_defined: @@ -519,9 +516,7 @@ def _get_column_type_heur(column, column_values): 0, dec_digits_before_scale - ceil(log10(column_scale_factor)) ) - scaled_value = "{0:.{1}f}".format( - scaled_value, max_number_of_dec_digits_after_scale - ) + scaled_value = f"{scaled_value:.{max_number_of_dec_digits_after_scale}f}" scaled_value_match = REGEX_MEASURE.match(scaled_value) curr_dec_digits = _get_decimal_digits( @@ -581,7 +576,7 @@ def _get_scale_factor(unit, source_unit, column): # If the display unit is different from the source unit, a scale factor must be given explicitly raise util.TableDefinitionError( "Attribute displayUnit is different from sourceUnit," - + " but scaleFactor is not defined (in column {})".format(column.title) + + f" but scaleFactor is not defined (in column {column.title})" ) @@ -651,11 +646,11 @@ def _get_int_digits(decimal_number_match): def _check_unit_consistency(actual_unit, wanted_unit, column): if actual_unit and wanted_unit is None: raise util.TableDefinitionError( - "Trying to convert from one unit to another, but source unit not specified" - " (in column {})".format(column.title) + f"Trying to convert from one unit to another, " + f"but source unit not specified (in column {column.title})" ) elif wanted_unit != actual_unit: raise util.TableDefinitionError( - "Source value of different unit than specified source unit: " + "{} and {}" - " (in column {})".format(actual_unit, wanted_unit, column.title) + f"Source value of different unit than specified source unit: " + f"{actual_unit} and {wanted_unit} (in column {column.title})" ) diff --git a/benchexec/tablegenerator/htmltable.py b/benchexec/tablegenerator/htmltable.py index fd353a3ed..81169d0bf 100644 --- a/benchexec/tablegenerator/htmltable.py +++ b/benchexec/tablegenerator/htmltable.py @@ -31,7 +31,7 @@ def write_html_table( relevant_id_columns, output_path, common_prefix, - **kwargs + **kwargs, ): app_css = [util.read_bundled_file(path + "css") for path in _REACT_FILES] app_js = [util.read_bundled_file(path + "js") for path in _REACT_FILES] @@ -65,16 +65,14 @@ def write_json_part(name, value=None, last=False): out.write("\n") out.write( - """ + f""" - + {title} – BenchExec results -""".format( - title=title, version=__version__ - ) +""" ) write_tags("style", app_css) out.write( @@ -291,7 +289,7 @@ def adjust_column_to_statistics_values(column, column_stats): ] task_counts = ( - "in total {0} true tasks, {1} false tasks".format(count_true, count_false) + f"in total {count_true} true tasks, {count_false} false tasks" if count_true or count_false else "" ) @@ -410,7 +408,7 @@ def get_stat_row(field): stat_rows.append( dict( # noqa: C408 id="score", - title="score ({0} tasks, max score: {1})".format(len(rows), max_score), + title=f"score ({len(rows)} tasks, max score: {max_score})", description=task_counts, content=get_stat_row("score"), ) diff --git a/benchexec/tablegenerator/react-table/build/bundle.min.css b/benchexec/tablegenerator/react-table/build/bundle.min.css index 282120228..b770921f7 100644 --- a/benchexec/tablegenerator/react-table/build/bundle.min.css +++ b/benchexec/tablegenerator/react-table/build/bundle.min.css @@ -1 +1 @@ -body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace}body{overflow-x:hidden}.App{font-family:"Droid Sans","Liberation Sans",Ubuntu,"Trebuchet MS",Tahoma,Arial,Verdana,sans-serif}.link{text-decoration:underline;color:#71bcff}.btn,.link{cursor:pointer}.btn{margin:0 10px 9px 0;text-align:center;height:35px;box-shadow:0 4px 12px 0 rgba(113,188,255,.2);transition:all .4s ease-in-out;background-size:300% 100%}.btn:hover{background:#71bcff}.btn:disabled{cursor:default}.btn:disabled,.btn:disabled:hover{background:#a9a9a9}.btn-apply{margin-left:100px;background:#71bcff;box-shadow:0 4px 12px 0 rgba(113,188,255,.5)}.btn-apply:hover{background:#fff}.selectColumns{cursor:pointer;font-weight:700;background-color:#fff}.selectColumns:hover{background-color:#ccc}.header__tool-infos{font-weight:700}.separator{margin:0!important;padding:0!important;background:#adadad!important}.overview{background:#fff}.overview .filterBox{display:flex;flex-direction:column;position:absolute;right:0;height:100vh;z-index:9998;max-width:-webkit-max-content;max-width:-moz-max-content;max-width:max-content;min-width:-webkit-min-content;min-width:-moz-min-content;min-width:min-content;width:40vw;background-color:#fff;box-shadow:0 3px 6px 0 rgba(0,0,0,.15);transition:all .5s ease-in-out}.overview .filterBox .filter-card{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;width:100%;box-shadow:0 3px 6px 0 rgba(0,0,0,.15);margin-top:18px}.overview .filterBox .filter-card--container{overflow-y:scroll;margin-bottom:8px}.overview .filterBox .filter-card--body{text-align:left;list-style:none;display:flex;flex-direction:column;margin:10px 25px}.overview .filterBox .filter-card--body--list{list-style:none}.overview .filterBox .filter-card--body .task-id-filters{display:flex;flex-direction:column;justify-content:space-between;align-items:center}.overview .filterBox .filter-card--body .task-id-filters input{margin-bottom:15px}.overview .filterBox .filter-card--range-container{display:flex;justify-content:space-between}.overview .filterBox .filter-card--range-input-fields{display:grid;grid-gap:1rem}.overview .filterBox .filter-card--range-input-fields input{width:93%}.overview .filterBox .filter-card--range-input-fields .range-input-fields--min{grid-column-start:1;grid-column-end:2}.overview .filterBox .filter-card--range-input-fields .range-input-fields--max{grid-column-start:2;grid-column-end:3}.overview .filterBox .filter-card--header{min-height:35px;width:100%;display:flex;position:relative;align-items:center;background-color:#b8ddff}.overview .filterBox .filter-card--header .filter-selection{margin-left:25px}.overview .filterBox .filter-card--header .check-button{margin-left:15px;color:green}.overview .filterBox .filter-card--header .delete-button{position:absolute;right:12px;cursor:pointer}.overview .filterBox .filter-card--header .title{margin:0 0 0 25px;font-size:18px;padding:3px}.overview .filterBox--hidden{right:-100vw}.overview .filterBox--header{height:35px;background-color:#88c7ff;display:flex;align-items:center;padding:5px 20px}.overview .filterBox--header--icon{cursor:pointer;margin-right:15px}.overview .filterBox--header--reset{height:100%;background-color:hsla(0,0%,100%,.5);border:none;cursor:auto}.overview .filterBox--header--reset-icon{position:absolute;right:20px;cursor:pointer}.overview .filterBox--header--reset:disabled{display:inline-block;background:none;border:none;color:#000;font-weight:600}.overview .filterBox--header--reset:disabled .hide{display:none}.overview .filterBox--container{display:flex;flex-direction:column;align-items:center;text-align:center;margin-left:20px;margin-right:20px}.overview .filterBox--container h4{margin-top:2.5rem;margin-bottom:0;font-size:18px}.overview .filterBox--container .hidden{display:none!important}.overview .filterBox--container .filter-add-button{background-color:#71bcff;border-radius:28px;color:#fff;padding:5px;transition:all .5s ease-in-out;min-height:23px;min-width:23px;display:flex;flex-direction:row;align-items:center;justify-content:center;box-shadow:0 3px 6px 0 rgba(0,0,0,.15);cursor:pointer}.overview .menu{display:flex;width:calc(100% - 20px);padding:10px 10px 0;font-weight:700;z-index:100;background:#71bcff;align-items:flex-start}.overview .menu .menu-item{height:17px;margin-right:1px;padding:8px 13px;border-radius:8px 8px 0 0;background:hsla(0,0%,100%,.5);font-size:14px;text-decoration:none;white-space:nowrap;color:#000}.overview .menu .menu-item.selected{background:#fff}.overview .route-container{max-height:calc(100vh - 43px);overflow:auto}.overview button{cursor:pointer}.overview button:disabled{display:none}.overview button.reset{display:block;position:fixed;top:0;right:10px;padding:5px;border-radius:0 0 8px 8px;background:hsla(0,0%,100%,.5);border:none;font-size:12px;color:#000}.overview button.reset .filter-icon{margin-left:10px;margin-right:5px}.overview button.reset .highlight{font-weight:700}.overview button.reset:disabled{cursor:auto}.overview button.reset:disabled .hide{visibility:hidden}#summary{padding-top:30px;text-align:center}#summary #benchmark_setup{width:100%;overflow-x:scroll;margin:40px 0}#summary #benchmark_setup table{border-collapse:collapse;width:100%}#summary #benchmark_setup table td,#summary #benchmark_setup table th{border:1px solid #ddd;padding:8px}#summary #benchmark_setup table .options ul{margin:0;padding:0 0 0 17px}#summary #benchmark_setup table .options li{text-align:left;font-size:9pt;list-style:none}#summary #benchmark_setup table .benchmark,#summary #benchmark_setup table th{font-weight:700}#summary #benchmark_setup table tr:nth-child(2n){background-color:#eee}#summary #benchmark_setup table tr:hover{background-color:#ddd}#summary #benchmark_setup table th{padding-top:8px;padding-bottom:8px;text-align:left;width:14vw}#summary #statistics .rt-table .rt-td{padding-top:8px;padding-bottom:8px}#summary #statistics .rt-table .rt-td .cell{text-align:right}#summary #statistics .rt-table .row-title{font-weight:700}#summary #statistics .rt-table .rt-tr-group{border-bottom:1px solid #adadad!important}#summary #statistics .rt-table .columns{cursor:pointer}#summary #statistics .rt-table .columns:hover{background-color:#ccc}#summary p{margin-top:40px}.mainTable a{text-decoration:none;display:block}.mainTable a:hover{background-color:#ccc}.mainTable a:focus{outline:1px dotted red}.mainTable .fixed{justify-content:space-around;width:33%;margin:auto}.mainTable .fixed input{margin-right:40px}.mainTable .ReactTable{height:calc(100vh - 43px)}.mainTable .ReactTable .rt-table{overflow-y:scroll}.mainTable .ReactTable .rt-tbody,.mainTable .ReactTable .rt-thead,.mainTable .ReactTable .rt-tr-group{flex-grow:0}.mainTable .rt-thead.-headerGroups>div>div:first-child{width:30vw}.mainTable .rt-thead .rt-resizable-header:hover{background-color:#ccc}.mainTable .rt-tbody span{text-align:center}.mainTable .rt-tbody .row_id:not(:first-child){font-size:9pt;border-left:1px solid #000;margin-left:5px;padding-left:5px;height:100%;color:#484848}.mainTable .rt-tbody .rt-td{padding:1px;text-align:right}.mainTable .rt-tbody .rt-td>*{padding:5px 3px;height:100%}.mainTable .rt-tbody .row__name{text-align:left;display:inline-block;width:auto!important;color:#000}.mainTable .rt-tbody .row__name--cellLink{color:#000}.mainTable .rt-tbody .rt-tr-group:last-child{border-bottom:1px solid rgba(0,0,0,.05)!important}.mainTable .pagination-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:99;background:#fff}.mainTable .correct{color:green}.mainTable .error{color:#f0f}.mainTable .correct-unconfirmed,.mainTable .unknown{color:#71bcff}.mainTable .wrong{color:red}.mainTable .aborted{text-align:center}.mainTable .aborted:after{content:"—"}.mainTable input{width:100%;text-align:right}.mainTable input::-webkit-input-placeholder{color:#d3d3d3}.mainTable input:-ms-input-placeholder{color:#d3d3d3}.mainTable input::-ms-input-placeholder{color:#d3d3d3}.mainTable input::placeholder{color:#d3d3d3}.mainTable select{height:100%}.quantilePlot{margin:20px}.quantilePlot .rv-discrete-color-legend{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:50vw}.quantilePlot .rv-discrete-color-legend-item.clickable{padding:3px 10px;white-space:normal}.quantilePlot .rv-discrete-color-legend-item.clickable:hover{background:#ccc}.quantilePlot .settings-legend-container{justify-content:space-between}.quantilePlot .settings-container{flex-grow:0;min-width:0}.quantilePlot .settings-border-container,.quantilePlot .settings-subcontainer{justify-content:left;min-width:0}.quantilePlot .settings-subcontainer.flexible-width{flex:1 1 50%}.quantilePlot .setting.flexible-width{flex:1 0 60%;max-width:-webkit-max-content;max-width:-moz-max-content;max-width:max-content;min-width:0}.quantilePlot .setting.flexible-width .setting-select{min-width:120px}.scatterPlot{text-align:center;margin:20px}.scatterPlot__select select{margin:10px}.scatterPlot .middle-line .rv-xy-plot__axis__line{stroke:#71bcff}.scatterPlot__plot{margin:auto}.scatterPlot button{margin:10px}.scatterPlot .settings-container{margin-right:0}.scatterPlot .settings-subcontainer.flexible-width{flex:1 1 40vw;max-width:-webkit-max-content;max-width:-moz-max-content;max-width:max-content;min-width:0}.scatterPlot .settings-subcontainer.flexible-width .setting{flex:1 1 45%;min-width:250px;max-width:-webkit-max-content;max-width:-moz-max-content;max-width:max-content}.scatterPlot .settings-subcontainer.flexible-width .setting .setting-select{min-width:150px}.scatterPlot .settings-subcontainer.flexible-width .setting.icon{min-width:0}.scatterPlot .settings-subcontainer.flexible-width .setting.icon:hover{cursor:pointer}.settings-legend-container{display:flex}.settings-container{display:flex;justify-content:center;align-items:flex-start;flex-grow:1;margin-right:1em}.settings-border-container{display:inline-flex;flex-wrap:wrap;justify-content:center;border:1px solid rgba(0,0,0,.3);padding:.5em;max-width:100%}.settings-subcontainer{display:flex;flex-wrap:wrap;justify-content:center}.setting{display:flex;align-items:center}.setting-label{padding:.4em 1em;white-space:nowrap}.setting-select{margin:.4em 1em .4em 0;border:1px solid #c3c3c3;height:25px;padding-left:10px;border-radius:3px;cursor:pointer}.setting.disabled,.setting .disabled{color:rgba(0,0,0,.4)}.setting.disabled .setting-select,.setting .disabled .setting-select{cursor:not-allowed}.rv-discrete-color-legend{border:1px solid rgba(0,0,0,.3)}.rv-discrete-color-legend-item.clickable{white-space:nowrap}.plot__noresults{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.info{margin:40px}.info-header{margin:40px 0;display:flex;justify-content:space-between}.info-header h1{margin:0}.info-header span{font-size:9pt;border:1px solid #71bcff;padding:5px}.ReactModal__Body--open{overflow:hidden}.ReactModal__Overlay{z-index:900}.overlay{position:fixed;overflow:scroll;top:80px;right:20px;left:20px;bottom:40px;background:#fff;border:5px solid grey;border-radius:5px}.overlay h1{margin-bottom:40px}.overlay td,.overlay th{cursor:pointer;text-align:center;background:#fff;color:#8e8d8d}.overlay td label,.overlay th label{cursor:pointer}.overlay td.checked,.overlay th.checked{color:#000}.overlay th:first-child{background:#fff}.overlay td:first-child{width:30%;text-align:left}.overlay input{display:none}.overlay__buttons{width:100%;display:flex;justify-content:center}.overlay__buttons .btn{margin-top:50px;width:20vw}.overlay th{border-bottom:1px solid #000}.overlay .closing{cursor:pointer;font-size:120%;border-radius:4px}.overlay .closing:hover{color:#fff;background:#000}.overlay.second-level .link-overlay-header-container{background-color:#fff}.overlay.second-level .link-overlay-text{margin-top:0}.overlay .link-overlay-file-link{color:#00f;text-decoration:underline;background-color:inherit;border:none;font:inherit}.overlay .link-overlay-file-link:hover{cursor:pointer}.overlay .link-overlay-header-container{display:flex;justify-content:space-between;flex-direction:row-reverse;position:-webkit-sticky;position:sticky;top:0;left:0;height:30px;padding:10px 10px 0;pointer-events:none}.overlay .link-overlay-header-container>*{pointer-events:auto}.overlay .link-overlay-back-button:hover{cursor:pointer}.overlay .link-overlay-back-icon{margin-right:1em}.overlay .link-overlay-text{margin-top:-30px;padding:0 10px 10px}.rt-td{text-align:left}.ReactTable{border:none!important}.tooltip{position:relative;z-index:10;display:inline-block;border-bottom:1px dotted #000}.tooltip .tooltiptext{visibility:hidden;background-color:#555;color:#fff;text-align:center;padding:5px 0;border-radius:6px;position:absolute;z-index:999999;width:120px;top:100%;left:50%;margin-left:-60px;opacity:0;transition:opacity .3s}.tooltip .tooltiptext:after{content:" ";position:absolute;bottom:100%;left:50%;margin-left:-5px;border:5px solid transparent;border-bottom-color:#000}.tooltip:hover .tooltiptext{visibility:visible;opacity:1}@media only screen and (max-width:700px){.quantilePlot .settings-legend-container{flex-wrap:wrap;justify-content:center}.quantilePlot .setting,.quantilePlot .setting-select,.quantilePlot .settings-subcontainer{flex-grow:1}.quantilePlot .setting.flexible-width{min-width:18em;max-width:90vw}.quantilePlot .setting.flexible-width .setting-select{max-width:75vw}.quantilePlot .settings-container{margin-right:0}.quantilePlot .rv-discrete-color-legend{margin:1em 0;max-width:95vw}} \ No newline at end of file +body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace}body{overflow-x:hidden}.App{font-family:"Droid Sans","Liberation Sans",Ubuntu,"Trebuchet MS",Tahoma,Arial,Verdana,sans-serif}.link{text-decoration:underline;color:#71bcff}.btn,.link{cursor:pointer}.btn{margin:0 10px 9px 0;text-align:center;height:35px;box-shadow:0 4px 12px 0 rgba(113,188,255,.2);transition:all .4s ease-in-out;background-size:300% 100%}.btn:hover{background:#71bcff}.btn:disabled{cursor:default}.btn:disabled,.btn:disabled:hover{background:#a9a9a9}.btn-apply{margin-left:100px;background:#71bcff;box-shadow:0 4px 12px 0 rgba(113,188,255,.5)}.btn-apply:hover{background:#fff}.selectColumns{cursor:pointer;font-weight:700;background-color:#fff}.selectColumns:hover{background-color:#ccc}.header__tool-infos{font-weight:700}.separator{margin:0!important;padding:0!important;background:#adadad!important}.overview{background:#fff}.overview .filterBox{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;position:absolute;right:0;height:100vh;z-index:9998;max-width:-webkit-max-content;max-width:max-content;min-width:-webkit-min-content;min-width:min-content;width:40vw;background-color:#fff;box-shadow:0 3px 6px 0 rgba(0,0,0,.15);transition:all .5s ease-in-out}.overview .filterBox .filter-card{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;width:100%;box-shadow:0 3px 6px 0 rgba(0,0,0,.15);margin-top:18px}.overview .filterBox .filter-card--container{overflow-y:scroll;margin-bottom:8px}.overview .filterBox .filter-card--body{text-align:left;list-style:none;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;margin:10px 25px}.overview .filterBox .filter-card--body--list{list-style:none}.overview .filterBox .filter-card--body .task-id-filters{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-items:center;align-items:center}.overview .filterBox .filter-card--body .task-id-filters input{margin-bottom:15px}.overview .filterBox .filter-card--range-container{display:-webkit-flex;display:flex;-webkit-justify-content:space-between;justify-content:space-between}.overview .filterBox .filter-card--range-input-fields{display:grid;grid-gap:1rem}.overview .filterBox .filter-card--range-input-fields input{width:93%}.overview .filterBox .filter-card--range-input-fields .range-input-fields--min{grid-column-start:1;grid-column-end:2}.overview .filterBox .filter-card--range-input-fields .range-input-fields--max{grid-column-start:2;grid-column-end:3}.overview .filterBox .filter-card--header{min-height:35px;width:100%;display:-webkit-flex;display:flex;position:relative;-webkit-align-items:center;align-items:center;background-color:#b8ddff}.overview .filterBox .filter-card--header .filter-selection{margin-left:25px}.overview .filterBox .filter-card--header .check-button{margin-left:15px;color:green}.overview .filterBox .filter-card--header .delete-button{position:absolute;right:12px;cursor:pointer}.overview .filterBox .filter-card--header .title{margin:0 0 0 25px;font-size:18px;padding:3px}.overview .filterBox--hidden{right:-100vw}.overview .filterBox--header{height:35px;background-color:#88c7ff;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;padding:5px 20px}.overview .filterBox--header--icon{cursor:pointer;margin-right:15px}.overview .filterBox--header--reset{height:100%;background-color:hsla(0,0%,100%,.5);border:none;cursor:auto}.overview .filterBox--header--reset-icon{position:absolute;right:20px;cursor:pointer}.overview .filterBox--header--reset:disabled{display:inline-block;background:none;border:none;color:#000;font-weight:600}.overview .filterBox--header--reset:disabled .hide{display:none}.overview .filterBox--container{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:center;align-items:center;text-align:center;margin-left:20px;margin-right:20px}.overview .filterBox--container h4{margin-top:2.5rem;margin-bottom:0;font-size:18px}.overview .filterBox--container .hidden{display:none!important}.overview .filterBox--container .filter-add-button{background-color:#71bcff;border-radius:28px;color:#fff;padding:5px;transition:all .5s ease-in-out;min-height:23px;min-width:23px;display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-shadow:0 3px 6px 0 rgba(0,0,0,.15);cursor:pointer}.overview .menu{display:-webkit-flex;display:flex;width:calc(100% - 20px);padding:10px 10px 0;font-weight:700;z-index:100;background:#71bcff;-webkit-align-items:flex-start;align-items:flex-start}.overview .menu .menu-item{height:17px;margin-right:1px;padding:8px 13px;border-radius:8px 8px 0 0;background:hsla(0,0%,100%,.5);font-size:14px;text-decoration:none;white-space:nowrap;color:#000}.overview .menu .menu-item.selected{background:#fff}.overview .route-container{max-height:calc(100vh - 43px);overflow:auto}.overview button{cursor:pointer}.overview button:disabled{display:none}.overview button.reset{display:block;position:fixed;top:0;right:10px;padding:5px;border-radius:0 0 8px 8px;background:hsla(0,0%,100%,.5);border:none;font-size:12px;color:#000}.overview button.reset .filter-icon{margin-left:10px;margin-right:5px}.overview button.reset .highlight{font-weight:700}.overview button.reset:disabled{cursor:auto}.overview button.reset:disabled .hide{visibility:hidden}#summary{padding-top:30px;text-align:center}#summary #benchmark_setup{width:100%;overflow-x:scroll;margin:40px 0}#summary #benchmark_setup table{border-collapse:collapse;width:100%}#summary #benchmark_setup table td,#summary #benchmark_setup table th{border:1px solid #ddd;padding:8px}#summary #benchmark_setup table .options ul{margin:0;padding:0 0 0 17px}#summary #benchmark_setup table .options li{text-align:left;font-size:9pt;list-style:none}#summary #benchmark_setup table .benchmark,#summary #benchmark_setup table th{font-weight:700}#summary #benchmark_setup table tr:nth-child(2n){background-color:#eee}#summary #benchmark_setup table tr:hover{background-color:#ddd}#summary #benchmark_setup table th{padding-top:8px;padding-bottom:8px;text-align:left;width:14vw}#summary #statistics .rt-table .rt-td{padding-top:8px;padding-bottom:8px}#summary #statistics .rt-table .rt-td .cell{text-align:right}#summary #statistics .rt-table .row-title{font-weight:700}#summary #statistics .rt-table .rt-tr-group{border-bottom:1px solid #adadad!important}#summary #statistics .rt-table .columns{cursor:pointer}#summary #statistics .rt-table .columns:hover{background-color:#ccc}#summary p{margin-top:40px}.mainTable a{text-decoration:none;display:block}.mainTable a:hover{background-color:#ccc}.mainTable a:focus{outline:1px dotted red}.mainTable .fixed{-webkit-justify-content:space-around;justify-content:space-around;width:33%;margin:auto}.mainTable .fixed input{margin-right:40px}.mainTable .ReactTable{height:calc(100vh - 43px)}.mainTable .ReactTable .rt-table{overflow-y:scroll}.mainTable .ReactTable .rt-tbody,.mainTable .ReactTable .rt-thead,.mainTable .ReactTable .rt-tr-group{-webkit-flex-grow:0;flex-grow:0}.mainTable .rt-thead.-headerGroups>div>div:first-child{width:30vw}.mainTable .rt-thead .rt-resizable-header:hover{background-color:#ccc}.mainTable .rt-tbody span{text-align:center}.mainTable .rt-tbody .row_id:not(:first-child){font-size:9pt;border-left:1px solid #000;margin-left:5px;padding-left:5px;height:100%;color:#484848}.mainTable .rt-tbody .rt-td{padding:1px;text-align:right}.mainTable .rt-tbody .rt-td>*{padding:5px 3px;height:100%}.mainTable .rt-tbody .row__name{text-align:left;display:inline-block;width:auto!important;color:#000}.mainTable .rt-tbody .row__name--cellLink{color:#000}.mainTable .rt-tbody .rt-tr-group:last-child{border-bottom:1px solid rgba(0,0,0,.05)!important}.mainTable .pagination-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:99;background:#fff}.mainTable .correct{color:green}.mainTable .error{color:#f0f}.mainTable .correct-unconfirmed,.mainTable .unknown{color:#71bcff}.mainTable .wrong{color:red}.mainTable .aborted{text-align:center}.mainTable .aborted:after{content:"—"}.mainTable input{width:100%;text-align:right}.mainTable input::-webkit-input-placeholder{color:#d3d3d3}.mainTable input:-ms-input-placeholder{color:#d3d3d3}.mainTable input::placeholder{color:#d3d3d3}.mainTable select{height:100%}.quantilePlot{margin:20px}.quantilePlot .rv-discrete-color-legend{width:-webkit-max-content;width:max-content;max-width:50vw}.quantilePlot .rv-discrete-color-legend-item.clickable{padding:3px 10px;white-space:normal}.quantilePlot .rv-discrete-color-legend-item.clickable:hover{background:#ccc}.quantilePlot .settings-legend-container{-webkit-justify-content:space-between;justify-content:space-between}.quantilePlot .settings-container{-webkit-flex-grow:0;flex-grow:0;min-width:0}.quantilePlot .settings-border-container,.quantilePlot .settings-subcontainer{-webkit-justify-content:left;justify-content:left;min-width:0}.quantilePlot .settings-subcontainer.flexible-width{-webkit-flex:1 1 50%;flex:1 1 50%}.quantilePlot .setting.flexible-width{-webkit-flex:1 0 60%;flex:1 0 60%;max-width:-webkit-max-content;max-width:max-content;min-width:0}.quantilePlot .setting.flexible-width .setting-select{min-width:120px}.scatterPlot{text-align:center;margin:20px}.scatterPlot__select select{margin:10px}.scatterPlot .middle-line .rv-xy-plot__axis__line{stroke:#71bcff}.scatterPlot__plot{margin:auto}.scatterPlot button{margin:10px}.scatterPlot .settings-container{margin-right:0}.scatterPlot .settings-subcontainer.flexible-width{-webkit-flex:1 1 40vw;flex:1 1 40vw;max-width:-webkit-max-content;max-width:max-content;min-width:0}.scatterPlot .settings-subcontainer.flexible-width .setting{-webkit-flex:1 1 45%;flex:1 1 45%;min-width:250px;max-width:-webkit-max-content;max-width:max-content}.scatterPlot .settings-subcontainer.flexible-width .setting .setting-select{min-width:150px}.scatterPlot .settings-subcontainer.flexible-width .setting.icon{min-width:0}.scatterPlot .settings-subcontainer.flexible-width .setting.icon:hover{cursor:pointer}.settings-container,.settings-legend-container{display:-webkit-flex;display:flex}.settings-container{-webkit-justify-content:center;justify-content:center;-webkit-align-items:flex-start;align-items:flex-start;-webkit-flex-grow:1;flex-grow:1;margin-right:1em}.settings-border-container{display:-webkit-inline-flex;display:inline-flex;border:1px solid rgba(0,0,0,.3);padding:.5em;max-width:100%}.settings-border-container,.settings-subcontainer{-webkit-flex-wrap:wrap;flex-wrap:wrap;-webkit-justify-content:center;justify-content:center}.setting,.settings-subcontainer{display:-webkit-flex;display:flex}.setting{-webkit-align-items:center;align-items:center}.setting-label{padding:.4em 1em;white-space:nowrap}.setting-select{margin:.4em 1em .4em 0;border:1px solid #c3c3c3;height:25px;padding-left:10px;border-radius:3px;cursor:pointer}.setting.disabled,.setting .disabled{color:rgba(0,0,0,.4)}.setting.disabled .setting-select,.setting .disabled .setting-select{cursor:not-allowed}.rv-discrete-color-legend{border:1px solid rgba(0,0,0,.3)}.rv-discrete-color-legend-item.clickable{white-space:nowrap}.plot__noresults{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.info{margin:40px}.info-header{margin:40px 0;display:-webkit-flex;display:flex;-webkit-justify-content:space-between;justify-content:space-between}.info-header h1{margin:0}.info-header span{font-size:9pt;border:1px solid #71bcff;padding:5px}.ReactModal__Body--open{overflow:hidden}.ReactModal__Overlay{z-index:900}.overlay{position:fixed;overflow:scroll;top:80px;right:20px;left:20px;bottom:40px;background:#fff;border:5px solid grey;border-radius:5px}.overlay h1{margin-bottom:40px}.overlay td,.overlay th{cursor:pointer;text-align:center;background:#fff;color:#8e8d8d}.overlay td label,.overlay th label{cursor:pointer}.overlay td.checked,.overlay th.checked{color:#000}.overlay th:first-child{background:#fff}.overlay td:first-child{width:30%;text-align:left}.overlay input{display:none}.overlay__buttons{width:100%;display:-webkit-flex;display:flex;-webkit-justify-content:center;justify-content:center}.overlay__buttons .btn{margin-top:50px;width:20vw}.overlay th{border-bottom:1px solid #000}.overlay .closing{cursor:pointer;font-size:120%;border-radius:4px}.overlay .closing:hover{color:#fff;background:#000}.overlay.second-level .link-overlay-header-container{background-color:#fff}.overlay.second-level .link-overlay-text{margin-top:0}.overlay .link-overlay-file-link{color:#00f;text-decoration:underline;background-color:inherit;border:none;font:inherit}.overlay .link-overlay-file-link:hover{cursor:pointer}.overlay .link-overlay-header-container{display:-webkit-flex;display:flex;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:row-reverse;flex-direction:row-reverse;position:-webkit-sticky;position:sticky;top:0;left:0;height:30px;padding:10px 10px 0;pointer-events:none}.overlay .link-overlay-header-container>*{pointer-events:auto}.overlay .link-overlay-back-button:hover{cursor:pointer}.overlay .link-overlay-back-icon{margin-right:1em}.overlay .link-overlay-text{margin-top:-30px;padding:0 10px 10px}.rt-td{text-align:left}.ReactTable{border:none!important}.tooltip{position:relative;z-index:10;display:inline-block;border-bottom:1px dotted #000}.tooltip .tooltiptext{visibility:hidden;background-color:#555;color:#fff;text-align:center;padding:5px 0;border-radius:6px;position:absolute;z-index:999999;width:120px;top:100%;left:50%;margin-left:-60px;opacity:0;transition:opacity .3s}.tooltip .tooltiptext:after{content:" ";position:absolute;bottom:100%;left:50%;margin-left:-5px;border:5px solid transparent;border-bottom-color:#000}.tooltip:hover .tooltiptext{visibility:visible;opacity:1}@media only screen and (max-width:700px){.quantilePlot .settings-legend-container{-webkit-flex-wrap:wrap;flex-wrap:wrap;-webkit-justify-content:center;justify-content:center}.quantilePlot .setting,.quantilePlot .setting-select,.quantilePlot .settings-subcontainer{-webkit-flex-grow:1;flex-grow:1}.quantilePlot .setting.flexible-width{min-width:18em;max-width:90vw}.quantilePlot .setting.flexible-width .setting-select{max-width:75vw}.quantilePlot .settings-container{margin-right:0}.quantilePlot .rv-discrete-color-legend{margin:1em 0;max-width:95vw}} \ No newline at end of file diff --git a/benchexec/tablegenerator/react-table/build/bundle.min.js b/benchexec/tablegenerator/react-table/build/bundle.min.js index f21f46e18..163e80855 100644 --- a/benchexec/tablegenerator/react-table/build/bundle.min.js +++ b/benchexec/tablegenerator/react-table/build/bundle.min.js @@ -1 +1 @@ -!function(e){function t(t){for(var i,a,l=t[0],o=t[1],c=t[2],d=0,h=[];di?1:n1?t[1]:void 0;if(void 0===n||0===n.length)return{};var i,r=n.split("&").map((function(e){return e.split("=")})),s={},a=Object(c.a)(r);try{for(a.s();!(i=a.n()).done;){var l=Object(o.a)(i.value,2),u=l[0],d=l[1];s[u]=d}}catch(h){a.e(h)}finally{a.f()}return s},N=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{returnString:!1,baseUrl:null,keepOthers:!1,paramName:null,history:null},n={},i=e;if(t.keepOthers){n=S();var r=Object.entries(e).filter((function(e){var t=Object(o.a)(e,2),n=(t[0],t[1]);return void 0===n||null===n}));r.forEach((function(e){var t=Object(o.a)(e,1)[0];delete n[t],delete i[t]}))}var s=Object(u.a)(Object(u.a)({},n),e),a={returnString:!1,baseUrl:null},l=Object(u.a)(Object(u.a)({},a),t),c=l.returnString,d=l.baseUrl,h=l.history,f=(d||document.location.href).split("?")[0],p=Object.keys(s).map((function(e){return"".concat(e,"=").concat(s[e])})),b="?".concat(p.join("&")),j=encodeURI("".concat(f).concat(b));if(c)return j;h?h.push(b):document.location.href=j},I=function(e,t){var n=D({categoryValues:t,statusValues:e});return function(e){var t=S(e);return t.filter?n(t.filter):null}},T=function(e){for(var t=[],n=0,i=Object.entries(e);n2&&void 0!==arguments[2]&&arguments[2],i={};if(e.length>Math.floor(t.length/2)){var r,s=[],a=Object(c.a)(t);try{for(a.s();!(r=a.n()).done;){var l=r.value;e.includes(l)||s.push(n?l.trim():l)}}catch(o){a.e(o)}finally{a.f()}i.notIn=s}else i.in=e.map((function(e){return n?e.trim():e}));return T(i)};function M(e,t,n,i,r){var s=[],a=e.statusValues,l=e.categoryValues,o=t[n][i],c=r[n][i],u=!!a,d=u&&a.length!==o.length,h=!!l,f=h&&l.length!==c.length;if(u){if(d){var p=_(a,o);s.push("status(".concat(p,")"))}h||s.push("category(empty())")}if(h&&(u||s.push("status(empty())"),f)){var b=_(l,c,!0);s.push("category(".concat(b,")"))}return s.join(",")}var V=function(e){var t,n={},i=0,r="",s=Object(c.a)(e);try{for(s.s();!(t=s.n()).done;){var a=t.value;if("("!==a){if(")"!==a)0!==i||","!==a?r+=a:r="";else if(r+=a,0===--i){var l=r.indexOf("("),o=r.substr(0,l),u=r.substr(l+1,r.length-1-(l+1));n[o]=u}}else r+=a,i++}}catch(d){s.e(d)}finally{s.f()}return n},A=function(e,t,n,i,r){return"values"===e?[{values:t.split(",").map(unescape)}]:"value"===e?[{value:unescape(t)}]:"status"===e||"category"===e?function(e,t,n,i,r){for(var s=V(t),l=[],u=0,d=Object.entries(s);u0?r.ids={values:f.map((function(e){return e||""}))}:p&&s.push({id:d,value:h})}}catch(B){a.e(B)}finally{a.f()}var C=r.ids,F=Object(l.a)(r,["ids"]),w=[];C&&w.push("id(values(".concat(C.values.map(escape).join(","),"))")),s&&s.forEach((function(e){w.push("id_any(value(".concat(e.value,"))"))}));for(var S=0,N=Object.entries(F);S0&&w.push("".concat(T,"(").concat(V.join(","),")"))}return w.join(",")}}({statusValues:e,categoryValues:t});return function(e,t){var i=S();if(!e)return N(i,t);var r=n(e);return r?N(Object(u.a)(Object(u.a)({},i),{},{filter:r}),t):(delete i.filter,N(Object(u.a)({},i),t))}},H=function(e){document.location.href=encodeURI("".concat(document.location.href,"#").concat(e))},L=function(e){N(Object(u.a)(Object(u.a)({},S()),e))},R=function(e,t){return k(["0","id"],[],e).reduce((function(e,n,i){return Object(u.a)(Object(u.a)({},e),{},Object(s.a)({},t[i],n))}),{})},P=" ",B=" ",U=function(){function e(t){Object(i.a)(this,e),this._defaultOptions={whitespaceFormat:!1,html:!1},this.significantDigits=t,this.maxPositiveDecimalPosition=-1,this.maxNegativeDecimalPosition=-1}return Object(r.a)(e,[{key:"addDataItem",value:function(e){var t=e.split(/\.|,/),n=Object(o.a)(t,2),i=n[0],r=n[1];this.maxPositiveDecimalPosition=Math.max(this.maxPositiveDecimalPosition,i?i.length:0),this.maxNegativeDecimalPosition=Math.max(this.maxNegativeDecimalPosition,r?r.length:0)}},{key:"build",value:function(){var e=this;return function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(b(e.significantDigits))return t.toString();for(var i=Object(u.a)(Object(u.a)({},e._defaultOptions),n),r=i.whitespaceFormat,s=i.html,a=t.toString(),l="",c="",d=0,h=0,f=!1,p=!1,j=a.replace(/,/,".").indexOf(".");hd;){var m=a[d];if("."===m||","===m)l+=".",p=!0;else{if(!f){if("0"===m){d+=1,p&&(l+=m);continue}f=!0}l+=m,h+=1}d+=1}if("."===l[0]&&(l="0".concat(l)),c=a.substring(d)){var v="."===c[0];c=c.replace(/\./,""),c="".concat(c[0],".").concat(c.substr(1)),c=Math.round(Number(c)),c=isNaN(c)?"":c.toString(),v&&(c=".".concat(c));var O=j;for(-1===j&&(O=a.length);l.length+c.length0){var s=n.map((function(e){return e.colIdx}));r?i.removeFromHiddenCols(t.toolIdx,s):i.addToHiddenCols(t.toolIdx,s)}}))},i.addToHiddenCols=function(e,t){var n=Object(a.a)(new Set(i.state.hiddenCols[e].concat(t)));i.setHiddenColsForTool(e,n)},i.removeFromHiddenCols=function(e,t){var n=i.state.hiddenCols[e].filter((function(e){return!t.includes(e)}));i.setHiddenColsForTool(e,n)},i.handlePopState=function(){window.history.back()};var r=e.tools.map((function(e){return e.columns})).flat().filter((function(e,t,n){return t===n.findIndex((function(t){return t.display_title===e.display_title}))})).map((function(e){return e.display_title}));return i.state={isButtonOnDeselect:!0,hiddenCols:i.props.hiddenCols,selectableCols:r},i}return Object(o.a)(n,[{key:"componentDidMount",value:function(){window.history.pushState({},"",""),window.addEventListener("popstate",this.props.close,!1)}},{key:"componentWillUnmount",value:function(){var e=this;window.removeEventListener("popstate",this.props.close,!1);var t={},n=[];Object.entries(this.state.hiddenCols).forEach((function(i){var r=Object(s.a)(i,2),a=r[0],l=r[1],o=e.props.tools.find((function(e){return e.toolIdx===parseInt(a)})).columns;l.length===o.length?n.push(a):l.length>0?t["hidden"+a]=l.toString():t["hidden"+a]=null})),n.length>0?t.hidden=n.toString():t.hidden=null,Object(v.x)(t,{keepOthers:!0,history:this.props.history})}},{key:"setHiddenColsForTool",value:function(e,t){this.setState((function(n){return{hiddenCols:Object(r.a)(Object(r.a)({},n.hiddenCols),{},Object(i.a)({},e,t))}}))}},{key:"render",value:function(){var e=this;b.a.setAppElement(document.getElementById("root"));var t=this.props.tools.every((function(t){return t.columns.length===e.state.hiddenCols[t.toolIdx].length}));return Object(d.jsxs)(b.a,{ariaHideApp:!1,className:"overlay",isOpen:!0,onRequestClose:function(){return e.handlePopState()},children:[Object(d.jsx)("div",{className:"link-overlay-header-container",children:Object(d.jsx)(j.a,{icon:m.e,onClick:function(){return e.handlePopState()},className:"closing"})}),Object(d.jsx)("h1",{children:"Select the columns to display"}),Object(d.jsx)("table",{className:"selectRows",children:Object(d.jsxs)("tbody",{children:[Object(d.jsxs)("tr",{className:"selectColumn_all",children:[Object(d.jsx)("th",{}),this.renderColumnHeaders()]}),this.renderTools()]})}),Object(d.jsxs)("div",{className:"overlay__buttons",children:[Object(d.jsx)("button",{className:"btn",onClick:this.toggleAllColsHidden,children:this.state.isButtonOnDeselect?"Deselect all":"Select all"}),Object(d.jsx)("button",{className:"btn btn-apply",onClick:function(){return e.handlePopState()},disabled:t,children:"Apply and close"}),Object(d.jsx)("input",{})]})]})}}]),n}(f.a.Component)},128:function(e,t,n){"use strict";n.d(t,"a",(function(){return k}));var i=n(86),r=n(87),s=n(272),a=n(270),l=n(78),o=n(79),c=n(276),u=n(269),d=n(68),h=n(71),f=n.n(h),p=(n(129),n(266)),b=n(106),j=n(125),m=n(127),v=n(170),O={linear:"Linear",logarithmic:"Logarithmic"},x={all:"All",correct:"Correct only"},g={"f(x) = cx and f(x) = x/c":[{name:"c = 1.1",value:1.1},{name:"c = 1.2",value:1.2},{name:"c = 1.5",value:1.5},{name:"c = 2",value:2},{name:"c = 3",value:3},{name:"c = 4",value:4},{name:"c = 5",value:5},{name:"c = 6",value:6},{name:"c = 7",value:7},{name:"c = 8",value:8},{name:"c = 9",value:9},{name:"c = 10",value:10},{name:"c = 100",value:100},{name:"c = 1000",value:1e3},{name:"c = 10000",value:1e4},{name:"c = 100000",value:1e5},{name:"c = 1000000",value:1e6}]},y={scaling:O.logarithmic,results:x.correct,line:Object.values(g)[0][11].value},k=function(e){Object(c.a)(n,e);var t=Object(u.a)(n);function n(e){var i;return Object(l.a)(this,n),(i=t.call(this,e)).refreshUrlState=function(){i.setState(i.setup())},i.renderData=function(){var e=[];i.hasInvalidLog=!1,i.state.areAllColsHidden||i.props.table.forEach((function(t){var n=t.results[i.state.toolX],r=t.results[i.state.toolY],s=n.values[i.state.columnX].raw,a=r.values[i.state.columnY].raw,l=void 0!==s&&null!==s&&void 0!==a&&null!==a,o=i.state.results===x.correct;l&&(!o||o&&"correct"===n.category&&"correct"===r.category)&&(i.state.scaling===O.logarithmic&&(s<=0||a<=0)?i.hasInvalidLog=!0:e.push({x:s,y:a,info:i.props.getRowName(t)}))})),i.setMinMaxValues(e),i.lineCount=e.length,i.dataArray=e},i.setMinMaxValues=function(e){var t=e.map((function(e){return e.x})),n=e.map((function(e){return e.y}));i.maxX=i.findMaxValue(t),i.maxY=i.findMaxValue(n),i.minX=i.findMinValue(t),i.minY=i.findMinValue(n)},i.findMaxValue=function(e){var t=Math.max.apply(Math,Object(a.a)(e));return t<3?3:t},i.findMinValue=function(e){var t=Math.min.apply(Math,Object(a.a)(e));return t>2?1:t},i.handleType=function(e,t){var n=i.props.tools[e].columns[t].type;return"text"===n||"status"===n?"ordinal":i.state.scaling===O.logarithmic?"log":"linear"},i.extractAxisInfoByName=function(e,t){var n,a=e.split("-"),l=Object(s.a)(a,2),o=l[0],c=l[1];return n={},Object(r.a)(n,"data".concat(t),e),Object(r.a)(n,"tool".concat(t),o),Object(r.a)(n,"column".concat(t),c),Object(r.a)(n,"name".concat(t),i.props.tools[o].columns.find((function(e){return e.colIdx===parseInt(c)})).display_title+" ("+Object(b.j)(i.props.tools[o])+")"),n},i.setAxis=function(e,t){var n;i.array=[];var a=e.target.value.split("-"),l=Object(s.a)(a,2),o=l[0],c=l[1];c=c.replace("___","-"),Object(b.y)((n={},Object(r.a)(n,"tool".concat(t),o),Object(r.a)(n,"column".concat(t),c),n))},i.swapAxes=function(){i.array=[],Object(b.y)({toolX:i.state.toolY,toolY:i.state.toolX,columnX:i.state.columnY,columnY:i.state.columnX})},i.state=i.setup(),i.maxX="",i.minX="",i.lineCount=1,i}return Object(o.a)(n,[{key:"setup",value:function(){var e,t,n,r=Object(b.j)(this.props.tools[0])+" "+this.props.columns[0][1],a=Object(i.a)(Object(i.a)({},y),Object(b.h)()),l=a.results,o=a.scaling,c=a.toolX,u=a.toolY,d=a.columnX,h=a.columnY,f=a.line;if(Object(b.n)(c)||Object(b.n)(d)){var p=Object(b.g)(this.props.tools,this.props.hiddenCols),j=Object(s.a)(p,2),m=j[0],v=j[1];n=void 0===m,c=m,e="".concat(m,"-").concat(v)}else n=!1,e="".concat(c,"-").concat(d);if(Object(b.n)(u)||Object(b.n)(h)){var O=Object(b.g)(this.props.tools,this.props.hiddenCols),x=Object(s.a)(O,2),g=x[0],k=x[1];n=void 0===g,u=g,t="".concat(g,"-").concat(k)}else n=!1,t="".concat(u,"-").concat(h);var C={dataX:e,dataY:t,results:l,scaling:o,toolX:0,toolY:0,line:f,columnX:1,columnY:1,nameX:r,nameY:r,value:!1,areAllColsHidden:n};return e&&!n&&(C=Object(i.a)(Object(i.a)({},C),this.extractAxisInfoByName(e,"X"))),t&&!n&&(C=Object(i.a)(Object(i.a)({},C),this.extractAxisInfoByName(t,"Y"))),C}},{key:"componentDidMount",value:function(){window.addEventListener("popstate",this.refreshUrlState)}},{key:"componentWillUnmount",value:function(){window.removeEventListener("popstate",this.refreshUrlState)}},{key:"renderAllSettings",value:function(){var e=this,t=this.props.tools.reduce((function(t,n,i){return Object.assign(t,Object(r.a)({},Object(b.j)(n),n.columns.filter((function(t){return!e.props.hiddenCols[i].includes(t.colIdx)})).map((function(e,t){return{name:e.display_title,value:i+"-"+e.colIdx}}))))}),{});return Object(d.jsx)("div",{className:"settings-container",children:Object(d.jsxs)("div",{className:"settings-border-container",children:[Object(d.jsxs)("div",{className:"settings-subcontainer flexible-width",children:[Object(v.a)("X-Axis",this.state.dataX,(function(t){return e.setAxis(t,"X")}),t),Object(d.jsx)("span",{className:"setting icon",children:Object(d.jsx)(j.a,{icon:m.b,onClick:function(){return e.swapAxes()}})}),Object(v.a)("Y-Axis",this.state.dataY,(function(t){return e.setAxis(t,"Y")}),t)]}),Object(d.jsxs)("div",{className:"settings-subcontainer",children:[Object(v.b)("Scaling",this.state.scaling,(function(e){return Object(b.y)({scaling:e.target.value})}),O),Object(v.b)("Results",this.state.results,(function(e){return Object(b.y)({results:e.target.value})}),x,"In addition to which results are selected here, any filters will still be applied."),Object(d.jsx)("div",{className:"settings-subcontainer",children:Object(v.a)("Aux. Lines",this.state.line,(function(e){return Object(b.y)({line:e.target.value})}),g,"Adds the two auxiliary lines f(x) = cx and f(x) = x/c to the plot, with c being the chosen factor in the dropdown.")})]})]})})}},{key:"render",value:function(){var e=this;this.renderData();var t=this.state.scaling===O.linear,n=this.props.isFlexible?p.c:p.j,r=this.props.isFlexible?{height:window.innerHeight-200}:{height:1e3,width:1500};return Object(d.jsxs)("div",{className:"scatterPlot",children:[!this.state.areAllColsHidden&&this.renderAllSettings(),Object(d.jsxs)(n,Object(i.a)(Object(i.a)({className:"scatterPlot__plot",margin:{left:90},yType:this.handleType(this.state.toolY,this.state.columnY),xType:this.handleType(this.state.toolX,this.state.columnX),xDomain:"ordinal"!==this.handleType(this.state.toolX,this.state.columnX)?[this.minX,this.maxX]:null,yDomain:"ordinal"!==this.handleType(this.state.toolY,this.state.columnY)?[this.minY,this.maxY]:null},r),{},{children:[Object(d.jsx)(p.h,{yType:this.handleType(this.state.toolY,this.state.columnY),xType:this.handleType(this.state.toolX,this.state.columnX)}),Object(d.jsx)(p.e,{yType:this.handleType(this.state.toolY,this.state.columnY),xType:this.handleType(this.state.toolX,this.state.columnX)}),Object(d.jsx)(p.a,{className:"middle-line",axisStart:{x:t?0:1,y:t?0:1},axisEnd:{x:this.maxX>this.maxY?this.maxX:this.maxY,y:this.maxX>this.maxY?this.maxX:this.maxY},axisDomain:[0,1e10],style:{ticks:{stroke:"#009440",opacity:0},text:{stroke:"none",fill:"#009440",fontWeight:600,opacity:0}}}),Object(d.jsx)(p.a,{axisStart:{x:t?0:this.state.line,y:t?0:1},axisEnd:{x:this.maxX,y:this.maxX/this.state.line},axisDomain:[0,1e10],style:{ticks:{stroke:"#ADDDE1",opacity:0},text:{stroke:"none",fill:"#6b6b76",fontWeight:600,opacity:0}}}),Object(d.jsx)(p.a,{axisStart:{x:t?0:1,y:t?0:this.state.line},axisEnd:{x:this.maxX,y:this.maxX*this.state.line},axisDomain:[0,1e10],style:{ticks:{stroke:"#ADDDE1",opacity:0},text:{stroke:"none",fill:"#6b6b76",fontWeight:600,opacity:0}}}),Object(d.jsx)(p.i,{title:this.state.nameX,tickFormat:function(e){return e},yType:this.handleType(this.state.toolY,this.state.columnY),xType:this.handleType(this.state.toolX,this.state.columnX)}),Object(d.jsx)(p.k,{title:this.state.nameY,tickFormat:function(e){return e},yType:this.handleType(this.state.toolY,this.state.columnY),xType:this.handleType(this.state.toolX,this.state.columnX)}),Object(d.jsx)(p.g,{data:this.dataArray,onValueMouseOver:function(t,n){return e.setState({value:t})},onValueMouseOut:function(t,n){return e.setState({value:null})}}),this.state.value?Object(d.jsx)(p.d,{value:this.state.value}):null]})),this.state.areAllColsHidden?Object(d.jsx)("div",{className:"plot__noresults",children:"No columns to show!"}):0===this.lineCount&&Object(d.jsxs)("div",{className:"plot__noresults",children:["No ",this.state.results===x.correct&&"correct"," ","results",this.props.table.length>0&&" with valid data points",this.hasInvalidLog&&" (negative values are not shown in logarithmic plot)"]})]})}}]),n}(f.a.Component)},170:function(e,t,n){"use strict";n.d(t,"b",(function(){return s})),n.d(t,"a",(function(){return a}));var i=n(272),r=n(68),s=(n(71),function(e,t,n,i,s,a){return Object(r.jsxs)("div",{className:"setting".concat(a?" disabled":""),title:s,children:[Object(r.jsxs)("span",{className:"setting-label",children:[e,":"]}),Object(r.jsxs)("select",{className:"setting-select",name:"setting-"+e,value:a?"disabled":t,onChange:n,disabled:a,children:[Object.values(i).map((function(t){return Object(r.jsx)("option",{value:t,name:t+" "+e,children:t},t)})),a?Object(r.jsx)("option",{value:"disabled",name:"disabled",children:"\u2e3a"}):""]})]})}),a=function(e,t,n,s,a){return Object(r.jsxs)("div",{className:"setting",title:a,children:[Object(r.jsxs)("span",{className:"setting-label",children:[e,":"]}),Object(r.jsx)("select",{id:"setting-"+e,className:"setting-select",name:"setting-"+e,value:t,onChange:n,children:Object.entries(s).map((function(t){var n=Object(i.a)(t,2),s=n[0],a=n[1];return Object(r.jsx)("optgroup",{label:s,children:a.map((function(t){return Object(r.jsx)("option",{value:t.value,name:t.name+" "+e,children:t.name},t.value)}))},s)}))})]})}},171:function(e,t,n){"use strict";n.d(t,"a",(function(){return j}));var i=n(272),r=n(86),s=n(87),a=n(78),l=n(79),o=n(276),c=n(269),u=n(68),d=n(71),h=n.n(d),f=(n(129),n(266)),p=n(106),b=n(170),j=function(e){Object(o.a)(n,e);var t=Object(c.a)(n);function n(e){var i;return Object(a.a)(this,n),(i=t.call(this,e)).isColRelevantForTool=function(e,t){return i.isColVisible(t,e)&&"text"!==e.type&&"status"!==e.type},i.isToolRelevantForCol=function(e,t){var n=e.columns.find((function(e){return e.display_title===t}));return i.isToolVisible(e)&&n&&i.isColVisible(e.toolIdx,n.colIdx)},i.isColVisibleInAnyTool=function(e){return i.props.tools.some((function(t){return t.columns.some((function(n){return n.colIdx===e.colIdx&&i.isColVisible(t.toolIdx,n.colIdx)}))}))},i.isInVisibleRunsetSupportingScore=function(e){return i.props.tools.filter((function(e){return i.isToolVisible(e)})).some((function(t){return t.scoreBased&&t.columns.some((function(t){return t.display_title===e}))}))},i.isToolVisible=function(e){return e.columns.length!==i.props.hiddenCols[e.toolIdx].length},i.isColVisible=function(e,t){return!i.props.hiddenCols[e].includes(t)},i.updateDimensions=function(){i.setState({height:window.innerHeight})},i.refreshUrlState=function(){i.setState(i.setPlotData())},i.renderLegend=function(){if(i.state.isValue)return i.props.tools.filter((function(e){return i.isToolRelevantForCol(e,i.state.selection)})).map(p.j).map((function(e){return{title:e,disabled:i.state.isInvisible.some((function(t){return t===e})),strokeWidth:4}}));var e=i.props.tools[i.state.selection.split("-")[1]];return i.state.areAllColsHidden?[]:e.columns.filter((function(t){return i.isColRelevantForTool(t.colIdx,e.toolIdx)})).map((function(e){return{title:e.display_title,disabled:i.state.isInvisible.some((function(t){return t===e.display_title})),strokeWidth:4}}))},i.renderAll=function(){var e=i.state.selection;if(i.state.isValue)(i.state.plot===i.plotOptions.scoreBased?i.props.tools.filter((function(e){return e.scoreBased})):i.props.tools).forEach((function(t){return i.renderData(e,t.toolIdx,e+t.toolIdx)}));else if(!i.state.areAllColsHidden){var t=i.state.selection.split("-")[1],n=i.props.tools[t];n.columns.filter((function(e){return i.isColRelevantForTool(e.colIdx,n.toolIdx)&&i.isColVisible(n.toolIdx,e.colIdx)})).forEach((function(e){return i.renderData(e.display_title,t,e.display_title)}))}},i.renderData=function(e,t,n){var r=i.state.plot===i.plotOptions.scoreBased,s="ordinal"===i.handleType(),a=i.props.tools[t].columns.findIndex((function(t){return t.display_title===e})),l=[],o=0;(!i.state.isValue||a>=0&&i.isColVisible(t,a))&&(l=i.props.table.map((function(e){var n=e.results[t],l=null;return"correct"===n.category||!i.state.isResultSelectionDisabled&&i.state.results!==i.resultsOptions.correct?(l=n.values[a].raw||null,s||null===l||(l=isFinite(+l)?+l:null)):r&&n.score&&"correct"!==n.category&&(o+=n.score),{value:l,rowName:i.props.getRowName(e),score:n.score}})),i.state.plot!==i.plotOptions.direct&&(l=l.filter((function(e){return null!==e.value})),l=i.sortArray(l,e))),i.hasInvalidLog=!1;var c=[],u=r?o:0;l.forEach((function(e){var t=e.value,n=e.rowName,s=e.score,a=i.state.scaling===i.scalingOptions.logarithmic&&t<=0;u+=r?s:1,null===t||a||c.push({x:u,y:t,info:n}),a&&(i.hasInvalidLog=!0)})),i[n]=c},i.sortArray=function(e,t){var n=i.possibleValues.find((function(e){return e.display_title===t}));return i.state.isValue&&["text","status"].includes(n.type)?e.sort((function(e,t){return e.value>t.value?1:t.value>e.value?-1:0})):e.sort((function(e,t){return+e.value-+t.value}))},i.renderColumns=function(){return i.possibleValues.map((function(e){var t=i.state.plot===i.plotOptions.scoreBased&&!i.isInVisibleRunsetSupportingScore(e.display_title);return Object(u.jsx)("option",{value:e.display_title,name:e.display_title,disabled:t,className:t?"disabled":"",children:e.display_title},e.display_title)}))},i.renderLines=function(){i.lineCount=0;var e=function(){return p.a[(i.lineCount-1)%p.a.length]};if(i.state.isValue)return i.props.tools.map((function(t,n){if(!i.isToolRelevantForCol(t,i.state.selection)||i.state.plot===i.plotOptions.scoreBased&&!t.scoreBased)return null;var r=i.state.selection,s=i[r+n],a=Object(p.j)(t);return i.lineCount++,Object(u.jsx)(f.f,{data:s,color:e(),opacity:i.handleLineState(a),onValueMouseOver:function(e,t){return i.setState({value:e})},onValueMouseOut:function(e,t){return i.setState({value:null})}},a)})).filter((function(e){return!!e}));if(!i.state.areAllColsHidden){var t=i.state.selection.split("-")[1],n=i.props.tools[t];return n.columns.filter((function(e){return i.isColRelevantForTool(e.colIdx,n.toolIdx)})).map((function(t){var n=i[t.display_title];return i.lineCount++,Object(u.jsx)(f.f,{data:n,color:e(),opacity:i.handleLineState(t.display_title),onValueMouseOver:function(e,t){return i.setState({value:e})},onValueMouseOut:function(e,t){return i.setState({value:null})}},t.display_title)}))}},i.handleLineState=function(e){return i.state.isInvisible.indexOf(e)<0?1:0},i.toggleShow=function(e){var t=e.target;i.setState(Object(s.a)({},t.name,t.checked))},i.handleType=function(){var e=i.state.selection,t=i.possibleValues.findIndex((function(t){return t.display_title===e})),n=i.state.isValue&&t>=0?i.possibleValues[t].type:null;return!i.state.isValue||"text"!==n&&"status"!==n?i.state.scaling===i.scalingOptions.linear?"linear":"log":"ordinal"},i.plotOptions={quantile:"Quantile Plot",direct:"Direct Plot"},i.scalingOptions={linear:"Linear",logarithmic:"Logarithmic"},i.resultsOptions={all:"All",correct:"Correct only"},i.defaultValues={plot:i.plotOptions.quantile,scaling:i.scalingOptions.logarithmic,results:i.resultsOptions.correct},i.checkForScoreBasedPlot(),i.possibleValues=[],i.lineCount=1,i.state=i.setPlotData(),i}return Object(l.a)(n,[{key:"setPlotData",value:function(){var e=this,t=Object(p.h)(),n=Object(r.a)(Object(r.a)({},this.defaultValues),t),i=n.selection,s=n.plot,a=n.scaling,l=n.results,o=i,c=this.props.tools.map((function(e){return e.toolIdx})).join(""),u=new RegExp("runset-["+c+"]"),d=void 0===i||!u.test(i);if(i=d?this.getColumnSelection(i):this.getRunsetSelection(i),s===this.plotOptions.scoreBased&&(d&&!this.isInVisibleRunsetSupportingScore(i)||!d)){this.setPossibleValues();var h=this.possibleValues.find((function(t){return"status"!==t.type&&e.isInVisibleRunsetSupportingScore(t.display_title)}));h||(h=this.possibleValues.find((function(t){return e.isInVisibleRunsetSupportingScore(t.display_title)}))),i=h?h.display_title:i,d=!0}return o&&i&&o!==i&&Object(p.y)({selection:i}),{selection:i,plot:s,scaling:a,results:l,isValue:d,isInvisible:[],areAllColsHidden:void 0===i,isResultSelectionDisabled:s===this.plotOptions.scoreBased}}},{key:"getColumnSelection",value:function(e){var t=e?this.props.tools.map((function(e){return e.columns})).flat().find((function(t){return t.display_title===e})):this.props.preSelection;if(!t||!this.isColVisibleInAnyTool(t)){var n=Object(p.g)(this.props.tools,this.props.hiddenCols),r=Object(i.a)(n,2),s=r[0],a=r[1];t=void 0!==s?this.props.tools.find((function(e){return e.toolIdx===s})).columns.find((function(e){return e.colIdx===a})):void 0}return t&&t.display_title}},{key:"getRunsetSelection",value:function(e){var t=this,n=parseInt(e.split("-")[1]);return this.props.tools.find((function(e){return e.toolIdx===n})).columns.some((function(e){return t.isColVisible(n,e.colIdx)}))||(n=Object(p.g)(this.props.tools,this.props.hiddenCols)[0]),void 0!==n?"runset-"+n:void 0}},{key:"checkForScoreBasedPlot",value:function(){var e=this;this.props.tools.some((function(t){return t.scoreBased&&e.isToolVisible(t)}))&&(this.plotOptions=Object(r.a)({scoreBased:"Score-based Quantile Plot"},this.plotOptions),this.props.tools.every((function(t){return t.scoreBased&&e.isToolVisible(t)}))&&(this.defaultValues.plot=this.plotOptions.scoreBased))}},{key:"componentDidMount",value:function(){window.addEventListener("resize",this.updateDimensions),window.addEventListener("popstate",this.refreshUrlState)}},{key:"componentWillUnmount",value:function(){window.removeEventListener("resize",this.updateDimensions),window.removeEventListener("popstate",this.refreshUrlState)}},{key:"setPossibleValues",value:function(){var e=this;this.props.tools.forEach((function(t){t.columns.forEach((function(n){e.isColVisible(t.toolIdx,n.colIdx)&&!e.possibleValues.some((function(e){return e.display_title===n.display_title}))&&e.possibleValues.push(n)}))}))}},{key:"renderAllSettings",value:function(){var e=this,t=this.state.plot===this.plotOptions.scoreBased?"Score-based Quantile Plots always show correct results offset by the score of wrong results. Any defined filters will still be applied.":"In addition to which results are selected here, any defined filters will still be applied.";return Object(u.jsxs)("div",{className:"settings-legend-container",children:[Object(u.jsx)("div",{className:"settings-container",children:Object(u.jsxs)("div",{className:"settings-border-container",children:[Object(u.jsxs)("div",{className:"settings-subcontainer flexible-width",children:[Object(u.jsxs)("div",{className:"setting flexible-width",children:[Object(u.jsx)("span",{className:"setting-label",children:"Selection:"}),Object(u.jsxs)("select",{className:"setting-select",name:"setting-Selection",value:this.state.selection,onChange:function(e){return Object(p.y)({selection:e.target.value})},children:[Object(u.jsx)("optgroup",{label:"Runsets",children:this.props.tools.map((function(t,n){var i=e.state.plot===e.plotOptions.scoreBased;return e.isToolVisible(t)?Object(u.jsx)("option",{value:"runset-"+n,name:"Runset "+n,disabled:i,className:i?"disabled":"",children:Object(p.j)(t)},"runset-"+n):null}))}),Object(u.jsx)("optgroup",{label:"Columns",children:this.renderColumns()})]})]}),Object(b.b)("Plot",this.state.plot,(function(e){return Object(p.y)({plot:e.target.value})}),this.plotOptions)]}),Object(u.jsxs)("div",{className:"settings-subcontainer",children:[Object(b.b)("Scaling",this.state.scaling,(function(e){return Object(p.y)({scaling:e.target.value})}),this.scalingOptions),Object(b.b)("Results",this.state.results,(function(e){return Object(p.y)({results:e.target.value})}),this.resultsOptions,t,this.state.isResultSelectionDisabled)]})]})}),Object(u.jsx)("div",{children:Object(u.jsx)(f.b,{colors:p.a,items:this.renderLegend(),onItemClick:function(t,n){var i;if(i=t.title.toString(),!(e.state.isInvisible.indexOf(i)<0))return e.setState({isInvisible:e.state.isInvisible.filter((function(e){return e!==i}))});e.setState({isInvisible:e.state.isInvisible.concat([i])})}})})]})}},{key:"render",value:function(){this.setPossibleValues(),this.renderAll();var e=this.props.isFlexible?f.c:f.j,t=this.props.isFlexible?{height:window.innerHeight-200}:{height:1e3,width:1500};return Object(u.jsxs)("div",{className:"quantilePlot",children:[!this.state.areAllColsHidden&&this.renderAllSettings(),Object(u.jsxs)(e,Object(r.a)(Object(r.a)({margin:{left:90},yType:this.handleType()},t),{},{children:[Object(u.jsx)(f.h,{}),Object(u.jsx)(f.e,{}),Object(u.jsx)(f.i,{tickFormat:function(e){return e}}),Object(u.jsx)(f.k,{tickFormat:function(e){return e}}),this.state.value?Object(u.jsx)(f.d,{value:this.state.value}):null,this.renderLines()]})),this.state.areAllColsHidden?Object(u.jsx)("div",{className:"plot__noresults",children:"No columns to show!"}):0===this.lineCount&&Object(u.jsx)("div",{className:"plot__noresults",children:this.hasInvalidLog?"All results have undefined values":"No correct results"})]})}}]),n}(h.a.Component)},205:function(e,t){},255:function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var i=n(78),r=n(276),s=n(269),a=n(68),l=n(71),o=n.n(l),c=n(106),u=n(127),d=n(125),h=function(e){Object(r.a)(n,e);var t=Object(s.a)(n);function n(){var e;Object(i.a)(this,n);for(var r=arguments.length,s=new Array(r),l=0;l=f&&O<=p}if(s)break}}catch(x){u.e(x)}finally{u.f()}if(!s)return!1}return!0}));return console.log("matching took ".concat(Date.now()-n," ms")),u}}},271:function(e,t,n){"use strict";n.d(t,"a",(function(){return I}));var i=n(270),r=n(272),s=n(91),a=n(78),l=n(79),o=n(276),c=n(269),u=n(68),d=n(71),h=n.n(d),f=n(86),p=n(127),b=n(125),j=n(267),m=(n(176),n(106)),v=Object(j.a)(j.b.Range),O=500,x=setTimeout((function(){}),O),g=function(e){Object(o.a)(n,e);var t=Object(c.a)(n);function n(e){var i;Object(a.a)(this,n),i=t.call(this,e);var r=e.filter||{values:[]},s=r.values,l=r.min,o=r.max,c=r.type,u=r.number_of_significant_digits,d=0,h=0;if("measure"===c||"number"===c){var f=new m.b(u).build();d=f(l),h=f(o);var p=s&&s[0];if(p&&p.includes(":")){var b=i.handleMinMaxValue(p,u);d=b.min,h=b.max}}return i.state={title:e.availableFilters&&e.availableFilters.length?e.availableFilters[0].title:"",values:[],idx:Object(m.u)(["availableFilters",0,"idx"],0,e),active:!0,selectedDistincts:[],sliderMin:d,sliderMax:h,numericMin:null,numericMax:null},i}return Object(l.a)(n,[{key:"sendFilterUpdate",value:function(e){var t=this.props.filter.type;0===e.length&&"status"===t?this.props.onFilterUpdate({values:[m.e],title:this.state.title||this.props.title}):this.props.onFilterUpdate({values:e,title:this.state.title||this.props.title})}},{key:"componentDidUpdate",value:function(e,t){if(this.props.filter&&(!e.filter||e.filter.values!==this.props.filter.values)){var n=this.props.filter,i=n.values,s=n.number_of_significant_digits,a=Object(r.a)(i,1)[0];if(a&&a.includes(":")){var l=this.handleMinMaxValue(a,s),o=l.min,c=l.max;this.setState({sliderMin:o,sliderMax:c,numericMin:o,numericMax:c})}}}},{key:"handleMinMaxValue",value:function(e,t){var n=new m.b(t).build(),i=this.props.filter||{min:0,max:1/0},s=i.min,a=i.max,l=e.split(":"),o=Object(r.a)(l,2),c=o[0],u=o[1];return{min:""!==c.trim()?c:n(s),max:""!==u.trim()?u:n(a)}}},{key:"handleNumberChange",value:function(e,t){var n,i,r={};if(r.sliderMin=Number(null!==(n=this.state.numericMin)&&void 0!==n?n:this.state.sliderMin),r.sliderMax=Number(null!==(i=this.state.numericMax)&&void 0!==i?i:this.state.sliderMax),r.sliderMin>r.sliderMax){var s=r.sliderMax;r.sliderMax=r.sliderMin,r.sliderMin=s}var a=r.sliderMin<=Number(e)?"":r.sliderMin,l=r.sliderMax>=Number(t)?"":r.sliderMax;r.values=["".concat(a,":").concat(l)],this.setState(r),this.sendFilterUpdate(r.values)}},{key:"render",value:function(){var e=this,t=this.props,n=t.filter,s=t.editable,a=t.availableFilters,l=h.a.createRef();return Object(u.jsxs)("div",{className:"filter-card",children:[function(t,i){return Object(u.jsx)("div",{className:"filter-card--header",children:i?Object(u.jsxs)(u.Fragment,{children:[Object(u.jsx)("span",{style:{marginLeft:"12px"},children:"Add filter for: "}),Object(u.jsxs)("select",{className:"filter-selection",defaultValue:"-1",ref:l,onChange:function(t){var n=t.target.value;-1!==n&&(e.setState({idx:-1,active:!0}),l.current.value="-1",e.props.addFilter(n))},children:[Object(u.jsx)("option",{value:"-1",disabled:!0,children:"Column"}),a.map((function(e){var t=e.idx,n=e.display_title;return Object(u.jsx)("option",{value:t,children:n},t)}))]})]}):Object(u.jsxs)(u.Fragment,{children:[Object(u.jsx)("h4",{className:"title",children:"".concat(n.display_title," ").concat(n.unit?"("+n.unit+")":"")}),Object(u.jsx)(b.a,{className:"delete-button",icon:p.f,onClick:function(){e.props.removeFilter()}})]})})}(this.props.name,s),function(t){if(!t)return null;var n,s=t.title,a=t.type,l=t.number_of_significant_digits,o=t.categories,c=t.statuses,d=t.values,f=void 0===d?[]:d,p=t.min,b=t.max;if("status"===a)n=Object(u.jsxs)(u.Fragment,{children:["Category",Object(u.jsx)("ul",{className:"filter-card--body--list",children:o.map((function(t){var n=h.a.createRef();return Object(u.jsxs)("li",{children:[Object(u.jsx)("input",{type:"checkbox",name:"cat-".concat(t),checked:f.includes(t),ref:n,onChange:function(n){if(n.target.checked){var r=[].concat(Object(i.a)(f),[t]);e.setState({values:r}),e.sendFilterUpdate(r)}else{var s=Object(m.A)(t,f);e.setState({values:s}),e.sendFilterUpdate(s)}}}),Object(u.jsx)("label",{htmlFor:"cat-".concat(t),onClick:function(){return n.current.click()},children:t})]},t)}))}),"Status",Object(u.jsx)("ul",{className:"filter-card--body--list",children:c.map((function(t){var n=h.a.createRef();return Object(u.jsxs)("li",{children:[Object(u.jsx)("input",{type:"checkbox",name:"stat-".concat(t),ref:n,checked:f.includes(t),onChange:function(n){if(n.target.checked){var r=[].concat(Object(i.a)(f),[t]);e.setState({values:r}),e.sendFilterUpdate(r)}else{var s=Object(m.A)(t,f);e.setState({values:s}),e.sendFilterUpdate(s)}}}),Object(u.jsx)("label",{htmlFor:"stat-".concat(t),onClick:function(){return n.current.click()},children:t})]},t)}))})]});else if("text"===a){var j=Object(r.a)(f,1)[0];n=Object(u.jsx)("input",{type:"text",name:"text-".concat(s),placeholder:"Search for value",value:j,onChange:function(t){var n=t.target.value;clearTimeout(x),e.setState({values:[n]}),x=setTimeout((function(){e.sendFilterUpdate([n])}),O)}})}else{var g=new m.b(l).build();p=g(p),b=g(b);var y=Object(m.k)(p),k=Object(m.k)(b),C=y.length>k.length?y:k;n=Object(u.jsxs)(u.Fragment,{children:[Object(u.jsxs)("div",{className:"filter-card--range-container",children:[Object(u.jsx)("b",{children:p}),Object(u.jsx)("b",{children:b})]}),Object(u.jsx)(v,{min:Number(p),max:Number(b),step:C,defaultValue:[Number(p),Number(b)],value:[Number(e.state.sliderMin),Number(e.state.sliderMax)],onChange:function(t){var n=Object(r.a)(t,2),i=n[0],s=n[1];e.setState({sliderMin:g(i),sliderMax:g(s)})},onAfterChange:function(t){var n=Object(r.a)(t,2),i=n[0],s=n[1],a=g(i),l=g(s),o=a===p?"":a,c=l===b?"":l;e.setState({sliderMin:a,sliderMax:l,numericMin:i,numericMax:s,values:["".concat(o,":").concat(c)]}),e.sendFilterUpdate(["".concat(o,":").concat(c)])}}),Object(u.jsxs)("div",{className:"filter-card--range-input-fields",children:[Object(u.jsx)("label",{className:"range-input-fields--min",htmlFor:"inp-".concat(s,"-min"),children:"minimum"}),Object(u.jsx)("label",{className:"range-input-fields--max",htmlFor:"inp-".concat(s,"-max"),children:"maximum"}),Object(u.jsx)("input",{type:"number",name:"inp-".concat(s,"-min"),value:null!==e.state.numericMin?e.state.numericMin:e.state.sliderMin,lang:"en-US",step:C,onChange:function(t){var n=t.target.value;e.numericMinTimeout&&clearTimeout(e.numericMinTimeout),e.setState({numericMin:n}),e.numericMinTimeout=setTimeout((function(){return e.handleNumberChange(p,b)}),O)}}),Object(u.jsx)("input",{type:"number",name:"inp-".concat(s,"-max"),step:C,lang:"en-US",value:null!==e.state.numericMax?e.state.numericMax:e.state.sliderMax,onChange:function(t){var n=t.target.value;e.numericMaxTimeout&&clearTimeout(e.numericMaxTimeout),e.setState({numericMax:n}),e.numericMaxTimeout=setTimeout((function(){return e.handleNumberChange(p,b)}),O)}})]})]})}return Object(u.jsx)("div",{className:"filter-card--body",children:n})}(this.props.filter)]})}}]),n}(h.a.PureComponent),y=n(177),k=n.n(y),C=function(e){Object(o.a)(n,e);var t=Object(c.a)(n);function n(e){var i;Object(a.a)(this,n),i=t.call(this,e);var r=e.filters,s=e.toolName,l=e.currentFilters;for(var o in l)r[o]=Object(f.a)(Object(f.a)(Object(f.a)({},r[o]),l[o]),{},{touched:r[o].touched+1,filtering:!0});return i.props.resetFilterHook((function(){return i.resetAllFilters()})),i.state={filters:r,toolName:s,addingFilter:!1,numCards:0},i}return Object(l.a)(n,[{key:"getActiveFilters",value:function(){return this.state.filters.filter((function(e){return e.filtering})).sort((function(e,t){return e.numCards-t.numCards}))}},{key:"setFilter",value:function(e,t){var n=e.title,r=e.values,s=e.filtering,a=void 0===s||s,l=this.state.filters;l[t].values=r,l[t].filtering=a,l[t].touched+=1,this.setState({filters:Object(i.a)(l)}),this.props.updateFilters({title:n,values:r},t)}},{key:"addFilter",value:function(e){var t=this.state,n=t.filters,r=t.numCards,s={filtering:!0,numCards:r,touched:0};"status"===n[e].type&&(s.values=[].concat(Object(i.a)(n[e].categories),Object(i.a)(n[e].statuses))),n[e]=Object(f.a)(Object(f.a)({},n[e]),s),this.setState({filters:n,addingFilter:!1,numCards:r+1})}},{key:"resetAllFilters",value:function(){var e=this.state.filters.filter((function(e){return e.filtering})),t=this.state.filters.map((function(e){return Object(f.a)(Object(f.a)({},e),{},{filtering:!1,values:[]})}));this.setState({filters:Object(i.a)(t)});var n,r=Object(s.a)(e);try{for(r.s();!(n=r.n()).done;){var a=n.value;a.values&&this.props.updateFilters({title:a.display_title,values:[]},a.idx)}}catch(l){r.e(l)}finally{r.f()}}},{key:"removeFilter",value:function(e,t){var n=this.state.filters;n[e].filtering=!1,n[e].values=[],this.setState({filters:Object(i.a)(n)}),this.props.updateFilters({title:t,values:[]},e)}},{key:"componentDidUpdate",value:function(e){var t=e.currentFilters,n=this.props.currentFilters;if(!k()(t,n)){console.log("updated container");var r=this.state.filters;for(var s in n)r[s]=Object(f.a)(Object(f.a)(Object(f.a)({},r[s]),n[s]),{},{touched:r[s].touched+1,filtering:!0});r=r.map((function(e,t){var i=!(!n[t]&&0!==e.touched);return Object(f.a)(Object(f.a)({},e),{},{filtering:i,values:i?e.values:[]})})),this.setState({filters:Object(i.a)(r)})}}},{key:"render",value:function(){var e=this,t=this.getActiveFilters(),n=this.props.hiddenCols||[],i=this.state.filters.filter((function(e,t){return!e.filtering&&!n.includes(t)}));return Object(u.jsxs)("div",{className:"filterBox--container",children:[Object(u.jsx)("h4",{className:"section-header",children:this.state.toolName}),t.length>0&&t.map((function(t,n){return Object(u.jsx)(g,{onFilterUpdate:function(n){return e.setFilter(n,t.idx)},title:t.display_title,removeFilter:function(){return e.removeFilter(t.idx,t.display_title)},filter:t},"".concat(e.props.toolName,"-").concat(t.display_title,"-").concat(t.numCards))})),i.length&&Object(u.jsx)(g,{availableFilters:i,editable:"true",style:{marginBottom:20},addFilter:function(t){return e.addFilter(t)},onFilterUpdate:function(t){return e.setFilter(t)}}),Object(u.jsx)("br",{})]})}}]),n}(h.a.PureComponent),F=n(87),w=setTimeout((function(){}),500),S=function(e){Object(o.a)(n,e);var t=Object(c.a)(n);function n(e){var i;return Object(a.a)(this,n),(i=t.call(this,e)).state={values:i.extractFilters()},e.resetFilterHook((function(){return i.resetIdFilters()})),i}return Object(l.a)(n,[{key:"resetIdFilters",value:function(){this.setState({values:{}}),this.sendFilterUpdate({})}},{key:"sendFilterUpdate",value:function(e){this.props.updateFilters(e)}},{key:"extractFilters",value:function(){for(var e=0,t={},n=0,i=Object.keys(this.props.ids);n",fileTag:"",content:i.props.yamlText},i}return Object(l.a)(n,[{key:"componentDidMount",value:function(){this.prepareTextForRendering()}},{key:"componentDidUpdate",value:function(e){e.yamlText!==this.props.yamlText&&this.prepareTextForRendering()}},{key:"render",value:function(){var e=this,t=this.state.content.split(this.state.splitterTag).map((function(t){return t.match("^".concat(e.state.fileTag,"(?:.)+").concat(e.state.fileTag,"$"))?(t=t.replace(new RegExp(e.state.fileTag,"g"),""),Object(u.jsx)("a",{onClick:function(n){return e.loadFileInViewer(n,t)},className:"link-overlay-file-link",href:e.props.createHref(t),children:t},t)):t}));return Object(u.jsx)("pre",{className:"link-overlay-text",children:t})}}]),n}(h.a.Component),F=n(228);F.configure({useWebWorkers:!1});var w={},S=function(e){Object(o.a)(n,e);var t=Object(c.a)(n);function n(e){var i;Object(a.a)(this,n),(i=t.call(this,e)).loadNewFile=function(e){var t=i.createFileUrl(e);i.setState({isYAML:i.isYAMLFile(e),isSecondLevel:!0,content:"loading file: ".concat(t)}),i.loadFile(t)},i.loadOriginalFile=function(){i.setState({isYAML:i.isYAMLFile(i.props.link),isSecondLevel:!1,content:"loading file: ".concat(i.props.link),error:void 0}),i.loadFile(i.props.link)},i.loadOriginalFileIfEnter=function(e){"Enter"===e.key&&i.loadOriginalFile()},i.createFileUrl=function(e){return g.a.join(i.props.link,"../"+e)},i.loadFileFromZip=function(e){var t=decodeURIComponent(e),n=t.lastIndexOf("/")>t.lastIndexOf("\\")?"/":"\\",r=t.lastIndexOf(n),s=t.substring(0,r)+".zip",a=t.split(n),l="".concat(a[a.length-2],"/").concat(a[a.length-1]);s in w?i.loadFileFromZipEntries(w[s],l,s):i.readZipArchive(s,l)},i.readZipArchive=function(e,t){new F.ZipReader(new F.HttpRangeReader(e)).getEntries().then((function(n){i.handleZipEntries(n,t,e)}),(function(n){n.message===F.ERR_HTTP_RANGE?i.readZipArchiveNoHttpRange(e,t):i.setError('HTTP request for the file "'.concat(t,'" failed'),n)}))},i.readZipArchiveNoHttpRange=function(e,t){new F.ZipReader(new F.HttpReader(e)).getEntries().then((function(n){i.handleZipEntries(n,t,e)}),(function(n){i.readZipArchiveManually(e,t)}))},i.readZipArchiveManually=function(e,t){try{var n=new XMLHttpRequest;n.responseType="arraybuffer",n.addEventListener("load",(function(){var r=new Uint8Array(n.response);new F.ZipReader(new F.Uint8ArrayReader(r)).getEntries().then((function(n){return i.handleZipEntries(n,t,e)}),i.setError)}),!1),n.addEventListener("error",i.setError,!1),n.open("GET",e),n.send()}catch(r){i.setError('HTTP request for the file "'.concat(t,'" failed'),r)}},i.handleZipEntries=function(e,t,n){w[n]=e,i.loadFileFromZipEntries(e,t,n)},i.loadFileFromZipEntries=function(e,t,n){var r=e.find((function(e){return e.filename===t}));r?r.getData(new F.TextWriter).then((function(e){i.setState({content:e})})):i.setError('Could not find the file "'.concat(t,'" in "').concat(n,'"'))},i.setError=function(e,t){var n=t&&"string"===typeof t?t:e;i.setState({error:"".concat(n)})},i.handlePopState=function(){window.history.back(),window.addEventListener("click",i.props.close,!1)};var r=!!e.link&&i.isYAMLFile(e.link);return i.state={isYAML:r,content:"loading file: ".concat(e.link),currentFile:e.link,isSecondLevel:!1},i}return Object(l.a)(n,[{key:"componentDidMount",value:function(){this.loadFile(this.props.link),window.history.pushState({},"",""),window.addEventListener("popstate",this.props.close,!1)}},{key:"componentDidUpdate",value:function(){var e=document.getElementById("modal-container");e&&e.focus()}},{key:"componentWillUnmount",value:function(){window.removeEventListener("popstate",this.props.close,!1),window.removeEventListener("click",this.props.close,!1)}},{key:"isYAMLFile",value:function(e){return e.endsWith(".yml")}},{key:"loadFile",value:function(){var e=Object(s.a)(r.a.mark((function e(t){var n,i;return r.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!t){e.next=19;break}return this.setState({currentFile:t}),e.prev=2,e.next=5,fetch(t);case 5:if(n=e.sent,!Object(m.p)(n.status)){e.next=13;break}return e.next=9,n.text();case 9:i=e.sent,this.setState({content:i}),e.next=14;break;case 13:throw Error("Received response status ".concat(n.status));case 14:e.next=19;break;case 16:e.prev=16,e.t0=e.catch(2),this.loadFileFromZip(t);case 19:case"end":return e.stop()}}),e,this,[[2,16]])})));return function(t){return e.apply(this,arguments)}}()},{key:"render",value:function(){var e=this;return p.a.setAppElement(document.getElementById("root")),Object(u.jsxs)(p.a,{id:"modal-container",ariaHideApp:!1,className:O()("overlay",{"second-level":this.state.isSecondLevel}),isOpen:!0,onRequestClose:function(){return e.handlePopState()},children:[Object(u.jsxs)("div",{className:"link-overlay-header-container",children:[Object(u.jsx)(b.a,{icon:j.e,onClick:function(){return e.handlePopState()},className:"closing"}),this.state.isSecondLevel?Object(u.jsxs)("span",{className:"link-overlay-back-button",tabIndex:"0",role:"button",onClick:this.loadOriginalFile,onKeyDown:this.loadOriginalFileIfEnter,children:[Object(u.jsx)(b.a,{className:"link-overlay-back-icon",icon:j.a}),"Back to task definition"]}):""]}),this.state.error?Object(u.jsxs)("div",{className:"link-overlay-text",children:[Object(u.jsxs)("p",{style:{marginTop:"0"},children:["Error while loading content (",this.state.error,")."]}),Object(u.jsxs)("p",{children:["This could be a problem of the"," ",Object(u.jsx)("a",{href:"https://en.wikipedia.org/wiki/Same-origin_policy",children:"same-origin policy"})," ","of your browser."]}),0===window.location.href.indexOf("file://")?Object(u.jsxs)(u.Fragment,{children:[Object(u.jsxs)("p",{children:["If you are using Chrome or a Chrome-based browser, try launching it with the command-line option"," ",Object(u.jsx)("code",{children:"--allow-file-access-from-files"}),"."]}),Object(u.jsxs)("p",{children:["If you are using Firefox, please open the extended settings by entering ",Object(u.jsx)("code",{children:"about:config"})," in the URL bar, search for"," ",Object(u.jsx)("code",{children:"privacy.file_unique_origin"})," and set this option to"," ",Object(u.jsx)("code",{children:"false"})," by double-clicking on it (",Object(u.jsx)("a",{href:"https://developer.mozilla.org/docs/Web/HTTP/CORS/Errors/CORSRequestNotHttp",children:"more details"}),"). Access to files that are not beneath the same directory as this HTML page is still forbidden."]})]}):null,Object(u.jsxs)("p",{children:["You can try to download the file:"," ",Object(u.jsx)("a",{href:this.state.currentFile,children:this.state.currentFile})]})]}):this.state.isYAML?Object(u.jsx)(C,{yamlText:this.state.content,createHref:this.createFileUrl,loadNewFile:this.loadNewFile}):Object(u.jsx)("pre",{className:"link-overlay-text",children:this.state.content})]})}}]),n}(h.a.Component)},77:function(e,t,n){},80:function(e,t,n){},81:function(e,t,n){"use strict";(function(e,i){n.d(t,"a",(function(){return A}));var r=n(86),s=n(270),a=n(78),l=n(79),o=n(276),c=n(269),u=n(68),d=n(71),h=n.n(d),f=n(257),p=n(261),b=n(90),j=n(107),m=n(108),v=n(110),O=n(128),x=n(171),g=n(271),y=n(277),k=n(92),C=n.n(k),F=n(255),w=n(106),S=n(256),N=n(125),I=n(127),T=n(177),_=n.n(T),M=[{key:"summary",title:"Summary",path:"/"},{key:"table",title:"Table",path:"/table"},{key:"quantile",title:"Quantile Plot",path:"/quantile"},{key:"scatter",title:"Scatter Plot",path:"/scatter"},{key:"info",title:"Info",path:"/info",icon:Object(u.jsx)(N.a,{icon:I.d})}],V=function(){return(M.find((function(e){return e.path===document.location.hash.split("?")[0].substr(1)}))||{key:"summary"}).key},A=function(t){Object(o.a)(d,t);var n=Object(c.a)(d);function d(t){var l;Object(a.a)(this,d),(l=n.call(this,t)).getFiltersFromUrl=function(){var e=l.filterUrlRetriever()||[];return _()(l.lastFiltered,e)?null:e},l.updateFiltersFromUrl=function(){var e=l.getFiltersFromUrl();e&&(l.filteredData=l.runFilter(e),l.setState({table:l.filteredData,filtered:e}),l.lastFiltered=e)},l.updateState=function(){return l.setState({active:V(),hiddenCols:Object(w.c)(l.state.tools)})},l.toggleSelectColumns=function(e){e.stopPropagation(),l.setState((function(e){return{showSelectColumns:!e.showSelectColumns}}))},l.toggleLinkOverlay=function(e,t){e.preventDefault(),l.setState((function(e){return{showLinkOverlay:!e.showLinkOverlay,link:t}}))},l.setFilter=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];l.filteredData=t?e:e.map((function(e){return e._original}))},l.filterPlotData=function(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];l.lastImmediate&&e(l.lastImmediate),l.lastImmediate=i((function(){l.filterUrlSetter(t,{history:l.routerRef.current.history}),l.lastFiltered=t.filter((function(e){return e.values&&e.values.length>0||e.value}))})),n&&l.setFilter(l.runFilter(t),!0),l.setState({table:l.filteredData,filtered:t})},l.resetFilters=function(){l.setState({table:l.originalTable,filtered:[]})},l.findAllValuesOfColumn=function(e,t){return l.originalTools.map((function(n,i){return n.columns.map((function(r,a){if(e(n,r)){var o=l.originalTable.map((function(e){return t(e.results[i],e.results[i].values[a])})).filter(Boolean);return Object(s.a)(new Set(o)).sort()}}))}))},l.getRowName=function(e){return e.id.filter((function(e){return e})).join(" | ")},l.changeTab=function(e,t,n){l.setState({tabIndex:n,quantilePreSelection:t})};var o=Object(w.v)(t.data),c=o.tableHeader,u=o.taskIdNames,f=o.tools,p=o.columns,b=o.table,j=o.stats,m=o.initial;m&&!document.location.href.includes("#")&&Object(w.w)(m);var v=Object(S.c)(l.props.data);l.originalTable=b,l.originalTools=f,l.taskIdNames=u,l.columns=p,l.stats=j,l.tableHeader=c,l.filteredData=[],l.routerRef=h.a.createRef(),l.state={tools:f,table:b,filterable:v,showSelectColumns:!1,showLinkOverlay:!1,filtered:[],tabIndex:0,filterBoxVisible:!1,active:V(),quantilePreSelection:f[0].columns[1],hiddenCols:Object(w.c)(f)},l.statusValues=l.findAllValuesOfColumn((function(e,t){return"status"===t.type}),(function(e,t){return Object(w.i)(t)})),l.categoryValues=l.findAllValuesOfColumn((function(e,t){return"status"===t.type}),(function(e,t){return e.category}));var O=l.categoryValues.map((function(e){return e&&e.map((function(e){return e&&e.map((function(e){return"".concat(e," ")}))}))}));l.filterUrlSetter=Object(w.r)(l.statusValues,O),l.filterUrlRetriever=Object(w.q)(l.statusValues,O);var x=l.getFiltersFromUrl();return x&&(l.filteredData=l.runFilter(x),l.lastFiltered=x,l.state=Object(r.a)(Object(r.a)({},l.state),{},{table:l.filteredData,filtered:x})),l}return Object(l.a)(d,[{key:"componentDidMount",value:function(){var e=this;this.removeHistoryListener=this.routerRef.current.history.listen((function(t,n){e.updateState(),"POP"===n&&e.updateFiltersFromUrl()}))}},{key:"componentWillUnmount",value:function(){this.removeHistoryListener()}},{key:"runFilter",value:function(e){var t=Object(S.b)(e);return Object(S.a)(t)(this.originalTable)}},{key:"render",value:function(){var e=this,t=function(t){var n=t.className,i=t.isReset,r=void 0!==i&&i,s=t.onClick,a=t.enabled;return Object(u.jsx)(F.a,{className:n,showFilterText:r,onClick:s,enabled:a,isFiltered:!!e.state.filtered.length,resetFilters:e.resetFilters,filteredCount:e.state.table.length,totalCount:e.originalTable.length})},n=document.location.href.split("?")[1]||"";return n=n.split("&").filter((function(e){return e.startsWith("hidden")||e.startsWith("filter")})).join("&"),Object(u.jsx)(f.a,{ref:this.routerRef,children:Object(u.jsxs)("div",{className:"overview",children:[Object(u.jsxs)("div",{className:"overview-container",children:[Object(u.jsx)(g.a,{headerComponent:t({className:"filterBox--header--reset",isReset:!0,enabled:!1}),tableHeader:this.tableHeader,tools:this.state.tools,selectColumn:this.toggleSelectColumns,filterable:this.state.filterable,setFilter:this.filterPlotData,resetFilters:this.resetFilters,filtered:this.state.filtered,visible:this.state.filterBoxVisible,hiddenCols:this.state.hiddenCols,hide:function(){e.setState({filterBoxVisible:!1})},ids:Object(w.l)(this.originalTable,this.taskIdNames)}),Object(u.jsxs)("div",{className:"menu",children:[M.map((function(t){var i=t.key,r=t.title,s=t.path,a=t.icon;return Object(u.jsxs)(f.b,{className:C()("menu-item",{selected:e.state.active===i}),to:s+(n?"?"+n:""),onClick:function(){return e.setState((function(){return{active:i}}))},children:[r," ",a||""]},s)})),t({className:"reset tooltip",enabled:!0,onClick:function(){e.setState({filterBoxVisible:!0})}})]}),Object(u.jsx)("div",{className:"route-container",children:Object(u.jsxs)(p.c,{children:[Object(u.jsx)(p.a,{exact:!0,path:"/",children:Object(u.jsx)(j.a,{tools:this.state.tools,tableHeader:this.tableHeader,version:this.props.data.version,selectColumn:this.toggleSelectColumns,stats:this.stats,changeTab:this.changeTab,hiddenCols:this.state.hiddenCols})}),Object(u.jsx)(p.a,{path:"/table",children:Object(u.jsx)(b.a,{tableHeader:this.tableHeader,data:this.state.table,tools:this.state.tools,selectColumn:this.toggleSelectColumns,setFilter:this.setFilter,filterPlotData:this.filterPlotData,filtered:this.state.filtered,toggleLinkOverlay:this.toggleLinkOverlay,changeTab:this.changeTab,statusValues:this.statusValues,categoryValues:this.categoryValues,hiddenCols:this.state.hiddenCols})}),Object(u.jsx)(p.a,{path:"/quantile",children:Object(u.jsx)(x.a,{table:this.state.table,tools:this.state.tools,preSelection:this.state.quantilePreSelection,getRowName:this.getRowName,hiddenCols:this.state.hiddenCols,isFlexible:this.props.renderPlotsFlexible})}),Object(u.jsx)(p.a,{path:"/scatter",children:Object(u.jsx)(O.a,{table:this.state.table,columns:this.columns,tools:this.state.tools,getRowName:this.getRowName,hiddenCols:this.state.hiddenCols,isFlexible:this.props.renderPlotsFlexible})}),Object(u.jsx)(p.a,{path:"/info",children:Object(u.jsx)(m.a,{version:this.props.data.version,selectColumn:this.toggleSelectColumns})})]})})]}),Object(u.jsxs)("div",{children:[this.state.showSelectColumns&&Object(u.jsx)(v.a,{close:this.toggleSelectColumns,currColumns:this.columns,tableHeader:this.tableHeader,tools:this.state.tools,hiddenCols:this.state.hiddenCols,history:this.routerRef.current.history}),this.state.showLinkOverlay&&Object(u.jsx)(y.a,{close:this.toggleLinkOverlay,link:this.state.link,toggleLinkOverlay:this.toggleLinkOverlay})]})]})})}}]),d}(h.a.Component)}).call(this,n(82).clearImmediate,n(82).setImmediate)},90:function(e,t,n){"use strict";var i,r=n(86),s=n(270),a=n(91),l=n(272),o=n(87),c=n(68),u=n(71),d=n(268),h=(n(98),n(99)),f=n.n(h),p=(n(104),n(105)),b=n(106),j=(i={},Object(o.a)(i,"empty","Empty rows"),Object(o.a)(i,"aborted","\u2014"),i),m=f()(d.a),v=function(e){var t=Object(u.useState)(!0),n=Object(l.a)(t,2),i=n[0],o=n[1],d=Object(u.useState)({}),h=Object(l.a)(d,2),f=h[0],v=h[1],O=Object(u.useState)(!1),x=Object(l.a)(O,2),g=x[0],y=x[1],k=Object(u.useState)(),C=Object(l.a)(k,2),F=C[0],w=C[1],S=Object(u.useState)(250),N=Object(l.a)(S,2),I=N[0],T=N[1];function _(e){var t,n,i=e.column.id+"_filter",r=e.filter?e.filter.value:e.filter,s="id"===e.column.id&&g?"To edit, please clear task filter in the sidebar":"text";return Object(c.jsx)("input",{id:i,placeholder:e.numeric?"Min:Max":s,defaultValue:t||r,onChange:function(r){t=r.target.value,clearTimeout(n),n=setTimeout((function(){e.onChange(t),document.getElementById(i).focus()}),500)},disabled:"id"===e.column.id&&g,type:"search",pattern:e.numeric?"([+-]?[0-9]*(\\.[0-9]*)?)(:[+-]?[0-9]*(\\.[0-9]*)?)?":void 0})}Object(u.useEffect)((function(){var t,n=e.filtered,i={},r=Object(a.a)(n);try{for(r.s();!(t=r.n()).done;){var s=t.value,o=s.value,c=s.values,u=s.id;"id"===u&&(Object(b.n)(c)?y(!1):y(!0));var d=u.split("_"),h=Object(l.a)(d,3),f=h[0],p=h[2],j=i[f]||{};if("string"===typeof o&&" "===o[o.length-1]){var m=j.categories||[];m.push(o),j.categories=m}else{var O=j[p]||[];O.push(o),j[p]=O}i[f]=j}}catch(k){r.e(k)}finally{r.f()}v(i);var x=function(){var e=Object(b.h)();return e.sort?e.sort.split(";").map((function(e){var t=e.split(",");return{id:t[0],desc:"desc"===t[1]}})):[]}();w(x);var g=parseInt(Object(b.h)().pageSize)||250;T(g)}),[e]);var M=function(e){var t=e.target.checked;o(t)},V=function(t,n,i){return{id:"".concat(t,"_").concat(n.display_title,"_").concat(i),Header:Object(c.jsx)(p.c,{column:n}),show:!e.hiddenCols[t].includes(n.colIdx),minWidth:Object(b.d)(n,10),accessor:function(e){return e.results[t].values[i]},Cell:function(n){var i,r=n.original.results[t].category,s=n.original.results[t].href;return"aborted"===r?(s=void 0,i="Result missing because run was aborted or not executed"):"empty"===r?i="Result missing because task was not part of benchmark set":s&&(i="Click here to show output of tool"),Object(c.jsx)(p.b,{cell:n,href:s,className:r,toggleLinkOverlay:e.toggleLinkOverlay,title:i,force:!0})},sortMethod:b.z,filterMethod:function(e,t){return!0},Filter:function(n){n.filter;var r=n.onChange,a=e.categoryValues[t][i],l=function(e){var t=e.categoryFilters,n=e.statusFilters,i=e.categoryFilterValues,r=e.statusFilterValues,a=[];return Object(b.m)(t,i)||(a=t),Object(b.m)(n,r)||(a=[].concat(Object(s.a)(a),Object(s.a)(n))),a}({categoryFilters:Object(b.u)([t,"categories"],[],f),statusFilters:Object(b.u)([t,i],[],f),categoryFilterValues:a.map((function(e){return"".concat(e," ")})),statusFilterValues:e.statusValues[t][i]}),o=l.length>1||l[0]===b.e,u=0===l.length,d=l&&l[0],h=o?"multiple":d;return Object(c.jsxs)("select",{onChange:function(e){return r(e.target.value)},style:{width:"100%"},value:(u?"all ":o&&"multiple")||h,children:[o&&Object(c.jsx)("option",{value:"multiple",disabled:!0,children:l.map((function(e){return e.trim()})).filter((function(e){return"all"!==e&&e!==b.e})).join(", ")||"No filters selected"}),Object(c.jsx)("option",{value:"all ",children:"Show all"}),a.filter((function(e){return e in j})).map((function(e){return Object(c.jsx)("option",{value:e+" ",children:j[e]},e)})),Object(c.jsx)("optgroup",{label:"Category",children:a.filter((function(e){return!(e in j)})).map((function(e){return Object(c.jsx)("option",{value:e+" ",children:e},e)}))}),Object(c.jsx)("optgroup",{label:"Status",children:e.statusValues[t][i].map((function(e){return Object(c.jsx)("option",{value:e,children:e},e)}))})]})}}},A=function(t,n,i){return"status"===n.type?V(t,n,i):{id:"".concat(t,"_").concat(n.display_title,"_").concat(i),Header:Object(c.jsx)(p.c,{column:n}),show:!e.hiddenCols[t].includes(n.colIdx),minWidth:Object(b.d)(n),accessor:function(e){return e.results[t].values[i]},Cell:function(t){return Object(c.jsx)(p.b,{cell:t,toggleLinkOverlay:e.toggleLinkOverlay})},filterMethod:function(){return!0},Filter:function(e){return Object(c.jsx)(_,Object(r.a)({numeric:Object(b.o)(n)},e))},sortMethod:Object(b.o)(n)?b.s:b.z}},D=e.tools.map((function(e,t){return Object(p.d)(e,t,A)})).flat();return Object(c.jsx)("div",{className:"mainTable",children:Object(c.jsx)(m,{data:e.data,filterable:!0,filtered:e.filtered,columns:[{Header:function(){return Object(c.jsx)("div",{className:"fixed",children:Object(c.jsx)("form",{children:Object(c.jsxs)("label",{title:"Fix the first column",children:["Fixed task:",Object(c.jsx)("input",{name:"fixed",type:"checkbox",checked:i,onChange:M})]})})})},fixed:i?"left":"",columns:[{minWidth:.3*window.innerWidth,Header:Object(c.jsx)(p.c,{children:Object(c.jsx)(p.a,{handler:e.selectColumn})}),fixed:i?"left":"",accessor:"id",Cell:function(t){var n=t.value.map((function(e){return Object(c.jsx)("span",{className:"row_id",children:e},e)})),i=t.original.href;return i?Object(c.jsx)("a",{className:"row__name--cellLink",href:i,title:"Click here to show source code",onClick:function(t){return e.toggleLinkOverlay(t,i)},children:n},i):Object(c.jsx)("span",{title:"This task has no associated file",children:n})},filterMethod:function(e,t){return!0},Filter:_}]}].concat(D),defaultSorted:F,onSortedChange:function(e){var t=e.map((function(e){return e.id+","+(e.desc?"desc":"asc")})).join(";");Object(b.y)({sort:t})},defaultPageSize:250,pageSize:I,pageSizeOptions:[50,100,250,500,1e3,2500],className:"-highlight",minRows:0,onFilteredChange:function(t){var n=(t=t.filter((function(e){return e.value}))).filter((function(t){return!e.filtered.includes(t)}));t.filter((function(e){return"id"===e.id})).forEach((function(e){e.isTableTabFilter=!0}));var i=Object(s.a)(t),r=[],o=n.filter((function(e){var t=e.id;e.value;return t.includes("status")}));if(o&&o.length){var c,u=o.map((function(e){var t=e.id,n=e.value,i=t.split("_"),r=Object(l.a)(i,3);return{tool:r[0],name:r[1],column:r[2],value:n}})),d=Object(a.a)(u);try{var h=function(){var t=c.value,n=t.tool,s=t.name,l=t.column,o=t.value;if("all"===o.trim())r=function(t){var n,i=t.tool,r=t.name,s=t.column,l=[],o=Object(a.a)(e.statusValues[i][s]);try{for(o.s();!(n=o.n()).done;){var c=n.value;l.push({id:"".concat(i,"_").concat(r,"_").concat(s),value:c})}}catch(p){o.e(p)}finally{o.f()}var u,d=Object(a.a)(e.categoryValues[i][s]);try{for(d.s();!(u=d.n()).done;){var h=u.value,f="".concat(h," ");l.push({id:"".concat(i,"_").concat(r,"_").concat(s),value:f})}}catch(p){d.e(p)}finally{d.f()}return l}({tool:n,name:s,column:l}),i=i.filter((function(e){var t=e.id,i=e.value;return!(t==="".concat(n,"_").concat(s,"_").concat(l)&&"all"===i.trim())}));else{var u=" "===o[o.length-1];r=function(t){var n,i=t.tool,r=t.name,s=t.column,l=t.isCategory,o=l?e.statusValues:e.categoryValues,c=[],u=Object(a.a)(o[i][s]);try{for(u.s();!(n=u.n()).done;){var d=n.value;c.push({id:"".concat(i,"_").concat(r,"_").concat(s),value:"".concat(d).concat(l?"":" ")})}}catch(h){u.e(h)}finally{u.f()}return c}({tool:n,name:s,column:l,isCategory:u})}};for(d.s();!(c=d.n()).done;)h()}catch(f){d.e(f)}finally{d.f()}}e.filterPlotData([].concat(Object(s.a)(i),Object(s.a)(r)),!0)},onPageSizeChange:function(e){return Object(b.y)({pageSize:e})},children:function(e,t){return t()}})})},O=Object(u.memo)(v);t.a=O}}); \ No newline at end of file +!function(e){function t(t){for(var i,a,l=t[0],o=t[1],c=t[2],d=0,h=[];di?1:n1?t[1]:void 0;if(void 0===n||0===n.length)return{};var i,r=n.split("&").map((function(e){return e.split("=")})),s={},a=Object(c.a)(r);try{for(a.s();!(i=a.n()).done;){var l=Object(o.a)(i.value,2),u=l[0],d=l[1];s[u]=d}}catch(h){a.e(h)}finally{a.f()}return s},N=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{returnString:!1,baseUrl:null,keepOthers:!1,paramName:null,history:null},n={},i=e;if(t.keepOthers){n=S();var r=Object.entries(e).filter((function(e){var t=Object(o.a)(e,2),n=(t[0],t[1]);return void 0===n||null===n}));r.forEach((function(e){var t=Object(o.a)(e,1)[0];delete n[t],delete i[t]}))}var s=Object(u.a)(Object(u.a)({},n),e),a={returnString:!1,baseUrl:null},l=Object(u.a)(Object(u.a)({},a),t),c=l.returnString,d=l.baseUrl,h=l.history,f=(d||document.location.href).split("?")[0],p=Object.keys(s).map((function(e){return"".concat(e,"=").concat(s[e])})),b="?".concat(p.join("&")),j=encodeURI("".concat(f).concat(b));if(c)return j;h?h.push(b):document.location.href=j},I=function(e,t){var n=E({categoryValues:t,statusValues:e});return function(e){var t=S(e);return t.filter?n(t.filter):null}},T=function(e){for(var t=[],n=0,i=Object.entries(e);n2&&void 0!==arguments[2]&&arguments[2],i={};if(e.length>Math.floor(t.length/2)){var r,s=[],a=Object(c.a)(t);try{for(a.s();!(r=a.n()).done;){var l=r.value;e.includes(l)||s.push(n?l.trim():l)}}catch(o){a.e(o)}finally{a.f()}i.notIn=s}else i.in=e.map((function(e){return n?e.trim():e}));return T(i)};function M(e,t,n,i,r){var s=[],a=e.statusValues,l=e.categoryValues,o=t[n][i],c=r[n][i],u=!!a,d=u&&a.length!==o.length,h=!!l,f=h&&l.length!==c.length;if(u){if(d){var p=_(a,o);s.push("status(".concat(p,")"))}h||s.push("category(empty())")}if(h&&(u||s.push("status(empty())"),f)){var b=_(l,c,!0);s.push("category(".concat(b,")"))}return s.join(",")}var V=function(e){var t,n={},i=0,r="",s=Object(c.a)(e);try{for(s.s();!(t=s.n()).done;){var a=t.value;if("("!==a){if(")"!==a)0!==i||","!==a?r+=a:r="";else if(r+=a,0===--i){var l=r.indexOf("("),o=r.substr(0,l),u=r.substr(l+1,r.length-1-(l+1));n[o]=u}}else r+=a,i++}}catch(d){s.e(d)}finally{s.f()}return n},A=function(e,t,n,i,r){return"values"===e?[{values:t.split(",").map(unescape)}]:"value"===e?[{value:unescape(t)}]:"status"===e||"category"===e?function(e,t,n,i,r){for(var s=V(t),l=[],u=0,d=Object.entries(s);u0?r.ids={values:f.map((function(e){return e||""}))}:p&&s.push({id:d,value:h})}}catch(B){a.e(B)}finally{a.f()}var C=r.ids,F=Object(l.a)(r,["ids"]),w=[];C&&w.push("id(values(".concat(C.values.map(escape).join(","),"))")),s&&s.forEach((function(e){w.push("id_any(value(".concat(e.value,"))"))}));for(var S=0,N=Object.entries(F);S0&&w.push("".concat(T,"(").concat(V.join(","),")"))}return w.join(",")}}({statusValues:e,categoryValues:t});return function(e,t){var i=S();if(!e)return N(i,t);var r=n(e);return r?N(Object(u.a)(Object(u.a)({},i),{},{filter:r}),t):(delete i.filter,N(Object(u.a)({},i),t))}},D=function(e){document.location.href=encodeURI("".concat(document.location.href,"#").concat(e))},H=function(e){N(Object(u.a)(Object(u.a)({},S()),e))},L=function(e,t){return k(["0","id"],[],e).reduce((function(e,n,i){return Object(u.a)(Object(u.a)({},e),{},Object(s.a)({},t[i],n))}),{})},P=" ",B=" ",U=function(){function e(t){Object(i.a)(this,e),this._defaultOptions={whitespaceFormat:!1,html:!1},this.significantDigits=t,this.maxPositiveDecimalPosition=-1,this.maxNegativeDecimalPosition=-1}return Object(r.a)(e,[{key:"addDataItem",value:function(e){var t=e.split(/\.|,/),n=Object(o.a)(t,2),i=n[0],r=n[1];this.maxPositiveDecimalPosition=Math.max(this.maxPositiveDecimalPosition,i?i.length:0),this.maxNegativeDecimalPosition=Math.max(this.maxNegativeDecimalPosition,r?r.length:0)}},{key:"build",value:function(){var e=this;return function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(b(e.significantDigits))return t.toString();for(var i=Object(u.a)(Object(u.a)({},e._defaultOptions),n),r=i.whitespaceFormat,s=i.html,a=t.toString(),l="",c="",d=0,h=0,f=!1,p=!1,j=a.replace(/,/,".").indexOf(".");hd;){var m=a[d];if("."===m||","===m)l+=".",p=!0;else{if(!f){if("0"===m){d+=1,p&&(l+=m);continue}f=!0}l+=m,h+=1}d+=1}if("."===l[0]&&(l="0".concat(l)),c=a.substring(d)){var v="."===c[0];c=c.replace(/\./,""),c="".concat(c[0],".").concat(c.substr(1)),c=Math.round(Number(c)),c=isNaN(c)?"":c.toString(),v&&(c=".".concat(c));var O=j;for(-1===j&&(O=a.length);l.length+c.length0){var s=n.map((function(e){return e.colIdx}));r?i.removeFromHiddenCols(t.toolIdx,s):i.addToHiddenCols(t.toolIdx,s)}}))},i.addToHiddenCols=function(e,t){var n=Object(a.a)(new Set(i.state.hiddenCols[e].concat(t)));i.setHiddenColsForTool(e,n)},i.removeFromHiddenCols=function(e,t){var n=i.state.hiddenCols[e].filter((function(e){return!t.includes(e)}));i.setHiddenColsForTool(e,n)},i.handlePopState=function(){window.history.back()};var r=e.tools.map((function(e){return e.columns})).flat().filter((function(e,t,n){return t===n.findIndex((function(t){return t.display_title===e.display_title}))})).map((function(e){return e.display_title}));return i.state={isButtonOnDeselect:!0,hiddenCols:i.props.hiddenCols,selectableCols:r},i}return Object(o.a)(n,[{key:"componentDidMount",value:function(){window.history.pushState({},"",""),window.addEventListener("popstate",this.props.close,!1)}},{key:"componentWillUnmount",value:function(){var e=this;window.removeEventListener("popstate",this.props.close,!1);var t={},n=[];Object.entries(this.state.hiddenCols).forEach((function(i){var r=Object(s.a)(i,2),a=r[0],l=r[1],o=e.props.tools.find((function(e){return e.toolIdx===parseInt(a)})).columns;l.length===o.length?n.push(a):l.length>0?t["hidden"+a]=l.toString():t["hidden"+a]=null})),n.length>0?t.hidden=n.toString():t.hidden=null,Object(m.x)(t,{keepOthers:!0,history:this.props.history})}},{key:"setHiddenColsForTool",value:function(e,t){this.setState((function(n){return{hiddenCols:Object(r.a)(Object(r.a)({},n.hiddenCols),{},Object(i.a)({},e,t))}}))}},{key:"render",value:function(){var e=this;p.a.setAppElement(document.getElementById("root"));var t=this.props.tools.every((function(t){return t.columns.length===e.state.hiddenCols[t.toolIdx].length}));return Object(v.jsxs)(p.a,{ariaHideApp:!1,className:"overlay",isOpen:!0,onRequestClose:function(){return e.handlePopState()},children:[Object(v.jsx)("div",{className:"link-overlay-header-container",children:Object(v.jsx)(b.a,{icon:j.e,onClick:function(){return e.handlePopState()},className:"closing"})}),Object(v.jsx)("h1",{children:"Select the columns to display"}),Object(v.jsx)("table",{className:"selectRows",children:Object(v.jsxs)("tbody",{children:[Object(v.jsxs)("tr",{className:"selectColumn_all",children:[Object(v.jsx)("th",{}),this.renderColumnHeaders()]}),this.renderTools()]})}),Object(v.jsxs)("div",{className:"overlay__buttons",children:[Object(v.jsx)("button",{className:"btn",onClick:this.toggleAllColsHidden,children:this.state.isButtonOnDeselect?"Deselect all":"Select all"}),Object(v.jsx)("button",{className:"btn btn-apply",onClick:function(){return e.handlePopState()},disabled:t,children:"Apply and close"}),Object(v.jsx)("input",{})]})]})}}]),n}(h.a.Component)},128:function(e,t,n){"use strict";n.d(t,"a",(function(){return k}));var i=n(84),r=n(85),s=n(277),a=n(275),l=n(76),o=n(77),c=n(281),u=n(274),d=n(68),h=n.n(d),f=(n(129),n(271)),p=n(104),b=n(125),j=n(127),m=n(171),v=n(105),O={linear:"Linear",logarithmic:"Logarithmic"},x={all:"All",correct:"Correct only"},g={"f(x) = cx and f(x) = x/c":[{name:"c = 1.1",value:1.1},{name:"c = 1.2",value:1.2},{name:"c = 1.5",value:1.5},{name:"c = 2",value:2},{name:"c = 3",value:3},{name:"c = 4",value:4},{name:"c = 5",value:5},{name:"c = 6",value:6},{name:"c = 7",value:7},{name:"c = 8",value:8},{name:"c = 9",value:9},{name:"c = 10",value:10},{name:"c = 100",value:100},{name:"c = 1000",value:1e3},{name:"c = 10000",value:1e4},{name:"c = 100000",value:1e5},{name:"c = 1000000",value:1e6}]},y={scaling:O.logarithmic,results:x.correct,line:Object.values(g)[0][11].value},k=function(e){Object(c.a)(n,e);var t=Object(u.a)(n);function n(e){var i;return Object(l.a)(this,n),(i=t.call(this,e)).refreshUrlState=function(){i.setState(i.setup())},i.renderData=function(){var e=[];i.hasInvalidLog=!1,i.state.areAllColsHidden||i.props.table.forEach((function(t){var n=t.results[i.state.toolX],r=t.results[i.state.toolY],s=n.values[i.state.columnX].raw,a=r.values[i.state.columnY].raw,l=void 0!==s&&null!==s&&void 0!==a&&null!==a,o=i.state.results===x.correct;l&&(!o||o&&"correct"===n.category&&"correct"===r.category)&&(i.state.scaling===O.logarithmic&&(s<=0||a<=0)?i.hasInvalidLog=!0:e.push({x:s,y:a,info:i.props.getRowName(t)}))})),i.setMinMaxValues(e),i.lineCount=e.length,i.dataArray=e},i.setMinMaxValues=function(e){var t=e.map((function(e){return e.x})),n=e.map((function(e){return e.y}));i.maxX=i.findMaxValue(t),i.maxY=i.findMaxValue(n),i.minX=i.findMinValue(t),i.minY=i.findMinValue(n)},i.findMaxValue=function(e){var t=Math.max.apply(Math,Object(a.a)(e));return t<3?3:t},i.findMinValue=function(e){var t=Math.min.apply(Math,Object(a.a)(e));return t>2?1:t},i.handleType=function(e,t){var n=i.props.tools[e].columns[t].type;return"text"===n||"status"===n?"ordinal":i.state.scaling===O.logarithmic?"log":"linear"},i.extractAxisInfoByName=function(e,t){var n,a=e.split("-"),l=Object(s.a)(a,2),o=l[0],c=l[1];return n={},Object(r.a)(n,"data".concat(t),e),Object(r.a)(n,"tool".concat(t),o),Object(r.a)(n,"column".concat(t),c),Object(r.a)(n,"name".concat(t),i.props.tools[o].columns.find((function(e){return e.colIdx===parseInt(c)})).display_title+" ("+Object(p.j)(i.props.tools[o])+")"),n},i.setAxis=function(e,t){var n;i.array=[];var a=e.target.value.split("-"),l=Object(s.a)(a,2),o=l[0],c=l[1];c=c.replace("___","-"),Object(p.y)((n={},Object(r.a)(n,"tool".concat(t),o),Object(r.a)(n,"column".concat(t),c),n))},i.swapAxes=function(){i.array=[],Object(p.y)({toolX:i.state.toolY,toolY:i.state.toolX,columnX:i.state.columnY,columnY:i.state.columnX})},i.state=i.setup(),i.maxX="",i.minX="",i.lineCount=1,i}return Object(o.a)(n,[{key:"setup",value:function(){var e,t,n,r=Object(p.j)(this.props.tools[0])+" "+this.props.columns[0][1],a=Object(i.a)(Object(i.a)({},y),Object(p.h)()),l=a.results,o=a.scaling,c=a.toolX,u=a.toolY,d=a.columnX,h=a.columnY,f=a.line;if(Object(p.n)(c)||Object(p.n)(d)){var b=Object(p.g)(this.props.tools,this.props.hiddenCols),j=Object(s.a)(b,2),m=j[0],v=j[1];n=void 0===m,c=m,e="".concat(m,"-").concat(v)}else n=!1,e="".concat(c,"-").concat(d);if(Object(p.n)(u)||Object(p.n)(h)){var O=Object(p.g)(this.props.tools,this.props.hiddenCols),x=Object(s.a)(O,2),g=x[0],k=x[1];n=void 0===g,u=g,t="".concat(g,"-").concat(k)}else n=!1,t="".concat(u,"-").concat(h);var C={dataX:e,dataY:t,results:l,scaling:o,toolX:0,toolY:0,line:f,columnX:1,columnY:1,nameX:r,nameY:r,value:!1,areAllColsHidden:n};return e&&!n&&(C=Object(i.a)(Object(i.a)({},C),this.extractAxisInfoByName(e,"X"))),t&&!n&&(C=Object(i.a)(Object(i.a)({},C),this.extractAxisInfoByName(t,"Y"))),C}},{key:"componentDidMount",value:function(){window.addEventListener("popstate",this.refreshUrlState)}},{key:"componentWillUnmount",value:function(){window.removeEventListener("popstate",this.refreshUrlState)}},{key:"renderAllSettings",value:function(){var e=this,t=this.props.tools.reduce((function(t,n,i){return Object.assign(t,Object(r.a)({},Object(p.j)(n),n.columns.filter((function(t){return!e.props.hiddenCols[i].includes(t.colIdx)})).map((function(e,t){return{name:e.display_title,value:i+"-"+e.colIdx}}))))}),{});return Object(v.jsx)("div",{className:"settings-container",children:Object(v.jsxs)("div",{className:"settings-border-container",children:[Object(v.jsxs)("div",{className:"settings-subcontainer flexible-width",children:[Object(m.a)("X-Axis",this.state.dataX,(function(t){return e.setAxis(t,"X")}),t),Object(v.jsx)("span",{className:"setting icon",children:Object(v.jsx)(b.a,{icon:j.b,onClick:function(){return e.swapAxes()}})}),Object(m.a)("Y-Axis",this.state.dataY,(function(t){return e.setAxis(t,"Y")}),t)]}),Object(v.jsxs)("div",{className:"settings-subcontainer",children:[Object(m.b)("Scaling",this.state.scaling,(function(e){return Object(p.y)({scaling:e.target.value})}),O),Object(m.b)("Results",this.state.results,(function(e){return Object(p.y)({results:e.target.value})}),x,"In addition to which results are selected here, any filters will still be applied."),Object(v.jsx)("div",{className:"settings-subcontainer",children:Object(m.a)("Aux. Lines",this.state.line,(function(e){return Object(p.y)({line:e.target.value})}),g,"Adds the two auxiliary lines f(x) = cx and f(x) = x/c to the plot, with c being the chosen factor in the dropdown.")})]})]})})}},{key:"render",value:function(){var e=this;this.renderData();var t=this.state.scaling===O.linear,n=this.props.isFlexible?f.c:f.j,r=this.props.isFlexible?{height:window.innerHeight-200}:{height:1e3,width:1500};return Object(v.jsxs)("div",{className:"scatterPlot",children:[!this.state.areAllColsHidden&&this.renderAllSettings(),Object(v.jsxs)(n,Object(i.a)(Object(i.a)({className:"scatterPlot__plot",margin:{left:90},yType:this.handleType(this.state.toolY,this.state.columnY),xType:this.handleType(this.state.toolX,this.state.columnX),xDomain:"ordinal"!==this.handleType(this.state.toolX,this.state.columnX)?[this.minX,this.maxX]:null,yDomain:"ordinal"!==this.handleType(this.state.toolY,this.state.columnY)?[this.minY,this.maxY]:null},r),{},{children:[Object(v.jsx)(f.h,{yType:this.handleType(this.state.toolY,this.state.columnY),xType:this.handleType(this.state.toolX,this.state.columnX)}),Object(v.jsx)(f.e,{yType:this.handleType(this.state.toolY,this.state.columnY),xType:this.handleType(this.state.toolX,this.state.columnX)}),Object(v.jsx)(f.a,{className:"middle-line",axisStart:{x:t?0:1,y:t?0:1},axisEnd:{x:this.maxX>this.maxY?this.maxX:this.maxY,y:this.maxX>this.maxY?this.maxX:this.maxY},axisDomain:[0,1e10],style:{ticks:{stroke:"#009440",opacity:0},text:{stroke:"none",fill:"#009440",fontWeight:600,opacity:0}}}),Object(v.jsx)(f.a,{axisStart:{x:t?0:this.state.line,y:t?0:1},axisEnd:{x:this.maxX,y:this.maxX/this.state.line},axisDomain:[0,1e10],style:{ticks:{stroke:"#ADDDE1",opacity:0},text:{stroke:"none",fill:"#6b6b76",fontWeight:600,opacity:0}}}),Object(v.jsx)(f.a,{axisStart:{x:t?0:1,y:t?0:this.state.line},axisEnd:{x:this.maxX,y:this.maxX*this.state.line},axisDomain:[0,1e10],style:{ticks:{stroke:"#ADDDE1",opacity:0},text:{stroke:"none",fill:"#6b6b76",fontWeight:600,opacity:0}}}),Object(v.jsx)(f.i,{title:this.state.nameX,tickFormat:function(e){return e},yType:this.handleType(this.state.toolY,this.state.columnY),xType:this.handleType(this.state.toolX,this.state.columnX)}),Object(v.jsx)(f.k,{title:this.state.nameY,tickFormat:function(e){return e},yType:this.handleType(this.state.toolY,this.state.columnY),xType:this.handleType(this.state.toolX,this.state.columnX)}),Object(v.jsx)(f.g,{data:this.dataArray,onValueMouseOver:function(t,n){return e.setState({value:t})},onValueMouseOut:function(t,n){return e.setState({value:null})}}),this.state.value?Object(v.jsx)(f.d,{value:this.state.value}):null]})),this.state.areAllColsHidden?Object(v.jsx)("div",{className:"plot__noresults",children:"No columns to show!"}):0===this.lineCount&&Object(v.jsxs)("div",{className:"plot__noresults",children:["No ",this.state.results===x.correct&&"correct"," ","results",this.props.table.length>0&&" with valid data points",this.hasInvalidLog&&" (negative values are not shown in logarithmic plot)"]})]})}}]),n}(h.a.Component)},171:function(e,t,n){"use strict";n.d(t,"b",(function(){return s})),n.d(t,"a",(function(){return a}));var i=n(277),r=(n(68),n(105)),s=function(e,t,n,i,s,a){return Object(r.jsxs)("div",{className:"setting".concat(a?" disabled":""),title:s,children:[Object(r.jsxs)("span",{className:"setting-label",children:[e,":"]}),Object(r.jsxs)("select",{className:"setting-select",name:"setting-"+e,value:a?"disabled":t,onChange:n,disabled:a,children:[Object.values(i).map((function(t){return Object(r.jsx)("option",{value:t,name:t+" "+e,children:t},t)})),a?Object(r.jsx)("option",{value:"disabled",name:"disabled",children:"\u2e3a"}):""]})]})},a=function(e,t,n,s,a){return Object(r.jsxs)("div",{className:"setting",title:a,children:[Object(r.jsxs)("span",{className:"setting-label",children:[e,":"]}),Object(r.jsx)("select",{id:"setting-"+e,className:"setting-select",name:"setting-"+e,value:t,onChange:n,children:Object.entries(s).map((function(t){var n=Object(i.a)(t,2),s=n[0],a=n[1];return Object(r.jsx)("optgroup",{label:s,children:a.map((function(t){return Object(r.jsx)("option",{value:t.value,name:t.name+" "+e,children:t.name},t.value)}))},s)}))})]})}},172:function(e,t,n){"use strict";n.d(t,"a",(function(){return j}));var i=n(277),r=n(84),s=n(85),a=n(76),l=n(77),o=n(281),c=n(274),u=n(68),d=n.n(u),h=(n(129),n(271)),f=n(104),p=n(171),b=n(105),j=function(e){Object(o.a)(n,e);var t=Object(c.a)(n);function n(e){var i;return Object(a.a)(this,n),(i=t.call(this,e)).isColRelevantForTool=function(e,t){return i.isColVisible(t,e)&&"text"!==e.type&&"status"!==e.type},i.isToolRelevantForCol=function(e,t){var n=e.columns.find((function(e){return e.display_title===t}));return i.isToolVisible(e)&&n&&i.isColVisible(e.toolIdx,n.colIdx)},i.isColVisibleInAnyTool=function(e){return i.props.tools.some((function(t){return t.columns.some((function(n){return n.colIdx===e.colIdx&&i.isColVisible(t.toolIdx,n.colIdx)}))}))},i.isInVisibleRunsetSupportingScore=function(e){return i.props.tools.filter((function(e){return i.isToolVisible(e)})).some((function(t){return t.scoreBased&&t.columns.some((function(t){return t.display_title===e}))}))},i.isToolVisible=function(e){return e.columns.length!==i.props.hiddenCols[e.toolIdx].length},i.isColVisible=function(e,t){return!i.props.hiddenCols[e].includes(t)},i.updateDimensions=function(){i.setState({height:window.innerHeight})},i.refreshUrlState=function(){i.setState(i.setPlotData())},i.renderLegend=function(){if(i.state.isValue)return i.props.tools.filter((function(e){return i.isToolRelevantForCol(e,i.state.selection)})).map(f.j).map((function(e){return{title:e,disabled:i.state.isInvisible.some((function(t){return t===e})),strokeWidth:4}}));var e=i.props.tools[i.state.selection.split("-")[1]];return i.state.areAllColsHidden?[]:e.columns.filter((function(t){return i.isColRelevantForTool(t.colIdx,e.toolIdx)})).map((function(e){return{title:e.display_title,disabled:i.state.isInvisible.some((function(t){return t===e.display_title})),strokeWidth:4}}))},i.renderAll=function(){var e=i.state.selection;if(i.state.isValue)(i.state.plot===i.plotOptions.scoreBased?i.props.tools.filter((function(e){return e.scoreBased})):i.props.tools).forEach((function(t){return i.renderData(e,t.toolIdx,e+t.toolIdx)}));else if(!i.state.areAllColsHidden){var t=i.state.selection.split("-")[1],n=i.props.tools[t];n.columns.filter((function(e){return i.isColRelevantForTool(e.colIdx,n.toolIdx)&&i.isColVisible(n.toolIdx,e.colIdx)})).forEach((function(e){return i.renderData(e.display_title,t,e.display_title)}))}},i.renderData=function(e,t,n){var r=i.state.plot===i.plotOptions.scoreBased,s="ordinal"===i.handleType(),a=i.props.tools[t].columns.findIndex((function(t){return t.display_title===e})),l=[],o=0;(!i.state.isValue||a>=0&&i.isColVisible(t,a))&&(l=i.props.table.map((function(e){var n=e.results[t],l=null;return"correct"===n.category||!i.state.isResultSelectionDisabled&&i.state.results!==i.resultsOptions.correct?(l=n.values[a].raw||null,s||null===l||(l=isFinite(+l)?+l:null)):r&&n.score&&"correct"!==n.category&&(o+=n.score),{value:l,rowName:i.props.getRowName(e),score:n.score}})),i.state.plot!==i.plotOptions.direct&&(l=l.filter((function(e){return null!==e.value})),l=i.sortArray(l,e))),i.hasInvalidLog=!1;var c=[],u=r?o:0;l.forEach((function(e){var t=e.value,n=e.rowName,s=e.score,a=i.state.scaling===i.scalingOptions.logarithmic&&t<=0;u+=r?s:1,null===t||a||c.push({x:u,y:t,info:n}),a&&(i.hasInvalidLog=!0)})),i[n]=c},i.sortArray=function(e,t){var n=i.possibleValues.find((function(e){return e.display_title===t}));return i.state.isValue&&["text","status"].includes(n.type)?e.sort((function(e,t){return e.value>t.value?1:t.value>e.value?-1:0})):e.sort((function(e,t){return+e.value-+t.value}))},i.renderColumns=function(){return i.possibleValues.map((function(e){var t=i.state.plot===i.plotOptions.scoreBased&&!i.isInVisibleRunsetSupportingScore(e.display_title);return Object(b.jsx)("option",{value:e.display_title,name:e.display_title,disabled:t,className:t?"disabled":"",children:e.display_title},e.display_title)}))},i.renderLines=function(){i.lineCount=0;var e=function(){return f.a[(i.lineCount-1)%f.a.length]};if(i.state.isValue)return i.props.tools.map((function(t,n){if(!i.isToolRelevantForCol(t,i.state.selection)||i.state.plot===i.plotOptions.scoreBased&&!t.scoreBased)return null;var r=i.state.selection,s=i[r+n],a=Object(f.j)(t);return i.lineCount++,Object(b.jsx)(h.f,{data:s,color:e(),opacity:i.handleLineState(a),onValueMouseOver:function(e,t){return i.setState({value:e})},onValueMouseOut:function(e,t){return i.setState({value:null})}},a)})).filter((function(e){return!!e}));if(!i.state.areAllColsHidden){var t=i.state.selection.split("-")[1],n=i.props.tools[t];return n.columns.filter((function(e){return i.isColRelevantForTool(e.colIdx,n.toolIdx)})).map((function(t){var n=i[t.display_title];return i.lineCount++,Object(b.jsx)(h.f,{data:n,color:e(),opacity:i.handleLineState(t.display_title),onValueMouseOver:function(e,t){return i.setState({value:e})},onValueMouseOut:function(e,t){return i.setState({value:null})}},t.display_title)}))}},i.handleLineState=function(e){return i.state.isInvisible.indexOf(e)<0?1:0},i.toggleShow=function(e){var t=e.target;i.setState(Object(s.a)({},t.name,t.checked))},i.handleType=function(){var e=i.state.selection,t=i.possibleValues.findIndex((function(t){return t.display_title===e})),n=i.state.isValue&&t>=0?i.possibleValues[t].type:null;return!i.state.isValue||"text"!==n&&"status"!==n?i.state.scaling===i.scalingOptions.linear?"linear":"log":"ordinal"},i.plotOptions={quantile:"Quantile Plot",direct:"Direct Plot"},i.scalingOptions={linear:"Linear",logarithmic:"Logarithmic"},i.resultsOptions={all:"All",correct:"Correct only"},i.defaultValues={plot:i.plotOptions.quantile,scaling:i.scalingOptions.logarithmic,results:i.resultsOptions.correct},i.checkForScoreBasedPlot(),i.possibleValues=[],i.lineCount=1,i.state=i.setPlotData(),i}return Object(l.a)(n,[{key:"setPlotData",value:function(){var e=this,t=Object(f.h)(),n=Object(r.a)(Object(r.a)({},this.defaultValues),t),i=n.selection,s=n.plot,a=n.scaling,l=n.results,o=i,c=this.props.tools.map((function(e){return e.toolIdx})).join(""),u=new RegExp("runset-["+c+"]"),d=void 0===i||!u.test(i);if(i=d?this.getColumnSelection(i):this.getRunsetSelection(i),s===this.plotOptions.scoreBased&&(d&&!this.isInVisibleRunsetSupportingScore(i)||!d)){this.setPossibleValues();var h=this.possibleValues.find((function(t){return"status"!==t.type&&e.isInVisibleRunsetSupportingScore(t.display_title)}));h||(h=this.possibleValues.find((function(t){return e.isInVisibleRunsetSupportingScore(t.display_title)}))),i=h?h.display_title:i,d=!0}return o&&i&&o!==i&&Object(f.y)({selection:i}),{selection:i,plot:s,scaling:a,results:l,isValue:d,isInvisible:[],areAllColsHidden:void 0===i,isResultSelectionDisabled:s===this.plotOptions.scoreBased}}},{key:"getColumnSelection",value:function(e){var t=e?this.props.tools.map((function(e){return e.columns})).flat().find((function(t){return t.display_title===e})):this.props.preSelection;if(!t||!this.isColVisibleInAnyTool(t)){var n=Object(f.g)(this.props.tools,this.props.hiddenCols),r=Object(i.a)(n,2),s=r[0],a=r[1];t=void 0!==s?this.props.tools.find((function(e){return e.toolIdx===s})).columns.find((function(e){return e.colIdx===a})):void 0}return t&&t.display_title}},{key:"getRunsetSelection",value:function(e){var t=this,n=parseInt(e.split("-")[1]);return this.props.tools.find((function(e){return e.toolIdx===n})).columns.some((function(e){return t.isColVisible(n,e.colIdx)}))||(n=Object(f.g)(this.props.tools,this.props.hiddenCols)[0]),void 0!==n?"runset-"+n:void 0}},{key:"checkForScoreBasedPlot",value:function(){var e=this;this.props.tools.some((function(t){return t.scoreBased&&e.isToolVisible(t)}))&&(this.plotOptions=Object(r.a)({scoreBased:"Score-based Quantile Plot"},this.plotOptions),this.props.tools.every((function(t){return t.scoreBased&&e.isToolVisible(t)}))&&(this.defaultValues.plot=this.plotOptions.scoreBased))}},{key:"componentDidMount",value:function(){window.addEventListener("resize",this.updateDimensions),window.addEventListener("popstate",this.refreshUrlState)}},{key:"componentWillUnmount",value:function(){window.removeEventListener("resize",this.updateDimensions),window.removeEventListener("popstate",this.refreshUrlState)}},{key:"setPossibleValues",value:function(){var e=this;this.props.tools.forEach((function(t){t.columns.forEach((function(n){e.isColVisible(t.toolIdx,n.colIdx)&&!e.possibleValues.some((function(e){return e.display_title===n.display_title}))&&e.possibleValues.push(n)}))}))}},{key:"renderAllSettings",value:function(){var e=this,t=this.state.plot===this.plotOptions.scoreBased?"Score-based Quantile Plots always show correct results offset by the score of wrong results. Any defined filters will still be applied.":"In addition to which results are selected here, any defined filters will still be applied.";return Object(b.jsxs)("div",{className:"settings-legend-container",children:[Object(b.jsx)("div",{className:"settings-container",children:Object(b.jsxs)("div",{className:"settings-border-container",children:[Object(b.jsxs)("div",{className:"settings-subcontainer flexible-width",children:[Object(b.jsxs)("div",{className:"setting flexible-width",children:[Object(b.jsx)("span",{className:"setting-label",children:"Selection:"}),Object(b.jsxs)("select",{className:"setting-select",name:"setting-Selection",value:this.state.selection,onChange:function(e){return Object(f.y)({selection:e.target.value})},children:[Object(b.jsx)("optgroup",{label:"Runsets",children:this.props.tools.map((function(t,n){var i=e.state.plot===e.plotOptions.scoreBased;return e.isToolVisible(t)?Object(b.jsx)("option",{value:"runset-"+n,name:"Runset "+n,disabled:i,className:i?"disabled":"",children:Object(f.j)(t)},"runset-"+n):null}))}),Object(b.jsx)("optgroup",{label:"Columns",children:this.renderColumns()})]})]}),Object(p.b)("Plot",this.state.plot,(function(e){return Object(f.y)({plot:e.target.value})}),this.plotOptions)]}),Object(b.jsxs)("div",{className:"settings-subcontainer",children:[Object(p.b)("Scaling",this.state.scaling,(function(e){return Object(f.y)({scaling:e.target.value})}),this.scalingOptions),Object(p.b)("Results",this.state.results,(function(e){return Object(f.y)({results:e.target.value})}),this.resultsOptions,t,this.state.isResultSelectionDisabled)]})]})}),Object(b.jsx)("div",{children:Object(b.jsx)(h.b,{colors:f.a,items:this.renderLegend(),onItemClick:function(t,n){var i;if(i=t.title.toString(),!(e.state.isInvisible.indexOf(i)<0))return e.setState({isInvisible:e.state.isInvisible.filter((function(e){return e!==i}))});e.setState({isInvisible:e.state.isInvisible.concat([i])})}})})]})}},{key:"render",value:function(){this.setPossibleValues(),this.renderAll();var e=this.props.isFlexible?h.c:h.j,t=this.props.isFlexible?{height:window.innerHeight-200}:{height:1e3,width:1500};return Object(b.jsxs)("div",{className:"quantilePlot",children:[!this.state.areAllColsHidden&&this.renderAllSettings(),Object(b.jsxs)(e,Object(r.a)(Object(r.a)({margin:{left:90},yType:this.handleType()},t),{},{children:[Object(b.jsx)(h.h,{}),Object(b.jsx)(h.e,{}),Object(b.jsx)(h.i,{tickFormat:function(e){return e}}),Object(b.jsx)(h.k,{tickFormat:function(e){return e}}),this.state.value?Object(b.jsx)(h.d,{value:this.state.value}):null,this.renderLines()]})),this.state.areAllColsHidden?Object(b.jsx)("div",{className:"plot__noresults",children:"No columns to show!"}):0===this.lineCount&&Object(b.jsx)("div",{className:"plot__noresults",children:this.hasInvalidLog?"All results have undefined values":"No correct results"})]})}}]),n}(d.a.Component)},208:function(e,t){},257:function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var i=n(76),r=n(281),s=n(274),a=n(68),l=n.n(a),o=n(104),c=n(127),u=n(125),d=n(105),h=function(e){Object(r.a)(n,e);var t=Object(s.a)(n);function n(){var e;Object(i.a)(this,n);for(var r=arguments.length,s=new Array(r),a=0;a=f&&O<=p}if(s)break}}catch(x){u.e(x)}finally{u.f()}if(!s)return!1}return!0}))}}},276:function(e,t,n){"use strict";n.d(t,"a",(function(){return I}));var i=n(275),r=n(277),s=n(89),a=n(76),l=n(77),o=n(281),c=n(274),u=n(68),d=n.n(u),h=n(84),f=n(127),p=n(125),b=n(272),j=(n(182),n(104)),m=n(105),v=Object(b.a)(b.b.Range),O=500,x=setTimeout((function(){}),O),g=function(e){Object(o.a)(n,e);var t=Object(c.a)(n);function n(e){var i;Object(a.a)(this,n),i=t.call(this,e);var r=e.filter||{values:[]},s=r.values,l=r.min,o=r.max,c=r.type,u=r.number_of_significant_digits,d=0,h=0;if("measure"===c||"number"===c){var f=new j.b(u).build();d=f(l),h=f(o);var p=s&&s[0];if(p&&p.includes(":")){var b=i.handleMinMaxValue(p,u);d=b.min,h=b.max}}return i.state={title:e.availableFilters&&e.availableFilters.length?e.availableFilters[0].title:"",values:[],idx:Object(j.u)(["availableFilters",0,"idx"],0,e),active:!0,selectedDistincts:[],sliderMin:d,sliderMax:h,numericMin:null,numericMax:null},i}return Object(l.a)(n,[{key:"sendFilterUpdate",value:function(e){var t=this.props.filter.type;0===e.length&&"status"===t?this.props.onFilterUpdate({values:[j.e],title:this.state.title||this.props.title}):this.props.onFilterUpdate({values:e,title:this.state.title||this.props.title})}},{key:"componentDidUpdate",value:function(e,t){if(this.props.filter&&(!e.filter||e.filter.values!==this.props.filter.values)){var n=this.props.filter,i=n.values,s=n.number_of_significant_digits,a=Object(r.a)(i,1)[0];if(a&&a.includes(":")){var l=this.handleMinMaxValue(a,s),o=l.min,c=l.max;this.setState({sliderMin:o,sliderMax:c,numericMin:o,numericMax:c})}}}},{key:"handleMinMaxValue",value:function(e,t){var n=new j.b(t).build(),i=this.props.filter||{min:0,max:1/0},s=i.min,a=i.max,l=e.split(":"),o=Object(r.a)(l,2),c=o[0],u=o[1];return{min:""!==c.trim()?c:n(s),max:""!==u.trim()?u:n(a)}}},{key:"handleNumberChange",value:function(e,t){var n,i,r={};if(r.sliderMin=Number(null!==(n=this.state.numericMin)&&void 0!==n?n:this.state.sliderMin),r.sliderMax=Number(null!==(i=this.state.numericMax)&&void 0!==i?i:this.state.sliderMax),r.sliderMin>r.sliderMax){var s=r.sliderMax;r.sliderMax=r.sliderMin,r.sliderMin=s}var a=r.sliderMin<=Number(e)?"":r.sliderMin,l=r.sliderMax>=Number(t)?"":r.sliderMax;r.values=["".concat(a,":").concat(l)],this.setState(r),this.sendFilterUpdate(r.values)}},{key:"render",value:function(){var e=this,t=this.props,n=t.filter,s=t.editable,a=t.availableFilters,l=d.a.createRef();return Object(m.jsxs)("div",{className:"filter-card",children:[function(t,i){return Object(m.jsx)("div",{className:"filter-card--header",children:i?Object(m.jsxs)(m.Fragment,{children:[Object(m.jsx)("span",{style:{marginLeft:"12px"},children:"Add filter for: "}),Object(m.jsxs)("select",{className:"filter-selection",defaultValue:"-1",ref:l,onChange:function(t){var n=t.target.value;-1!==n&&(e.setState({idx:-1,active:!0}),l.current.value="-1",e.props.addFilter(n))},children:[Object(m.jsx)("option",{value:"-1",disabled:!0,children:"Column"}),a.map((function(e){var t=e.idx,n=e.display_title;return Object(m.jsx)("option",{value:t,children:n},t)}))]})]}):Object(m.jsxs)(m.Fragment,{children:[Object(m.jsx)("h4",{className:"title",children:"".concat(n.display_title," ").concat(n.unit?"("+n.unit+")":"")}),Object(m.jsx)(p.a,{className:"delete-button",icon:f.f,onClick:function(){e.props.removeFilter()}})]})})}(this.props.name,s),function(t){if(!t)return null;var n,s=t.title,a=t.type,l=t.number_of_significant_digits,o=t.categories,c=t.statuses,u=t.values,h=void 0===u?[]:u,f=t.min,p=t.max;if("status"===a)n=Object(m.jsxs)(m.Fragment,{children:["Category",Object(m.jsx)("ul",{className:"filter-card--body--list",children:o.map((function(t){var n=d.a.createRef();return Object(m.jsxs)("li",{children:[Object(m.jsx)("input",{type:"checkbox",name:"cat-".concat(t),checked:h.includes(t),ref:n,onChange:function(n){if(n.target.checked){var r=[].concat(Object(i.a)(h),[t]);e.setState({values:r}),e.sendFilterUpdate(r)}else{var s=Object(j.A)(t,h);e.setState({values:s}),e.sendFilterUpdate(s)}}}),Object(m.jsx)("label",{htmlFor:"cat-".concat(t),onClick:function(){return n.current.click()},children:t})]},t)}))}),"Status",Object(m.jsx)("ul",{className:"filter-card--body--list",children:c.map((function(t){var n=d.a.createRef();return Object(m.jsxs)("li",{children:[Object(m.jsx)("input",{type:"checkbox",name:"stat-".concat(t),ref:n,checked:h.includes(t),onChange:function(n){if(n.target.checked){var r=[].concat(Object(i.a)(h),[t]);e.setState({values:r}),e.sendFilterUpdate(r)}else{var s=Object(j.A)(t,h);e.setState({values:s}),e.sendFilterUpdate(s)}}}),Object(m.jsx)("label",{htmlFor:"stat-".concat(t),onClick:function(){return n.current.click()},children:t})]},t)}))})]});else if("text"===a){var b=Object(r.a)(h,1)[0];n=Object(m.jsx)("input",{type:"text",name:"text-".concat(s),placeholder:"Search for value",value:b,onChange:function(t){var n=t.target.value;clearTimeout(x),e.setState({values:[n]}),x=setTimeout((function(){e.sendFilterUpdate([n])}),O)}})}else{var g=new j.b(l).build();f=g(f),p=g(p);var y=Object(j.k)(f),k=Object(j.k)(p),C=y.length>k.length?y:k;n=Object(m.jsxs)(m.Fragment,{children:[Object(m.jsxs)("div",{className:"filter-card--range-container",children:[Object(m.jsx)("b",{children:f}),Object(m.jsx)("b",{children:p})]}),Object(m.jsx)(v,{min:Number(f),max:Number(p),step:C,defaultValue:[Number(f),Number(p)],value:[Number(e.state.sliderMin),Number(e.state.sliderMax)],onChange:function(t){var n=Object(r.a)(t,2),i=n[0],s=n[1];e.setState({sliderMin:g(i),sliderMax:g(s)})},onAfterChange:function(t){var n=Object(r.a)(t,2),i=n[0],s=n[1],a=g(i),l=g(s),o=a===f?"":a,c=l===p?"":l;e.setState({sliderMin:a,sliderMax:l,numericMin:i,numericMax:s,values:["".concat(o,":").concat(c)]}),e.sendFilterUpdate(["".concat(o,":").concat(c)])}}),Object(m.jsxs)("div",{className:"filter-card--range-input-fields",children:[Object(m.jsx)("label",{className:"range-input-fields--min",htmlFor:"inp-".concat(s,"-min"),children:"minimum"}),Object(m.jsx)("label",{className:"range-input-fields--max",htmlFor:"inp-".concat(s,"-max"),children:"maximum"}),Object(m.jsx)("input",{type:"number",name:"inp-".concat(s,"-min"),value:null!==e.state.numericMin?e.state.numericMin:e.state.sliderMin,lang:"en-US",step:C,onChange:function(t){var n=t.target.value;e.numericMinTimeout&&clearTimeout(e.numericMinTimeout),e.setState({numericMin:n}),e.numericMinTimeout=setTimeout((function(){return e.handleNumberChange(f,p)}),O)}}),Object(m.jsx)("input",{type:"number",name:"inp-".concat(s,"-max"),step:C,lang:"en-US",value:null!==e.state.numericMax?e.state.numericMax:e.state.sliderMax,onChange:function(t){var n=t.target.value;e.numericMaxTimeout&&clearTimeout(e.numericMaxTimeout),e.setState({numericMax:n}),e.numericMaxTimeout=setTimeout((function(){return e.handleNumberChange(f,p)}),O)}})]})]})}return Object(m.jsx)("div",{className:"filter-card--body",children:n})}(this.props.filter)]})}}]),n}(d.a.PureComponent),y=n(183),k=n.n(y),C=function(e){Object(o.a)(n,e);var t=Object(c.a)(n);function n(e){var i;Object(a.a)(this,n),i=t.call(this,e);var r=e.filters,s=e.toolName,l=e.currentFilters;for(var o in l)r[o]=Object(h.a)(Object(h.a)(Object(h.a)({},r[o]),l[o]),{},{touched:r[o].touched+1,filtering:!0});return i.props.resetFilterHook((function(){return i.resetAllFilters()})),i.state={filters:r,toolName:s,addingFilter:!1,numCards:0},i}return Object(l.a)(n,[{key:"getActiveFilters",value:function(){return this.state.filters.filter((function(e){return e.filtering})).sort((function(e,t){return e.numCards-t.numCards}))}},{key:"setFilter",value:function(e,t){var n=e.title,r=e.values,s=e.filtering,a=void 0===s||s,l=this.state.filters;l[t].values=r,l[t].filtering=a,l[t].touched+=1,this.setState({filters:Object(i.a)(l)}),this.props.updateFilters({title:n,values:r},t)}},{key:"addFilter",value:function(e){var t=this.state,n=t.filters,r=t.numCards,s={filtering:!0,numCards:r,touched:0};"status"===n[e].type&&(s.values=[].concat(Object(i.a)(n[e].categories),Object(i.a)(n[e].statuses))),n[e]=Object(h.a)(Object(h.a)({},n[e]),s),this.setState({filters:n,addingFilter:!1,numCards:r+1})}},{key:"resetAllFilters",value:function(){var e=this.state.filters.filter((function(e){return e.filtering})),t=this.state.filters.map((function(e){return Object(h.a)(Object(h.a)({},e),{},{filtering:!1,values:[]})}));this.setState({filters:Object(i.a)(t)});var n,r=Object(s.a)(e);try{for(r.s();!(n=r.n()).done;){var a=n.value;a.values&&this.props.updateFilters({title:a.display_title,values:[]},a.idx)}}catch(l){r.e(l)}finally{r.f()}}},{key:"removeFilter",value:function(e,t){var n=this.state.filters;n[e].filtering=!1,n[e].values=[],this.setState({filters:Object(i.a)(n)}),this.props.updateFilters({title:t,values:[]},e)}},{key:"componentDidUpdate",value:function(e){var t=e.currentFilters,n=this.props.currentFilters;if(!k()(t,n)){var r=this.state.filters;for(var s in n)r[s]=Object(h.a)(Object(h.a)(Object(h.a)({},r[s]),n[s]),{},{touched:r[s].touched+1,filtering:!0});r=r.map((function(e,t){var i=!(!n[t]&&0!==e.touched);return Object(h.a)(Object(h.a)({},e),{},{filtering:i,values:i?e.values:[]})})),this.setState({filters:Object(i.a)(r)})}}},{key:"render",value:function(){var e=this,t=this.getActiveFilters(),n=this.props.hiddenCols||[],i=this.state.filters.filter((function(e,t){return!e.filtering&&!n.includes(t)}));return Object(m.jsxs)("div",{className:"filterBox--container",children:[Object(m.jsx)("h4",{className:"section-header",children:this.state.toolName}),t.length>0&&t.map((function(t,n){return Object(m.jsx)(g,{onFilterUpdate:function(n){return e.setFilter(n,t.idx)},title:t.display_title,removeFilter:function(){return e.removeFilter(t.idx,t.display_title)},filter:t},"".concat(e.props.toolName,"-").concat(t.display_title,"-").concat(t.numCards))})),i.length&&Object(m.jsx)(g,{availableFilters:i,editable:"true",style:{marginBottom:20},addFilter:function(t){return e.addFilter(t)},onFilterUpdate:function(t){return e.setFilter(t)}}),Object(m.jsx)("br",{})]})}}]),n}(d.a.PureComponent),F=n(85),w=setTimeout((function(){}),500),S=function(e){Object(o.a)(n,e);var t=Object(c.a)(n);function n(e){var i;return Object(a.a)(this,n),(i=t.call(this,e)).state={values:i.extractFilters()},e.resetFilterHook((function(){return i.resetIdFilters()})),i}return Object(l.a)(n,[{key:"resetIdFilters",value:function(){this.setState({values:{}}),this.sendFilterUpdate({})}},{key:"sendFilterUpdate",value:function(e){this.props.updateFilters(e)}},{key:"extractFilters",value:function(){for(var e=0,t={},n=0,i=Object.keys(this.props.ids);n",fileTag:"",content:i.props.yamlText},i}return Object(l.a)(n,[{key:"componentDidMount",value:function(){this.prepareTextForRendering()}},{key:"componentDidUpdate",value:function(e){e.yamlText!==this.props.yamlText&&this.prepareTextForRendering()}},{key:"render",value:function(){var e=this,t=this.state.content.split(this.state.splitterTag).map((function(t){return t.match("^".concat(e.state.fileTag,"(?:.)+").concat(e.state.fileTag,"$"))?(t=t.replace(new RegExp(e.state.fileTag,"g"),""),Object(k.jsx)("a",{onClick:function(n){return e.loadFileInViewer(n,t)},className:"link-overlay-file-link",href:e.props.createHref(t),children:t},t)):t}));return Object(k.jsx)("pre",{className:"link-overlay-text",children:t})}}]),n}(d.a.Component),F=n(230);F.configure({useWebWorkers:!1});var w={},S=function(e){Object(o.a)(n,e);var t=Object(c.a)(n);function n(e){var i;Object(a.a)(this,n),(i=t.call(this,e)).loadNewFile=function(e){var t=i.createFileUrl(e);i.setState({isYAML:i.isYAMLFile(e),isSecondLevel:!0,content:"loading file: ".concat(t)}),i.loadFile(t)},i.loadOriginalFile=function(){i.setState({isYAML:i.isYAMLFile(i.props.link),isSecondLevel:!1,content:"loading file: ".concat(i.props.link),error:void 0}),i.loadFile(i.props.link)},i.loadOriginalFileIfEnter=function(e){"Enter"===e.key&&i.loadOriginalFile()},i.createFileUrl=function(e){return x.a.join(i.props.link,"../"+e)},i.loadFileFromZip=function(e){var t=decodeURIComponent(e),n=t.lastIndexOf("/")>t.lastIndexOf("\\")?"/":"\\",r=t.lastIndexOf(n),s=t.substring(0,r)+".zip",a=t.split(n),l="".concat(a[a.length-2],"/").concat(a[a.length-1]);s in w?i.loadFileFromZipEntries(w[s],l,s):i.readZipArchive(s,l)},i.readZipArchive=function(e,t){new F.ZipReader(new F.HttpRangeReader(e)).getEntries().then((function(n){i.handleZipEntries(n,t,e)}),(function(n){n.message===F.ERR_HTTP_RANGE?i.readZipArchiveNoHttpRange(e,t):i.setError('HTTP request for the file "'.concat(t,'" failed'),n)}))},i.readZipArchiveNoHttpRange=function(e,t){new F.ZipReader(new F.HttpReader(e)).getEntries().then((function(n){i.handleZipEntries(n,t,e)}),(function(n){i.readZipArchiveManually(e,t)}))},i.readZipArchiveManually=function(e,t){try{var n=new XMLHttpRequest;n.responseType="arraybuffer",n.addEventListener("load",(function(){var r=new Uint8Array(n.response);new F.ZipReader(new F.Uint8ArrayReader(r)).getEntries().then((function(n){return i.handleZipEntries(n,t,e)}),i.setError)}),!1),n.addEventListener("error",i.setError,!1),n.open("GET",e),n.send()}catch(r){i.setError('HTTP request for the file "'.concat(t,'" failed'),r)}},i.handleZipEntries=function(e,t,n){w[n]=e,i.loadFileFromZipEntries(e,t,n)},i.loadFileFromZipEntries=function(e,t,n){var r=e.find((function(e){return e.filename===t}));r?r.getData(new F.TextWriter).then((function(e){i.setState({content:e})})):i.setError('Could not find the file "'.concat(t,'" in "').concat(n,'"'))},i.setError=function(e,t){var n=t&&"string"===typeof t?t:e;i.setState({error:"".concat(n)})},i.handlePopState=function(){window.history.back(),window.addEventListener("click",i.props.close,!1)};var r=!!e.link&&i.isYAMLFile(e.link);return i.state={isYAML:r,content:"loading file: ".concat(e.link),currentFile:e.link,isSecondLevel:!1},i}return Object(l.a)(n,[{key:"componentDidMount",value:function(){this.loadFile(this.props.link),window.history.pushState({},"",""),window.addEventListener("popstate",this.props.close,!1)}},{key:"componentDidUpdate",value:function(){var e=document.getElementById("modal-container");e&&e.focus()}},{key:"componentWillUnmount",value:function(){window.removeEventListener("popstate",this.props.close,!1),window.removeEventListener("click",this.props.close,!1)}},{key:"isYAMLFile",value:function(e){return e.endsWith(".yml")}},{key:"loadFile",value:function(){var e=Object(s.a)(r.a.mark((function e(t){var n,i;return r.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!t){e.next=19;break}return this.setState({currentFile:t}),e.prev=2,e.next=5,fetch(t);case 5:if(n=e.sent,!Object(j.p)(n.status)){e.next=13;break}return e.next=9,n.text();case 9:i=e.sent,this.setState({content:i}),e.next=14;break;case 13:throw Error("Received response status ".concat(n.status));case 14:e.next=19;break;case 16:e.prev=16,e.t0=e.catch(2),this.loadFileFromZip(t);case 19:case"end":return e.stop()}}),e,this,[[2,16]])})));return function(t){return e.apply(this,arguments)}}()},{key:"render",value:function(){var e=this;return f.a.setAppElement(document.getElementById("root")),Object(k.jsxs)(f.a,{id:"modal-container",ariaHideApp:!1,className:v()("overlay",{"second-level":this.state.isSecondLevel}),isOpen:!0,onRequestClose:function(){return e.handlePopState()},children:[Object(k.jsxs)("div",{className:"link-overlay-header-container",children:[Object(k.jsx)(p.a,{icon:b.e,onClick:function(){return e.handlePopState()},className:"closing"}),this.state.isSecondLevel?Object(k.jsxs)("span",{className:"link-overlay-back-button",tabIndex:"0",role:"button",onClick:this.loadOriginalFile,onKeyDown:this.loadOriginalFileIfEnter,children:[Object(k.jsx)(p.a,{className:"link-overlay-back-icon",icon:b.a}),"Back to task definition"]}):""]}),this.state.error?Object(k.jsxs)("div",{className:"link-overlay-text",children:[Object(k.jsxs)("p",{style:{marginTop:"0"},children:["Error while loading content (",this.state.error,")."]}),Object(k.jsxs)("p",{children:["This could be a problem of the"," ",Object(k.jsx)("a",{href:"https://en.wikipedia.org/wiki/Same-origin_policy",children:"same-origin policy"})," ","of your browser."]}),0===window.location.href.indexOf("file://")?Object(k.jsxs)(k.Fragment,{children:[Object(k.jsxs)("p",{children:["If you are using Chrome or a Chrome-based browser, try launching it with the command-line option"," ",Object(k.jsx)("code",{children:"--allow-file-access-from-files"}),"."]}),Object(k.jsxs)("p",{children:["If you are using Firefox, please open the extended settings by entering ",Object(k.jsx)("code",{children:"about:config"})," in the URL bar, search for"," ",Object(k.jsx)("code",{children:"privacy.file_unique_origin"})," and set this option to"," ",Object(k.jsx)("code",{children:"false"})," by double-clicking on it (",Object(k.jsx)("a",{href:"https://developer.mozilla.org/docs/Web/HTTP/CORS/Errors/CORSRequestNotHttp",children:"more details"}),"). Access to files that are not beneath the same directory as this HTML page is still forbidden."]})]}):null,Object(k.jsxs)("p",{children:["You can try to download the file:"," ",Object(k.jsx)("a",{href:this.state.currentFile,children:this.state.currentFile})]})]}):this.state.isYAML?Object(k.jsx)(C,{yamlText:this.state.content,createHref:this.createFileUrl,loadNewFile:this.loadNewFile}):Object(k.jsx)("pre",{className:"link-overlay-text",children:this.state.content})]})}}]),n}(d.a.Component)},75:function(e,t,n){},78:function(e,t,n){},79:function(e,t,n){"use strict";(function(e,i){n.d(t,"a",(function(){return A}));var r=n(84),s=n(275),a=n(76),l=n(77),o=n(281),c=n(274),u=n(68),d=n.n(u),h=n(259),f=n(262),p=n(88),b=n(107),j=n(108),m=n(110),v=n(128),O=n(172),x=n(276),g=n(282),y=n(90),k=n.n(y),C=n(257),F=n(104),w=n(258),S=n(125),N=n(127),I=n(183),T=n.n(I),_=n(105),M=[{key:"summary",title:"Summary",path:"/"},{key:"table",title:"Table",path:"/table"},{key:"quantile",title:"Quantile Plot",path:"/quantile"},{key:"scatter",title:"Scatter Plot",path:"/scatter"},{key:"info",title:"Info",path:"/info",icon:Object(_.jsx)(S.a,{icon:N.d})}],V=function(){return(M.find((function(e){return e.path===document.location.hash.split("?")[0].substr(1)}))||{key:"summary"}).key},A=function(t){Object(o.a)(u,t);var n=Object(c.a)(u);function u(t){var l;Object(a.a)(this,u),(l=n.call(this,t)).getFiltersFromUrl=function(){var e=l.filterUrlRetriever()||[];return T()(l.lastFiltered,e)?null:e},l.updateFiltersFromUrl=function(){var e=l.getFiltersFromUrl();e&&(l.filteredData=l.runFilter(e),l.setState({table:l.filteredData,filtered:e}),l.lastFiltered=e)},l.updateState=function(){return l.setState({active:V(),hiddenCols:Object(F.c)(l.state.tools)})},l.toggleSelectColumns=function(e){e.stopPropagation(),l.setState((function(e){return{showSelectColumns:!e.showSelectColumns}}))},l.toggleLinkOverlay=function(e,t){e.preventDefault(),l.setState((function(e){return{showLinkOverlay:!e.showLinkOverlay,link:t}}))},l.setFilter=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];l.filteredData=t?e:e.map((function(e){return e._original}))},l.filterPlotData=function(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];l.lastImmediate&&e(l.lastImmediate),l.lastImmediate=i((function(){l.filterUrlSetter(t,{history:l.routerRef.current.history}),l.lastFiltered=t.filter((function(e){return e.values&&e.values.length>0||e.value}))})),n&&l.setFilter(l.runFilter(t),!0),l.setState({table:l.filteredData,filtered:t})},l.resetFilters=function(){l.setState({table:l.originalTable,filtered:[]})},l.findAllValuesOfColumn=function(e,t){return l.originalTools.map((function(n,i){return n.columns.map((function(r,a){if(e(n,r)){var o=l.originalTable.map((function(e){return t(e.results[i],e.results[i].values[a])})).filter(Boolean);return Object(s.a)(new Set(o)).sort()}}))}))},l.getRowName=function(e){return e.id.filter((function(e){return e})).join(" | ")},l.getRelevantUrlParams=function(){return(document.location.href.split("?")[1]||"").split("&").filter((function(e){return e.startsWith("hidden")||e.startsWith("filter")})).join("&")},l.switchToQuantile=function(e){l.setState({quantilePreSelection:e});var t=l.getRelevantUrlParams();document.location.hash="#/quantile"+(t?"?"+t:"")};var o=Object(F.v)(t.data),c=o.tableHeader,h=o.taskIdNames,f=o.tools,p=o.columns,b=o.table,j=o.stats,m=o.initial;m&&!document.location.href.includes("#")&&Object(F.w)(m);var v=Object(w.c)(l.props.data);l.originalTable=b,l.originalTools=f,l.taskIdNames=h,l.columns=p,l.stats=j,l.tableHeader=c,l.filteredData=[],l.routerRef=d.a.createRef(),l.state={tools:f,table:b,filterable:v,showSelectColumns:!1,showLinkOverlay:!1,filtered:[],filterBoxVisible:!1,active:V(),quantilePreSelection:f[0].columns[1],hiddenCols:Object(F.c)(f)},l.statusValues=l.findAllValuesOfColumn((function(e,t){return"status"===t.type}),(function(e,t){return Object(F.i)(t)})),l.categoryValues=l.findAllValuesOfColumn((function(e,t){return"status"===t.type}),(function(e,t){return e.category}));var O=l.categoryValues.map((function(e){return e&&e.map((function(e){return e&&e.map((function(e){return"".concat(e," ")}))}))}));l.filterUrlSetter=Object(F.r)(l.statusValues,O),l.filterUrlRetriever=Object(F.q)(l.statusValues,O);var x=l.getFiltersFromUrl();return x&&(l.filteredData=l.runFilter(x),l.lastFiltered=x,l.state=Object(r.a)(Object(r.a)({},l.state),{},{table:l.filteredData,filtered:x})),l}return Object(l.a)(u,[{key:"componentDidMount",value:function(){var e=this;this.removeHistoryListener=this.routerRef.current.history.listen((function(t,n){e.updateState(),"POP"===n&&e.updateFiltersFromUrl()}))}},{key:"componentWillUnmount",value:function(){this.removeHistoryListener()}},{key:"runFilter",value:function(e){var t=Object(w.b)(e);return Object(w.a)(t)(this.originalTable)}},{key:"render",value:function(){var e=this,t=function(t){var n=t.className,i=t.isReset,r=void 0!==i&&i,s=t.onClick,a=t.enabled;return Object(_.jsx)(C.a,{className:n,showFilterText:r,onClick:s,enabled:a,isFiltered:!!e.state.filtered.length,resetFilters:e.resetFilters,filteredCount:e.state.table.length,totalCount:e.originalTable.length})},n=this.getRelevantUrlParams();return Object(_.jsx)(h.a,{ref:this.routerRef,children:Object(_.jsxs)("div",{className:"overview",children:[Object(_.jsxs)("div",{className:"overview-container",children:[Object(_.jsx)(x.a,{headerComponent:t({className:"filterBox--header--reset",isReset:!0,enabled:!1}),tableHeader:this.tableHeader,tools:this.state.tools,selectColumn:this.toggleSelectColumns,filterable:this.state.filterable,setFilter:this.filterPlotData,resetFilters:this.resetFilters,filtered:this.state.filtered,visible:this.state.filterBoxVisible,hiddenCols:this.state.hiddenCols,hide:function(){e.setState({filterBoxVisible:!1})},ids:Object(F.l)(this.originalTable,this.taskIdNames)}),Object(_.jsxs)("div",{className:"menu",children:[M.map((function(t){var i=t.key,r=t.title,s=t.path,a=t.icon;return Object(_.jsxs)(h.b,{className:k()("menu-item",{selected:e.state.active===i}),to:s+(n?"?"+n:""),onClick:function(){return e.setState((function(){return{active:i}}))},children:[r," ",a||""]},s)})),t({className:"reset tooltip",enabled:!0,onClick:function(){e.setState({filterBoxVisible:!0})}})]}),Object(_.jsx)("div",{className:"route-container",children:Object(_.jsxs)(f.c,{children:[Object(_.jsx)(f.a,{exact:!0,path:"/",children:Object(_.jsx)(b.a,{tools:this.state.tools,tableHeader:this.tableHeader,version:this.props.data.version,selectColumn:this.toggleSelectColumns,stats:this.stats,switchToQuantile:this.switchToQuantile,hiddenCols:this.state.hiddenCols})}),Object(_.jsx)(f.a,{path:"/table",children:Object(_.jsx)(p.a,{tableHeader:this.tableHeader,data:this.state.table,tools:this.state.tools,selectColumn:this.toggleSelectColumns,setFilter:this.setFilter,filterPlotData:this.filterPlotData,filtered:this.state.filtered,toggleLinkOverlay:this.toggleLinkOverlay,statusValues:this.statusValues,categoryValues:this.categoryValues,hiddenCols:this.state.hiddenCols})}),Object(_.jsx)(f.a,{path:"/quantile",children:Object(_.jsx)(O.a,{table:this.state.table,tools:this.state.tools,preSelection:this.state.quantilePreSelection,getRowName:this.getRowName,hiddenCols:this.state.hiddenCols,isFlexible:this.props.renderPlotsFlexible})}),Object(_.jsx)(f.a,{path:"/scatter",children:Object(_.jsx)(v.a,{table:this.state.table,columns:this.columns,tools:this.state.tools,getRowName:this.getRowName,hiddenCols:this.state.hiddenCols,isFlexible:this.props.renderPlotsFlexible})}),Object(_.jsx)(f.a,{path:"/info",children:Object(_.jsx)(j.a,{version:this.props.data.version,selectColumn:this.toggleSelectColumns})})]})})]}),Object(_.jsxs)("div",{children:[this.state.showSelectColumns&&Object(_.jsx)(m.a,{close:this.toggleSelectColumns,currColumns:this.columns,tableHeader:this.tableHeader,tools:this.state.tools,hiddenCols:this.state.hiddenCols,history:this.routerRef.current.history}),this.state.showLinkOverlay&&Object(_.jsx)(g.a,{close:this.toggleLinkOverlay,link:this.state.link,toggleLinkOverlay:this.toggleLinkOverlay})]})]})})}}]),u}(d.a.Component)}).call(this,n(80).clearImmediate,n(80).setImmediate)},88:function(e,t,n){"use strict";var i,r=n(84),s=n(275),a=n(89),l=n(277),o=n(85),c=n(68),u=n(273),d=(n(96),n(97)),h=n.n(d),f=(n(102),n(103)),p=n(104),b=n(105),j=(i={},Object(o.a)(i,"empty","Empty rows"),Object(o.a)(i,"aborted","\u2014"),i),m=h()(u.a),v=function(e){var t=Object(c.useState)(!0),n=Object(l.a)(t,2),i=n[0],o=n[1],u=Object(c.useState)({}),d=Object(l.a)(u,2),h=d[0],v=d[1],O=Object(c.useState)(!1),x=Object(l.a)(O,2),g=x[0],y=x[1],k=Object(c.useState)(),C=Object(l.a)(k,2),F=C[0],w=C[1],S=Object(c.useState)(250),N=Object(l.a)(S,2),I=N[0],T=N[1];function _(e){var t,n,i=e.column.id+"_filter",r=e.filter?e.filter.value:e.filter,s="id"===e.column.id&&g?"To edit, please clear task filter in the sidebar":"text";return Object(b.jsx)("input",{id:i,placeholder:e.numeric?"Min:Max":s,defaultValue:t||r,onChange:function(r){t=r.target.value,clearTimeout(n),n=setTimeout((function(){e.onChange(t),document.getElementById(i).focus()}),500)},disabled:"id"===e.column.id&&g,type:"search",pattern:e.numeric?"([+-]?[0-9]*(\\.[0-9]*)?)(:[+-]?[0-9]*(\\.[0-9]*)?)?":void 0})}Object(c.useEffect)((function(){var t,n=e.filtered,i={},r=Object(a.a)(n);try{for(r.s();!(t=r.n()).done;){var s=t.value,o=s.value,c=s.values,u=s.id;"id"===u&&(Object(p.n)(c)?y(!1):y(!0));var d=u.split("_"),h=Object(l.a)(d,3),f=h[0],b=h[2],j=i[f]||{};if("string"===typeof o&&" "===o[o.length-1]){var m=j.categories||[];m.push(o),j.categories=m}else{var O=j[b]||[];O.push(o),j[b]=O}i[f]=j}}catch(k){r.e(k)}finally{r.f()}v(i);var x=function(){var e=Object(p.h)();return e.sort?e.sort.split(";").map((function(e){var t=e.split(",");return{id:t[0],desc:"desc"===t[1]}})):[]}();w(x);var g=parseInt(Object(p.h)().pageSize)||250;T(g)}),[e]);var M=function(e){var t=e.target.checked;o(t)},V=function(t,n,i){return{id:"".concat(t,"_").concat(n.display_title,"_").concat(i),Header:Object(b.jsx)(f.c,{column:n}),show:!e.hiddenCols[t].includes(n.colIdx),minWidth:Object(p.d)(n,10),accessor:function(e){return e.results[t].values[i]},Cell:function(n){var i,r=n.original.results[t].category,s=n.original.results[t].href;return"aborted"===r?(s=void 0,i="Result missing because run was aborted or not executed"):"empty"===r?i="Result missing because task was not part of benchmark set":s&&(i="Click here to show output of tool"),Object(b.jsx)(f.b,{cell:n,href:s,className:r,toggleLinkOverlay:e.toggleLinkOverlay,title:i,force:!0})},sortMethod:p.z,filterMethod:function(e,t){return!0},Filter:function(n){n.filter;var r=n.onChange,a=e.categoryValues[t][i],l=function(e){var t=e.categoryFilters,n=e.statusFilters,i=e.categoryFilterValues,r=e.statusFilterValues,a=[];return Object(p.m)(t,i)||(a=t),Object(p.m)(n,r)||(a=[].concat(Object(s.a)(a),Object(s.a)(n))),a}({categoryFilters:Object(p.u)([t,"categories"],[],h),statusFilters:Object(p.u)([t,i],[],h),categoryFilterValues:a.map((function(e){return"".concat(e," ")})),statusFilterValues:e.statusValues[t][i]}),o=l.length>1||l[0]===p.e,c=0===l.length,u=l&&l[0],d=o?"multiple":u;return Object(b.jsxs)("select",{onChange:function(e){return r(e.target.value)},style:{width:"100%"},value:(c?"all ":o&&"multiple")||d,children:[o&&Object(b.jsx)("option",{value:"multiple",disabled:!0,children:l.map((function(e){return e.trim()})).filter((function(e){return"all"!==e&&e!==p.e})).join(", ")||"No filters selected"}),Object(b.jsx)("option",{value:"all ",children:"Show all"}),a.filter((function(e){return e in j})).map((function(e){return Object(b.jsx)("option",{value:e+" ",children:j[e]},e)})),Object(b.jsx)("optgroup",{label:"Category",children:a.filter((function(e){return!(e in j)})).map((function(e){return Object(b.jsx)("option",{value:e+" ",children:e},e)}))}),Object(b.jsx)("optgroup",{label:"Status",children:e.statusValues[t][i].map((function(e){return Object(b.jsx)("option",{value:e,children:e},e)}))})]})}}},A=function(t,n,i){return"status"===n.type?V(t,n,i):{id:"".concat(t,"_").concat(n.display_title,"_").concat(i),Header:Object(b.jsx)(f.c,{column:n}),show:!e.hiddenCols[t].includes(n.colIdx),minWidth:Object(p.d)(n),accessor:function(e){return e.results[t].values[i]},Cell:function(t){return Object(b.jsx)(f.b,{cell:t,toggleLinkOverlay:e.toggleLinkOverlay})},filterMethod:function(){return!0},Filter:function(e){return Object(b.jsx)(_,Object(r.a)({numeric:Object(p.o)(n)},e))},sortMethod:Object(p.o)(n)?p.s:p.z}},E=e.tools.map((function(e,t){return Object(f.d)(e,t,A)})).flat();return Object(b.jsx)("div",{className:"mainTable",children:Object(b.jsx)(m,{data:e.data,filterable:!0,filtered:e.filtered,columns:[{Header:function(){return Object(b.jsx)("div",{className:"fixed",children:Object(b.jsx)("form",{children:Object(b.jsxs)("label",{title:"Fix the first column",children:["Fixed task:",Object(b.jsx)("input",{name:"fixed",type:"checkbox",checked:i,onChange:M})]})})})},fixed:i?"left":"",columns:[{minWidth:.3*window.innerWidth,Header:Object(b.jsx)(f.c,{children:Object(b.jsx)(f.a,{handler:e.selectColumn})}),fixed:i?"left":"",accessor:"id",Cell:function(t){var n=t.value.map((function(e){return Object(b.jsx)("span",{className:"row_id",children:e},e)})),i=t.original.href;return i?Object(b.jsx)("a",{className:"row__name--cellLink",href:i,title:"Click here to show source code",onClick:function(t){return e.toggleLinkOverlay(t,i)},children:n},i):Object(b.jsx)("span",{title:"This task has no associated file",children:n})},filterMethod:function(e,t){return!0},Filter:_}]}].concat(E),defaultSorted:F,onSortedChange:function(e){var t=e.map((function(e){return e.id+","+(e.desc?"desc":"asc")})).join(";");Object(p.y)({sort:t})},defaultPageSize:250,pageSize:I,pageSizeOptions:[50,100,250,500,1e3,2500],className:"-highlight",minRows:0,onFilteredChange:function(t){var n=(t=t.filter((function(e){return e.value}))).filter((function(t){return!e.filtered.includes(t)}));t.filter((function(e){return"id"===e.id})).forEach((function(e){e.isTableTabFilter=!0}));var i=Object(s.a)(t),r=[],o=n.filter((function(e){var t=e.id;e.value;return t.includes("status")}));if(o&&o.length){var c,u=o.map((function(e){var t=e.id,n=e.value,i=t.split("_"),r=Object(l.a)(i,3);return{tool:r[0],name:r[1],column:r[2],value:n}})),d=Object(a.a)(u);try{var h=function(){var t=c.value,n=t.tool,s=t.name,l=t.column,o=t.value;if("all"===o.trim())r=function(t){var n,i=t.tool,r=t.name,s=t.column,l=[],o=Object(a.a)(e.statusValues[i][s]);try{for(o.s();!(n=o.n()).done;){var c=n.value;l.push({id:"".concat(i,"_").concat(r,"_").concat(s),value:c})}}catch(p){o.e(p)}finally{o.f()}var u,d=Object(a.a)(e.categoryValues[i][s]);try{for(d.s();!(u=d.n()).done;){var h=u.value,f="".concat(h," ");l.push({id:"".concat(i,"_").concat(r,"_").concat(s),value:f})}}catch(p){d.e(p)}finally{d.f()}return l}({tool:n,name:s,column:l}),i=i.filter((function(e){var t=e.id,i=e.value;return!(t==="".concat(n,"_").concat(s,"_").concat(l)&&"all"===i.trim())}));else{var u=" "===o[o.length-1];r=function(t){var n,i=t.tool,r=t.name,s=t.column,l=t.isCategory,o=l?e.statusValues:e.categoryValues,c=[],u=Object(a.a)(o[i][s]);try{for(u.s();!(n=u.n()).done;){var d=n.value;c.push({id:"".concat(i,"_").concat(r,"_").concat(s),value:"".concat(d).concat(l?"":" ")})}}catch(h){u.e(h)}finally{u.f()}return c}({tool:n,name:s,column:l,isCategory:u})}};for(d.s();!(c=d.n()).done;)h()}catch(f){d.e(f)}finally{d.f()}}e.filterPlotData([].concat(Object(s.a)(i),Object(s.a)(r)),!0)},onPageSizeChange:function(e){return Object(p.y)({pageSize:e})},children:function(e,t){return t()}})})},O=Object(c.memo)(v);t.a=O}}); \ No newline at end of file diff --git a/benchexec/tablegenerator/react-table/build/vendors.min.css b/benchexec/tablegenerator/react-table/build/vendors.min.css index c59cd3df3..59548a09f 100644 --- a/benchexec/tablegenerator/react-table/build/vendors.min.css +++ b/benchexec/tablegenerator/react-table/build/vendors.min.css @@ -1 +1 @@ -.ReactTable{position:relative;display:flex;flex-direction:column;border:1px solid rgba(0,0,0,.1)}.ReactTable *{box-sizing:border-box}.ReactTable .rt-table{flex:auto 1;display:flex;flex-direction:column;align-items:stretch;width:100%;border-collapse:collapse;overflow:auto}.ReactTable .rt-thead{flex:1 0 auto;display:flex;flex-direction:column;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ReactTable .rt-thead.-headerGroups{background:rgba(0,0,0,.03)}.ReactTable .rt-thead.-filters,.ReactTable .rt-thead.-headerGroups{border-bottom:1px solid rgba(0,0,0,.05)}.ReactTable .rt-thead.-filters input,.ReactTable .rt-thead.-filters select{border:1px solid rgba(0,0,0,.1);background:#fff;padding:5px 7px;font-size:inherit;border-radius:3px;font-weight:400;outline-width:0}.ReactTable .rt-thead.-filters .rt-th{border-right:1px solid rgba(0,0,0,.02)}.ReactTable .rt-thead.-header{box-shadow:0 2px 15px 0 rgba(0,0,0,.15)}.ReactTable .rt-thead .rt-tr{text-align:center}.ReactTable .rt-thead .rt-td,.ReactTable .rt-thead .rt-th{padding:5px;line-height:normal;position:relative;border-right:1px solid rgba(0,0,0,.05);transition:box-shadow .3s cubic-bezier(.175,.885,.32,1.275);box-shadow:inset 0 0 0 0 transparent}.ReactTable .rt-thead .rt-td.-sort-asc,.ReactTable .rt-thead .rt-th.-sort-asc{box-shadow:inset 0 3px 0 0 rgba(0,0,0,.6)}.ReactTable .rt-thead .rt-td.-sort-desc,.ReactTable .rt-thead .rt-th.-sort-desc{box-shadow:inset 0 -3px 0 0 rgba(0,0,0,.6)}.ReactTable .rt-thead .rt-td.-cursor-pointer,.ReactTable .rt-thead .rt-th.-cursor-pointer{cursor:pointer}.ReactTable .rt-thead .rt-td:last-child,.ReactTable .rt-thead .rt-th:last-child{border-right:0}.ReactTable .rt-thead .rt-th:focus{outline-width:0}.ReactTable .rt-thead .rt-resizable-header{overflow:visible}.ReactTable .rt-thead .rt-resizable-header:last-child{overflow:hidden}.ReactTable .rt-thead .rt-resizable-header-content{overflow:hidden;text-overflow:ellipsis}.ReactTable .rt-thead .rt-header-pivot{border-right-color:#f7f7f7}.ReactTable .rt-thead .rt-header-pivot:after,.ReactTable .rt-thead .rt-header-pivot:before{left:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.ReactTable .rt-thead .rt-header-pivot:after{border-color:hsla(0,0%,100%,0) hsla(0,0%,100%,0) hsla(0,0%,100%,0) #fff;border-width:8px;margin-top:-8px}.ReactTable .rt-thead .rt-header-pivot:before{border-color:hsla(0,0%,40%,0) hsla(0,0%,40%,0) hsla(0,0%,40%,0) #f7f7f7;border-width:10px;margin-top:-10px}.ReactTable .rt-tbody{flex:99999 1 auto;display:flex;flex-direction:column;overflow:auto}.ReactTable .rt-tbody .rt-tr-group{border-bottom:1px solid rgba(0,0,0,.05)}.ReactTable .rt-tbody .rt-tr-group:last-child{border-bottom:0}.ReactTable .rt-tbody .rt-td{border-right:1px solid rgba(0,0,0,.02)}.ReactTable .rt-tbody .rt-td:last-child{border-right:0}.ReactTable .rt-tbody .rt-expandable{cursor:pointer;text-overflow:clip}.ReactTable .rt-tr-group{flex:1 0 auto;display:flex;flex-direction:column;align-items:stretch}.ReactTable .rt-tr{flex:1 0 auto;display:inline-flex}.ReactTable .rt-td,.ReactTable .rt-th{flex:1 0;white-space:nowrap;text-overflow:ellipsis;padding:7px 5px;overflow:hidden;transition:.3s ease;transition-property:width,min-width,padding,opacity}.ReactTable .rt-td.-hidden,.ReactTable .rt-th.-hidden{width:0!important;min-width:0!important;padding:0!important;border:0!important;opacity:0!important}.ReactTable .rt-expander{display:inline-block;position:relative;color:transparent;margin:0 10px}.ReactTable .rt-expander:after{content:"";position:absolute;width:0;height:0;top:50%;left:50%;transform:translate(-50%,-50%) rotate(-90deg);border-left:5.04px solid transparent;border-right:5.04px solid transparent;border-top:7px solid rgba(0,0,0,.8);transition:all .3s cubic-bezier(.175,.885,.32,1.275);cursor:pointer}.ReactTable .rt-expander.-open:after{transform:translate(-50%,-50%) rotate(0)}.ReactTable .rt-resizer{display:inline-block;position:absolute;width:36px;top:0;bottom:0;right:-18px;cursor:col-resize;z-index:10}.ReactTable .rt-tfoot{flex:1 0 auto;display:flex;flex-direction:column;box-shadow:0 0 15px 0 rgba(0,0,0,.15)}.ReactTable .rt-tfoot .rt-td{border-right:1px solid rgba(0,0,0,.05)}.ReactTable .rt-tfoot .rt-td:last-child{border-right:0}.ReactTable.-striped .rt-tr.-odd{background:rgba(0,0,0,.03)}.ReactTable.-highlight .rt-tbody .rt-tr:not(.-padRow):hover{background:rgba(0,0,0,.05)}.ReactTable .-pagination{z-index:1;display:flex;justify-content:space-between;align-items:stretch;flex-wrap:wrap;padding:3px;box-shadow:0 0 15px 0 rgba(0,0,0,.1);border-top:2px solid rgba(0,0,0,.1)}.ReactTable .-pagination input,.ReactTable .-pagination select{border:1px solid rgba(0,0,0,.1);background:#fff;padding:5px 7px;font-size:inherit;border-radius:3px;font-weight:400;outline-width:0}.ReactTable .-pagination .-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:block;width:100%;height:100%;border:0;border-radius:3px;padding:6px;font-size:1em;color:rgba(0,0,0,.6);background:rgba(0,0,0,.1);transition:all .1s ease;cursor:pointer;outline-width:0}.ReactTable .-pagination .-btn[disabled]{opacity:.5;cursor:default}.ReactTable .-pagination .-btn:not([disabled]):hover{background:rgba(0,0,0,.3);color:#fff}.ReactTable .-pagination .-next,.ReactTable .-pagination .-previous{flex:1 1;text-align:center}.ReactTable .-pagination .-center{flex:1.5 1;text-align:center;margin-bottom:0;display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:space-around}.ReactTable .-pagination .-pageInfo{display:inline-block;margin:3px 10px;white-space:nowrap}.ReactTable .-pagination .-pageJump{display:inline-block}.ReactTable .-pagination .-pageJump input{width:70px;text-align:center}.ReactTable .-pagination .-pageSizeOptions{margin:3px 10px}.ReactTable .rt-noData{left:50%;top:50%;transform:translate(-50%,-50%);z-index:1;padding:20px;color:rgba(0,0,0,.5)}.ReactTable .-loading,.ReactTable .rt-noData{display:block;position:absolute;background:hsla(0,0%,100%,.8);transition:all .3s ease;pointer-events:none}.ReactTable .-loading{left:0;right:0;top:0;bottom:0;z-index:-1;opacity:0}.ReactTable .-loading>div{position:absolute;display:block;text-align:center;width:100%;top:50%;left:0;font-size:15px;color:rgba(0,0,0,.6);transform:translateY(-52%);transition:all .3s cubic-bezier(.25,.46,.45,.94)}.ReactTable .-loading.-active{opacity:1;z-index:2;pointer-events:all}.ReactTable .-loading.-active>div{transform:translateY(50%)}.ReactTable .rt-resizing .rt-td,.ReactTable .rt-resizing .rt-th{transition:none!important;cursor:col-resize;-webkit-user-select:none;-ms-user-select:none;user-select:none}.rthfc .rt-thead.-header,.rthfc .rt-thead.-headerGroups{z-index:3}.rthfc .rt-thead.-filters{z-index:2}.rthfc .rt-td,.rthfc .rt-th{background-color:#fff}.rthfc .-headerGroups .rt-th,.rthfc.-striped .rt-tr.-odd .rt-td{background-color:#f7f7f7}.rthfc.-highlight .rt-tr:hover .rt-td{background-color:#f2f2f2}.rthfc .-filters .rt-th.rthfc-th-fixed-left-last,.rthfc .rt-td.rthfc-td-fixed-left-last,.rthfc .rt-th.rthfc-th-fixed-left-last{border-right:1px solid #ccc}.rthfc .rt-td.rthfc-td-fixed-right-first,.rthfc .rt-th.rthfc-th-fixed-right-first{border-left:1px solid #ccc}.rthfc.-sp .rt-tbody{overflow:visible;flex:1 0 auto}.rthfc.-sp .rt-thead{position:-webkit-sticky;position:sticky}.rthfc.-sp .rt-thead.-headerGroups{border-bottom-color:#f2f2f2}.rthfc.-sp .rt-tfoot{bottom:0}.rthfc.-sp .rt-tfoot,.rthfc.-sp .rthfc-td-fixed,.rthfc.-sp .rthfc-th-fixed{position:-webkit-sticky;position:sticky;z-index:1}.rthfc.-sp .rthfc-th-fixed{z-index:11}.rthfc.-sp .rthfc-td-fixed-left,.rthfc.-sp .rthfc-td-fixed-right,.rthfc.-sp .rthfc-th-fixed-left,.rthfc.-sp .rthfc-th-fixed-right{left:0}.rthfc.-se .-filters .rt-th.rthfc-th-fixed,.rthfc.-se .-header .rt-th.rthfc-th-fixed,.rthfc.-se .-headerGroups .rt-th.rthfc-th-fixed,.rthfc.-se .rt-td.rthfc-td-fixed{position:relative;z-Index:1}.rthfc.-se .-header .rt-th.rthfc-th-fixed{z-Index:11}.react-vis-magic-css-import-rule{display:inherit}.rv-treemap{font-size:12px;position:relative}.rv-treemap__leaf{overflow:hidden;position:absolute}.rv-treemap__leaf--circle{align-items:center;border-radius:100%;display:flex;justify-content:center}.rv-treemap__leaf__content{overflow:hidden;padding:10px;text-overflow:ellipsis}.rv-xy-plot{color:#c3c3c3;position:relative}.rv-xy-plot canvas{pointer-events:none}.rv-xy-plot .rv-xy-canvas{pointer-events:none;position:absolute}.rv-xy-plot__inner{display:block}.rv-xy-plot__axis__line{fill:none;stroke-width:2px;stroke:#e6e6e9}.rv-xy-plot__axis__tick__line{stroke:#e6e6e9}.rv-xy-plot__axis__tick__text,.rv-xy-plot__axis__title text{fill:#6b6b76;font-size:11px}.rv-xy-plot__grid-lines__line{stroke:#e6e6e9}.rv-xy-plot__circular-grid-lines__line{fill-opacity:0;stroke:#e6e6e9}.rv-xy-plot__series,.rv-xy-plot__series path{pointer-events:all}.rv-xy-plot__series--line{fill:none;stroke:#000;stroke-width:2px}.rv-crosshair{position:absolute;font-size:11px;pointer-events:none}.rv-crosshair__line{background:#47d3d9;width:1px}.rv-crosshair__inner{position:absolute;text-align:left;top:0}.rv-crosshair__inner__content{border-radius:4px;background:#3a3a48;color:#fff;font-size:12px;padding:7px 10px;box-shadow:0 2px 4px rgba(0,0,0,.5)}.rv-crosshair__inner--left{right:4px}.rv-crosshair__inner--right{left:4px}.rv-crosshair__title{font-weight:700;white-space:nowrap}.rv-crosshair__item{white-space:nowrap}.rv-hint{position:absolute;pointer-events:none}.rv-hint__content{border-radius:4px;padding:7px 10px;font-size:12px;background:#3a3a48;box-shadow:0 2px 4px rgba(0,0,0,.5);color:#fff;text-align:left;white-space:nowrap}.rv-discrete-color-legend{box-sizing:border-box;overflow-y:auto;font-size:12px}.rv-discrete-color-legend.horizontal{white-space:nowrap}.rv-discrete-color-legend-item{color:#3a3a48;border-radius:1px;padding:9px 10px}.rv-discrete-color-legend-item.horizontal{display:inline-block}.rv-discrete-color-legend-item.horizontal .rv-discrete-color-legend-item__title{margin-left:0;display:block}.rv-discrete-color-legend-item__color{display:inline-block;vertical-align:middle;overflow:visible}.rv-discrete-color-legend-item__color__path{stroke:#dcdcdc;stroke-width:2px}.rv-discrete-color-legend-item__title{margin-left:10px}.rv-discrete-color-legend-item.disabled{color:#b8b8b8}.rv-discrete-color-legend-item.clickable{cursor:pointer}.rv-discrete-color-legend-item.clickable:hover{background:#f9f9f9}.rv-search-wrapper{display:flex;flex-direction:column}.rv-search-wrapper__form{flex:0 1}.rv-search-wrapper__form__input{width:100%;color:#a6a6a5;border:1px solid #e5e5e4;padding:7px 10px;font-size:12px;box-sizing:border-box;border-radius:2px;margin:0 0 9px;outline:0}.rv-search-wrapper__contents{flex:1 1;overflow:auto}.rv-continuous-color-legend{font-size:12px}.rv-continuous-color-legend .rv-gradient{height:4px;border-radius:2px;margin-bottom:5px}.rv-continuous-size-legend{font-size:12px}.rv-continuous-size-legend .rv-bubbles{text-align:justify;overflow:hidden;margin-bottom:5px;width:100%}.rv-continuous-size-legend .rv-bubble{background:#d8d9dc;display:inline-block;vertical-align:bottom}.rv-continuous-size-legend .rv-spacer{display:inline-block;font-size:0;line-height:0;width:100%}.rv-legend-titles{height:16px;position:relative}.rv-legend-titles__center,.rv-legend-titles__left,.rv-legend-titles__right{position:absolute;white-space:nowrap;overflow:hidden}.rv-legend-titles__center{display:block;text-align:center;width:100%}.rv-legend-titles__right{right:0}.rv-radial-chart .rv-xy-plot__series--label{pointer-events:none}.rc-slider{position:relative;height:14px;padding:5px 0;width:100%;border-radius:6px;touch-action:none}.rc-slider,.rc-slider *{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-rail{width:100%;background-color:#e9e9e9}.rc-slider-rail,.rc-slider-track{position:absolute;height:4px;border-radius:6px}.rc-slider-track{left:0;background-color:#abe2fb}.rc-slider-handle{position:absolute;width:14px;height:14px;cursor:pointer;cursor:-webkit-grab;margin-top:-5px;cursor:grab;border-radius:50%;border:2px solid #96dbfa;background-color:#fff;touch-action:pan-x}.rc-slider-handle-dragging.rc-slider-handle-dragging.rc-slider-handle-dragging{border-color:#57c5f7;box-shadow:0 0 0 5px #96dbfa}.rc-slider-handle:focus{outline:none}.rc-slider-handle-click-focused:focus{border-color:#96dbfa;box-shadow:unset}.rc-slider-handle:hover{border-color:#57c5f7}.rc-slider-handle:active{border-color:#57c5f7;box-shadow:0 0 5px #57c5f7;cursor:-webkit-grabbing;cursor:grabbing}.rc-slider-mark{position:absolute;top:18px;left:0;width:100%;font-size:12px}.rc-slider-mark-text{position:absolute;display:inline-block;vertical-align:middle;text-align:center;cursor:pointer;color:#999}.rc-slider-mark-text-active{color:#666}.rc-slider-step{position:absolute;width:100%;height:4px;background:transparent}.rc-slider-dot{position:absolute;bottom:-2px;margin-left:-4px;width:8px;height:8px;border:2px solid #e9e9e9;background-color:#fff;cursor:pointer;border-radius:50%;vertical-align:middle}.rc-slider-dot-active{border-color:#96dbfa}.rc-slider-dot-reverse{margin-right:-4px}.rc-slider-disabled{background-color:#e9e9e9}.rc-slider-disabled .rc-slider-track{background-color:#ccc}.rc-slider-disabled .rc-slider-dot,.rc-slider-disabled .rc-slider-handle{border-color:#ccc;box-shadow:none;background-color:#fff;cursor:not-allowed}.rc-slider-disabled .rc-slider-dot,.rc-slider-disabled .rc-slider-mark-text{cursor:not-allowed!important}.rc-slider-vertical{width:14px;height:100%;padding:0 5px}.rc-slider-vertical .rc-slider-rail{height:100%;width:4px}.rc-slider-vertical .rc-slider-track{left:5px;bottom:0;width:4px}.rc-slider-vertical .rc-slider-handle{margin-left:-5px;touch-action:pan-y}.rc-slider-vertical .rc-slider-mark{top:0;left:18px;height:100%}.rc-slider-vertical .rc-slider-step{height:100%;width:4px}.rc-slider-vertical .rc-slider-dot{left:2px;margin-bottom:-4px}.rc-slider-vertical .rc-slider-dot:first-child,.rc-slider-vertical .rc-slider-dot:last-child{margin-bottom:-4px}.rc-slider-tooltip-zoom-down-appear,.rc-slider-tooltip-zoom-down-enter,.rc-slider-tooltip-zoom-down-leave{animation-duration:.3s;animation-fill-mode:both;display:block!important;animation-play-state:paused}.rc-slider-tooltip-zoom-down-appear.rc-slider-tooltip-zoom-down-appear-active,.rc-slider-tooltip-zoom-down-enter.rc-slider-tooltip-zoom-down-enter-active{animation-name:rcSliderTooltipZoomDownIn;animation-play-state:running}.rc-slider-tooltip-zoom-down-leave.rc-slider-tooltip-zoom-down-leave-active{animation-name:rcSliderTooltipZoomDownOut;animation-play-state:running}.rc-slider-tooltip-zoom-down-appear,.rc-slider-tooltip-zoom-down-enter{transform:scale(0);animation-timing-function:cubic-bezier(.23,1,.32,1)}.rc-slider-tooltip-zoom-down-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@keyframes rcSliderTooltipZoomDownIn{0%{opacity:0;transform-origin:50% 100%;transform:scale(0)}to{transform-origin:50% 100%;transform:scale(1)}}@keyframes rcSliderTooltipZoomDownOut{0%{transform-origin:50% 100%;transform:scale(1)}to{opacity:0;transform-origin:50% 100%;transform:scale(0)}}.rc-slider-tooltip{position:absolute;left:-9999px;top:-9999px;visibility:visible}.rc-slider-tooltip,.rc-slider-tooltip *{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-tooltip-hidden{display:none}.rc-slider-tooltip-placement-top{padding:4px 0 8px}.rc-slider-tooltip-inner{padding:6px 2px;min-width:24px;height:24px;font-size:12px;line-height:1;color:#fff;text-align:center;text-decoration:none;background-color:#6c6c6c;border-radius:6px;box-shadow:0 0 4px #d9d9d9}.rc-slider-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.rc-slider-tooltip-placement-top .rc-slider-tooltip-arrow{bottom:4px;left:50%;margin-left:-4px;border-width:4px 4px 0;border-top-color:#6c6c6c} \ No newline at end of file +.ReactTable{position:relative;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;border:1px solid rgba(0,0,0,.1)}.ReactTable *{box-sizing:border-box}.ReactTable .rt-table{-webkit-flex:auto 1;flex:auto 1;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:stretch;align-items:stretch;width:100%;border-collapse:collapse;overflow:auto}.ReactTable .rt-thead{-webkit-flex:1 0 auto;flex:1 0 auto;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ReactTable .rt-thead.-headerGroups{background:rgba(0,0,0,.03)}.ReactTable .rt-thead.-filters,.ReactTable .rt-thead.-headerGroups{border-bottom:1px solid rgba(0,0,0,.05)}.ReactTable .rt-thead.-filters input,.ReactTable .rt-thead.-filters select{border:1px solid rgba(0,0,0,.1);background:#fff;padding:5px 7px;font-size:inherit;border-radius:3px;font-weight:400;outline-width:0}.ReactTable .rt-thead.-filters .rt-th{border-right:1px solid rgba(0,0,0,.02)}.ReactTable .rt-thead.-header{box-shadow:0 2px 15px 0 rgba(0,0,0,.15)}.ReactTable .rt-thead .rt-tr{text-align:center}.ReactTable .rt-thead .rt-td,.ReactTable .rt-thead .rt-th{padding:5px;line-height:normal;position:relative;border-right:1px solid rgba(0,0,0,.05);transition:box-shadow .3s cubic-bezier(.175,.885,.32,1.275);box-shadow:inset 0 0 0 0 transparent}.ReactTable .rt-thead .rt-td.-sort-asc,.ReactTable .rt-thead .rt-th.-sort-asc{box-shadow:inset 0 3px 0 0 rgba(0,0,0,.6)}.ReactTable .rt-thead .rt-td.-sort-desc,.ReactTable .rt-thead .rt-th.-sort-desc{box-shadow:inset 0 -3px 0 0 rgba(0,0,0,.6)}.ReactTable .rt-thead .rt-td.-cursor-pointer,.ReactTable .rt-thead .rt-th.-cursor-pointer{cursor:pointer}.ReactTable .rt-thead .rt-td:last-child,.ReactTable .rt-thead .rt-th:last-child{border-right:0}.ReactTable .rt-thead .rt-th:focus{outline-width:0}.ReactTable .rt-thead .rt-resizable-header{overflow:visible}.ReactTable .rt-thead .rt-resizable-header:last-child{overflow:hidden}.ReactTable .rt-thead .rt-resizable-header-content{overflow:hidden;text-overflow:ellipsis}.ReactTable .rt-thead .rt-header-pivot{border-right-color:#f7f7f7}.ReactTable .rt-thead .rt-header-pivot:after,.ReactTable .rt-thead .rt-header-pivot:before{left:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.ReactTable .rt-thead .rt-header-pivot:after{border-color:hsla(0,0%,100%,0) hsla(0,0%,100%,0) hsla(0,0%,100%,0) #fff;border-width:8px;margin-top:-8px}.ReactTable .rt-thead .rt-header-pivot:before{border-color:hsla(0,0%,40%,0) hsla(0,0%,40%,0) hsla(0,0%,40%,0) #f7f7f7;border-width:10px;margin-top:-10px}.ReactTable .rt-tbody{-webkit-flex:99999 1 auto;flex:99999 1 auto;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;overflow:auto}.ReactTable .rt-tbody .rt-tr-group{border-bottom:1px solid rgba(0,0,0,.05)}.ReactTable .rt-tbody .rt-tr-group:last-child{border-bottom:0}.ReactTable .rt-tbody .rt-td{border-right:1px solid rgba(0,0,0,.02)}.ReactTable .rt-tbody .rt-td:last-child{border-right:0}.ReactTable .rt-tbody .rt-expandable{cursor:pointer;text-overflow:clip}.ReactTable .rt-tr-group{-webkit-flex:1 0 auto;flex:1 0 auto;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:stretch;align-items:stretch}.ReactTable .rt-tr{-webkit-flex:1 0 auto;flex:1 0 auto;display:-webkit-inline-flex;display:inline-flex}.ReactTable .rt-td,.ReactTable .rt-th{-webkit-flex:1 0;flex:1 0;white-space:nowrap;text-overflow:ellipsis;padding:7px 5px;overflow:hidden;transition:.3s ease;transition-property:width,min-width,padding,opacity}.ReactTable .rt-td.-hidden,.ReactTable .rt-th.-hidden{width:0!important;min-width:0!important;padding:0!important;border:0!important;opacity:0!important}.ReactTable .rt-expander{display:inline-block;position:relative;color:transparent;margin:0 10px}.ReactTable .rt-expander:after{content:"";position:absolute;width:0;height:0;top:50%;left:50%;-webkit-transform:translate(-50%,-50%) rotate(-90deg);transform:translate(-50%,-50%) rotate(-90deg);border-left:5.04px solid transparent;border-right:5.04px solid transparent;border-top:7px solid rgba(0,0,0,.8);transition:all .3s cubic-bezier(.175,.885,.32,1.275);cursor:pointer}.ReactTable .rt-expander.-open:after{-webkit-transform:translate(-50%,-50%) rotate(0);transform:translate(-50%,-50%) rotate(0)}.ReactTable .rt-resizer{display:inline-block;position:absolute;width:36px;top:0;bottom:0;right:-18px;cursor:col-resize;z-index:10}.ReactTable .rt-tfoot{-webkit-flex:1 0 auto;flex:1 0 auto;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;box-shadow:0 0 15px 0 rgba(0,0,0,.15)}.ReactTable .rt-tfoot .rt-td{border-right:1px solid rgba(0,0,0,.05)}.ReactTable .rt-tfoot .rt-td:last-child{border-right:0}.ReactTable.-striped .rt-tr.-odd{background:rgba(0,0,0,.03)}.ReactTable.-highlight .rt-tbody .rt-tr:not(.-padRow):hover{background:rgba(0,0,0,.05)}.ReactTable .-pagination{z-index:1;display:-webkit-flex;display:flex;-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-items:stretch;align-items:stretch;-webkit-flex-wrap:wrap;flex-wrap:wrap;padding:3px;box-shadow:0 0 15px 0 rgba(0,0,0,.1);border-top:2px solid rgba(0,0,0,.1)}.ReactTable .-pagination input,.ReactTable .-pagination select{border:1px solid rgba(0,0,0,.1);background:#fff;padding:5px 7px;font-size:inherit;border-radius:3px;font-weight:400;outline-width:0}.ReactTable .-pagination .-btn{-webkit-appearance:none;appearance:none;display:block;width:100%;height:100%;border:0;border-radius:3px;padding:6px;font-size:1em;color:rgba(0,0,0,.6);background:rgba(0,0,0,.1);transition:all .1s ease;cursor:pointer;outline-width:0}.ReactTable .-pagination .-btn[disabled]{opacity:.5;cursor:default}.ReactTable .-pagination .-btn:not([disabled]):hover{background:rgba(0,0,0,.3);color:#fff}.ReactTable .-pagination .-next,.ReactTable .-pagination .-previous{-webkit-flex:1 1;flex:1 1;text-align:center}.ReactTable .-pagination .-center{-webkit-flex:1.5 1;flex:1.5 1;text-align:center;margin-bottom:0;display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-around;justify-content:space-around}.ReactTable .-pagination .-pageInfo{display:inline-block;margin:3px 10px;white-space:nowrap}.ReactTable .-pagination .-pageJump{display:inline-block}.ReactTable .-pagination .-pageJump input{width:70px;text-align:center}.ReactTable .-pagination .-pageSizeOptions{margin:3px 10px}.ReactTable .rt-noData{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:1;padding:20px;color:rgba(0,0,0,.5)}.ReactTable .-loading,.ReactTable .rt-noData{display:block;position:absolute;background:hsla(0,0%,100%,.8);transition:all .3s ease;pointer-events:none}.ReactTable .-loading{left:0;right:0;top:0;bottom:0;z-index:-1;opacity:0}.ReactTable .-loading>div{position:absolute;display:block;text-align:center;width:100%;top:50%;left:0;font-size:15px;color:rgba(0,0,0,.6);-webkit-transform:translateY(-52%);transform:translateY(-52%);transition:all .3s cubic-bezier(.25,.46,.45,.94)}.ReactTable .-loading.-active{opacity:1;z-index:2;pointer-events:all}.ReactTable .-loading.-active>div{-webkit-transform:translateY(50%);transform:translateY(50%)}.ReactTable .rt-resizing .rt-td,.ReactTable .rt-resizing .rt-th{transition:none!important;cursor:col-resize;-webkit-user-select:none;-ms-user-select:none;user-select:none}.rthfc .rt-thead.-header,.rthfc .rt-thead.-headerGroups{z-index:3}.rthfc .rt-thead.-filters{z-index:2}.rthfc .rt-td,.rthfc .rt-th{background-color:#fff}.rthfc .-headerGroups .rt-th,.rthfc.-striped .rt-tr.-odd .rt-td{background-color:#f7f7f7}.rthfc.-highlight .rt-tr:hover .rt-td{background-color:#f2f2f2}.rthfc .-filters .rt-th.rthfc-th-fixed-left-last,.rthfc .rt-td.rthfc-td-fixed-left-last,.rthfc .rt-th.rthfc-th-fixed-left-last{border-right:1px solid #ccc}.rthfc .rt-td.rthfc-td-fixed-right-first,.rthfc .rt-th.rthfc-th-fixed-right-first{border-left:1px solid #ccc}.rthfc.-sp .rt-tbody{overflow:visible;-webkit-flex:1 0 auto;flex:1 0 auto}.rthfc.-sp .rt-thead{position:-webkit-sticky;position:sticky}.rthfc.-sp .rt-thead.-headerGroups{border-bottom-color:#f2f2f2}.rthfc.-sp .rt-tfoot{bottom:0}.rthfc.-sp .rt-tfoot,.rthfc.-sp .rthfc-td-fixed,.rthfc.-sp .rthfc-th-fixed{position:-webkit-sticky;position:sticky;z-index:1}.rthfc.-sp .rthfc-th-fixed{z-index:11}.rthfc.-sp .rthfc-td-fixed-left,.rthfc.-sp .rthfc-td-fixed-right,.rthfc.-sp .rthfc-th-fixed-left,.rthfc.-sp .rthfc-th-fixed-right{left:0}.rthfc.-se .-filters .rt-th.rthfc-th-fixed,.rthfc.-se .-header .rt-th.rthfc-th-fixed,.rthfc.-se .-headerGroups .rt-th.rthfc-th-fixed,.rthfc.-se .rt-td.rthfc-td-fixed{position:relative;z-Index:1}.rthfc.-se .-header .rt-th.rthfc-th-fixed{z-Index:11}.react-vis-magic-css-import-rule{display:inherit}.rv-treemap{font-size:12px;position:relative}.rv-treemap__leaf{overflow:hidden;position:absolute}.rv-treemap__leaf--circle{-webkit-align-items:center;align-items:center;border-radius:100%;display:-webkit-flex;display:flex;-webkit-justify-content:center;justify-content:center}.rv-treemap__leaf__content{overflow:hidden;padding:10px;text-overflow:ellipsis}.rv-xy-plot{color:#c3c3c3;position:relative}.rv-xy-plot canvas{pointer-events:none}.rv-xy-plot .rv-xy-canvas{pointer-events:none;position:absolute}.rv-xy-plot__inner{display:block}.rv-xy-plot__axis__line{fill:none;stroke-width:2px;stroke:#e6e6e9}.rv-xy-plot__axis__tick__line{stroke:#e6e6e9}.rv-xy-plot__axis__tick__text,.rv-xy-plot__axis__title text{fill:#6b6b76;font-size:11px}.rv-xy-plot__grid-lines__line{stroke:#e6e6e9}.rv-xy-plot__circular-grid-lines__line{fill-opacity:0;stroke:#e6e6e9}.rv-xy-plot__series,.rv-xy-plot__series path{pointer-events:all}.rv-xy-plot__series--line{fill:none;stroke:#000;stroke-width:2px}.rv-crosshair{position:absolute;font-size:11px;pointer-events:none}.rv-crosshair__line{background:#47d3d9;width:1px}.rv-crosshair__inner{position:absolute;text-align:left;top:0}.rv-crosshair__inner__content{border-radius:4px;background:#3a3a48;color:#fff;font-size:12px;padding:7px 10px;box-shadow:0 2px 4px rgba(0,0,0,.5)}.rv-crosshair__inner--left{right:4px}.rv-crosshair__inner--right{left:4px}.rv-crosshair__title{font-weight:700;white-space:nowrap}.rv-crosshair__item{white-space:nowrap}.rv-hint{position:absolute;pointer-events:none}.rv-hint__content{border-radius:4px;padding:7px 10px;font-size:12px;background:#3a3a48;box-shadow:0 2px 4px rgba(0,0,0,.5);color:#fff;text-align:left;white-space:nowrap}.rv-discrete-color-legend{box-sizing:border-box;overflow-y:auto;font-size:12px}.rv-discrete-color-legend.horizontal{white-space:nowrap}.rv-discrete-color-legend-item{color:#3a3a48;border-radius:1px;padding:9px 10px}.rv-discrete-color-legend-item.horizontal{display:inline-block}.rv-discrete-color-legend-item.horizontal .rv-discrete-color-legend-item__title{margin-left:0;display:block}.rv-discrete-color-legend-item__color{display:inline-block;vertical-align:middle;overflow:visible}.rv-discrete-color-legend-item__color__path{stroke:#dcdcdc;stroke-width:2px}.rv-discrete-color-legend-item__title{margin-left:10px}.rv-discrete-color-legend-item.disabled{color:#b8b8b8}.rv-discrete-color-legend-item.clickable{cursor:pointer}.rv-discrete-color-legend-item.clickable:hover{background:#f9f9f9}.rv-search-wrapper{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column}.rv-search-wrapper__form{-webkit-flex:0 1;flex:0 1}.rv-search-wrapper__form__input{width:100%;color:#a6a6a5;border:1px solid #e5e5e4;padding:7px 10px;font-size:12px;box-sizing:border-box;border-radius:2px;margin:0 0 9px;outline:0}.rv-search-wrapper__contents{-webkit-flex:1 1;flex:1 1;overflow:auto}.rv-continuous-color-legend{font-size:12px}.rv-continuous-color-legend .rv-gradient{height:4px;border-radius:2px;margin-bottom:5px}.rv-continuous-size-legend{font-size:12px}.rv-continuous-size-legend .rv-bubbles{text-align:justify;overflow:hidden;margin-bottom:5px;width:100%}.rv-continuous-size-legend .rv-bubble{background:#d8d9dc;display:inline-block;vertical-align:bottom}.rv-continuous-size-legend .rv-spacer{display:inline-block;font-size:0;line-height:0;width:100%}.rv-legend-titles{height:16px;position:relative}.rv-legend-titles__center,.rv-legend-titles__left,.rv-legend-titles__right{position:absolute;white-space:nowrap;overflow:hidden}.rv-legend-titles__center{display:block;text-align:center;width:100%}.rv-legend-titles__right{right:0}.rv-radial-chart .rv-xy-plot__series--label{pointer-events:none}.rc-slider{position:relative;height:14px;padding:5px 0;width:100%;border-radius:6px;touch-action:none}.rc-slider,.rc-slider *{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-rail{width:100%;background-color:#e9e9e9}.rc-slider-rail,.rc-slider-track{position:absolute;height:4px;border-radius:6px}.rc-slider-track{left:0;background-color:#abe2fb}.rc-slider-handle{position:absolute;width:14px;height:14px;cursor:pointer;cursor:-webkit-grab;margin-top:-5px;cursor:grab;border-radius:50%;border:2px solid #96dbfa;background-color:#fff;touch-action:pan-x}.rc-slider-handle-dragging.rc-slider-handle-dragging.rc-slider-handle-dragging{border-color:#57c5f7;box-shadow:0 0 0 5px #96dbfa}.rc-slider-handle:focus{outline:none}.rc-slider-handle-click-focused:focus{border-color:#96dbfa;box-shadow:unset}.rc-slider-handle:hover{border-color:#57c5f7}.rc-slider-handle:active{border-color:#57c5f7;box-shadow:0 0 5px #57c5f7;cursor:-webkit-grabbing;cursor:grabbing}.rc-slider-mark{position:absolute;top:18px;left:0;width:100%;font-size:12px}.rc-slider-mark-text{position:absolute;display:inline-block;vertical-align:middle;text-align:center;cursor:pointer;color:#999}.rc-slider-mark-text-active{color:#666}.rc-slider-step{position:absolute;width:100%;height:4px;background:transparent}.rc-slider-dot{position:absolute;bottom:-2px;margin-left:-4px;width:8px;height:8px;border:2px solid #e9e9e9;background-color:#fff;cursor:pointer;border-radius:50%;vertical-align:middle}.rc-slider-dot-active{border-color:#96dbfa}.rc-slider-dot-reverse{margin-right:-4px}.rc-slider-disabled{background-color:#e9e9e9}.rc-slider-disabled .rc-slider-track{background-color:#ccc}.rc-slider-disabled .rc-slider-dot,.rc-slider-disabled .rc-slider-handle{border-color:#ccc;box-shadow:none;background-color:#fff;cursor:not-allowed}.rc-slider-disabled .rc-slider-dot,.rc-slider-disabled .rc-slider-mark-text{cursor:not-allowed!important}.rc-slider-vertical{width:14px;height:100%;padding:0 5px}.rc-slider-vertical .rc-slider-rail{height:100%;width:4px}.rc-slider-vertical .rc-slider-track{left:5px;bottom:0;width:4px}.rc-slider-vertical .rc-slider-handle{margin-left:-5px;touch-action:pan-y}.rc-slider-vertical .rc-slider-mark{top:0;left:18px;height:100%}.rc-slider-vertical .rc-slider-step{height:100%;width:4px}.rc-slider-vertical .rc-slider-dot{left:2px;margin-bottom:-4px}.rc-slider-vertical .rc-slider-dot:first-child,.rc-slider-vertical .rc-slider-dot:last-child{margin-bottom:-4px}.rc-slider-tooltip-zoom-down-appear,.rc-slider-tooltip-zoom-down-enter,.rc-slider-tooltip-zoom-down-leave{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;display:block!important;-webkit-animation-play-state:paused;animation-play-state:paused}.rc-slider-tooltip-zoom-down-appear.rc-slider-tooltip-zoom-down-appear-active,.rc-slider-tooltip-zoom-down-enter.rc-slider-tooltip-zoom-down-enter-active{-webkit-animation-name:rcSliderTooltipZoomDownIn;animation-name:rcSliderTooltipZoomDownIn;-webkit-animation-play-state:running;animation-play-state:running}.rc-slider-tooltip-zoom-down-leave.rc-slider-tooltip-zoom-down-leave-active{-webkit-animation-name:rcSliderTooltipZoomDownOut;animation-name:rcSliderTooltipZoomDownOut;-webkit-animation-play-state:running;animation-play-state:running}.rc-slider-tooltip-zoom-down-appear,.rc-slider-tooltip-zoom-down-enter{-webkit-transform:scale(0);transform:scale(0);-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.rc-slider-tooltip-zoom-down-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@-webkit-keyframes rcSliderTooltipZoomDownIn{0%{opacity:0;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(1);transform:scale(1)}}@keyframes rcSliderTooltipZoomDownIn{0%{opacity:0;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(0);transform:scale(0)}to{-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes rcSliderTooltipZoomDownOut{0%{-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(0);transform:scale(0)}}@keyframes rcSliderTooltipZoomDownOut{0%{-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(0);transform:scale(0)}}.rc-slider-tooltip{position:absolute;left:-9999px;top:-9999px;visibility:visible}.rc-slider-tooltip,.rc-slider-tooltip *{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-tooltip-hidden{display:none}.rc-slider-tooltip-placement-top{padding:4px 0 8px}.rc-slider-tooltip-inner{padding:6px 2px;min-width:24px;height:24px;font-size:12px;line-height:1;color:#fff;text-align:center;text-decoration:none;background-color:#6c6c6c;border-radius:6px;box-shadow:0 0 4px #d9d9d9}.rc-slider-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.rc-slider-tooltip-placement-top .rc-slider-tooltip-arrow{bottom:4px;left:50%;margin-left:-4px;border-width:4px 4px 0;border-top-color:#6c6c6c} \ No newline at end of file diff --git a/benchexec/tablegenerator/react-table/build/vendors.min.js b/benchexec/tablegenerator/react-table/build/vendors.min.js index 667354b3a..268dd9e98 100644 --- a/benchexec/tablegenerator/react-table/build/vendors.min.js +++ b/benchexec/tablegenerator/react-table/build/vendors.min.js @@ -1 +1 @@ -(this.webpackJsonp=this.webpackJsonp||[]).push([[0],Array(68).concat([function(e,t,n){"use strict";e.exports=n(69)},function(e,t,n){"use strict";n(70);var r=n(71),o=60103;if(t.Fragment=60107,"function"===typeof Symbol&&Symbol.for){var i=Symbol.for;o=i("react.element"),t.Fragment=i("react.fragment")}var a=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,s=Object.prototype.hasOwnProperty,u={key:!0,ref:!0,__self:!0,__source:!0};function l(e,t,n){var r,i={},l=null,c=null;for(r in void 0!==n&&(l=""+n),void 0!==t.key&&(l=""+t.key),void 0!==t.ref&&(c=t.ref),t)s.call(t,r)&&!u.hasOwnProperty(r)&&(i[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===i[r]&&(i[r]=t[r]);return{$$typeof:o,type:e,key:l,ref:c,props:i,_owner:a.current}}t.jsx=l,t.jsxs=l},function(e,t,n){"use strict";var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function a(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,t){for(var n,s,u=a(e),l=1;l