Example #1
0
 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")
Example #2
0
    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()
Example #3
0
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()