def do_require_dataset(self, arg): """Require dataset The argument is the name of the dataset to require. """ if self.get_datasets().count(arg): with Timer(f"Downloaded dataset {arg}"): require(self.env, arg) self.init_benchmarks() # FIXME CHRIS, why can't I get it to update the list of benchmarks? # I have to restart print("Application must be restarted to make changes visible.") else: print("Unknown dataset, '" + arg + "'") print("Available datasets are listed with command, list_available_datasets")
def require_datasets(self, datasets: List[Union[str, Dataset]]) -> None: """Require that the given datasets are available to the environment. Example usage: >>> env = gym.make("llvm-v0") >>> env.require_dataset(["npb-v0"]) >>> env.benchmarks ["npb-v0/1", "npb-v0/2", ...] This is equivalent to calling :meth:`require(self, dataset) <compiler_gym.datasets.require>` on the list of datasets. :param datasets: A list of datasets to require. Each dataset is the name of an available dataset, the URL of a dataset to download, or a :class:`Dataset` instance. """ dataset_installed = False for dataset in datasets: dataset_installed |= require(self, dataset) if dataset_installed: # Signal to the compiler service that the contents of the site data # directory has changed. self.service( self.service.stub.AddBenchmark, AddBenchmarkRequest( benchmark=[Benchmark(uri="service://scan-site-data")] ), ) self.make_manifest_file()
def main(argv): """Main entry point.""" if len(argv) != 1: raise app.UsageError(f"Unknown command line arguments: {argv[1:]}") env = env_from_flags() try: if not env.datasets_site_path: raise app.UsageError("Environment has no benchmarks site path") env.datasets_site_path.mkdir(parents=True, exist_ok=True) env.inactive_datasets_site_path.mkdir(parents=True, exist_ok=True) invalidated_manifest = False for name_or_url in FLAGS.download: require(env, name_or_url) if FLAGS.download_all: for dataset in env.available_datasets: require(env, dataset) for name in FLAGS.activate: activate(env, name) invalidated_manifest = True if FLAGS.activate_all: for path in env.inactive_datasets_site_path.iterdir(): activate(env, path.name) invalidated_manifest = True for name in FLAGS.deactivate: deactivate(env, name) invalidated_manifest = True if FLAGS.deactivate_all: for path in env.datasets_site_path.iterdir(): deactivate(env, path.name) invalidated_manifest = True for name in FLAGS.delete: delete(env, name) if invalidated_manifest: env.make_manifest_file() print(f"{env.spec.id} benchmarks site dir: {env.datasets_site_path}") print() print(enumerate_directory("Active Datasets", env.datasets_site_path), ) print( "These benchmarks are ready for use. Deactivate them using `--deactivate=<name>`." ) print() print( enumerate_directory("Inactive Datasets", env.inactive_datasets_site_path)) print("These benchmarks may be activated using `--activate=<name>`.") print() print( tabulate( sorted([( d.name, d.license, humanize.intcomma(d.file_count), humanize.naturalsize(d.size_bytes), ) for d in env.available_datasets.values()]), headers=( "Downloadable Dataset", "License", "#. Benchmarks", "Size on disk", ), )) print( "These benchmarks may be installed using `--download=<name> --activate=<name>`." ) finally: env.close()