compiler_gym.datasets
An instance of a CompilerGym environment uses a Benchmark as the program being optimized. A
Dataset is collection of benchmarks
that can be installed and made available for use.
Dataset Classes:
BenchmarkUri
- class compiler_gym.datasets.BenchmarkUri(*, scheme: str, dataset: str, path: str, params: Dict[str, List[str]] = {}, fragment: str = '')[source]
A URI used to identify a benchmark, and optionally a set of parameters for the benchmark.
A URI has the following format:
scheme://dataset/path?params#fragment
where:
scheme(optional, defaultbenchmark): An arbitrary string used to group datasets, for examplegeneratorif the dataset is a benchmark generator.dataset: The name of a dataset, optionally with a version tag, for examplelinux-v0.path(optional, default empty string): The path of a benchmark within a dataset.params(optional, default empty dictionary): A set of query parameters for the benchmark. This is parsed a dictionary of string keys to a list of string values. For exampledataset=1&debug=truewhich will be parsed as{"dataset": ["1"], "debug": ["true"]}.fragment(optional, default empty string): An optional fragment within the benchmark.
The
schemeanddatasetcomponents are used to resolve aDatasetclass that can serve the benchmark. TheDataset.benchmark_from_parsed_uri()method is then used to interpret the remainder of the URI components.A benchmark URI may resolve to zero or more benchmarks, for example:
benchmark://csmith-v0resolves to any benchmark from thebenchmark://csmith-v0dataset.cbench-v0/qsortresolves to the path/qsortwithin the datasetbenchmark://cbench-v0using the default scheme.benchmark://cbench-v0/qsort?debug=truealso resolves to the path/qsortwithin the datasetbenchmark://cbench-v0, but with an additional parameterdebug=true.
- dataset: str
The name of the dataset.
- fragment: str
The URL fragment. Empty string if not set.
- params: Dict[str, List[str]]
A dictionary of query parameters. Empty dictionary if not set.
- path: str
The path of the benchmark. Empty string if not set.
- scheme: str
The benchmark scheme. Defaults to
benchmark.
Benchmark
- class compiler_gym.datasets.Benchmark(proto: Benchmark, validation_callbacks: Optional[List[Callable[[CompilerEnv], Iterable[ValidationError]]]] = None, sources: Optional[List[BenchmarkSource]] = None)[source]
A benchmark represents a particular program that is being compiled.
A benchmark is a program that can be used by a
CompilerEnvas a program to optimize. A benchmark comprises the data that is fed into the compiler, identified by a URI.Benchmarks are not normally instantiated directly. Instead, benchmarks are instantiated using
env.datasets.benchmark(uri):>>> env.datasets.benchmark("benchmark://npb-v0/20") benchmark://npb-v0/20
The available benchmark URIs can be queried using
env.datasets.benchmark_uris().>>> next(env.datasets.benchmark_uris()) 'benchmark://cbench-v1/adpcm'
Compiler environments may provide additional helper functions for generating benchmarks, such as
env.make_benchmark()for LLVM.A Benchmark instance wraps an instance of the
Benchmarkprotocol buffer from the RPC interface with additional functionality. The data underlying benchmarks should be considered immutable. New attributes cannot be assigned to Benchmark instances.The benchmark for an environment can be set during
env.reset(). The currently active benchmark can be queried usingenv.benchmark:>>> env = gym.make("llvm-v0") >>> env.reset(benchmark="benchmark://cbench-v1/crc32") >>> env.benchmark benchmark://cbench-v1/crc32
- add_source(source: BenchmarkSource) None[source]
Register a new source file for this benchmark.
- Parameters
source – The
BenchmarkSourceto register.
- add_validation_callback(validation_callback: Callable[[CompilerEnv], Iterable[ValidationError]]) None[source]
Register a new validation callback that will be executed on
validate().- Parameters
validation_callback – A callback that accepts a single
CompilerEnvargument and returns an iterable sequence of zero or moreValidationErrortuples. Validation callbacks must be thread safe and must not modify the environment.
- classmethod from_file(uri: Union[str, BenchmarkUri], path: Path)[source]
Construct a benchmark from a file.
- Parameters
uri – The URI of the benchmark.
path – A filesystem path.
- Raises
FileNotFoundError – If the path does not exist.
- Returns
A
Benchmarkinstance.
- classmethod from_file_contents(uri: Union[str, BenchmarkUri], data: bytes)[source]
Construct a benchmark from raw data.
- Parameters
uri – The URI of the benchmark.
data – An array of bytes that will be passed to the compiler service.
- is_validatable() bool[source]
Whether the benchmark has any validation callbacks registered.
- Returns
Trueif the benchmark has at least one validation callback.
- ivalidate(env: CompilerEnv) Iterable[ValidationError][source]
Run the validation callbacks and return a generator of errors.
This is an asynchronous version of
validate()that returns immediately.- Parameters
env – A
CompilerEnvinstance to validate.- Returns
A generator of
ValidationErrortuples that occur during validation.
- property proto: Benchmark
The protocol buffer representing the benchmark.
- Returns
A Benchmark message.
- Type
Benchmark
- property sources: Iterable[BenchmarkSource]
The original source code used to produce this benchmark, as a list of
BenchmarkSourceinstances.- Returns
A sequence of source files.
- Type
Iterable[BenchmarkSource]
Warning
The
Benchmark.sourcesproperty is new and is likely to change in the future.
- property uri: BenchmarkUri
The URI of the benchmark.
Benchmark URIs should be unique, that is, that two URIs with the same value should resolve to the same benchmark. However, URIs do not have uniquely describe a benchmark. That is, multiple identical benchmarks could have different URIs.
- Returns
A URI string. :type: string
- validate(env: CompilerEnv) List[ValidationError][source]
Run the validation callbacks and return any errors.
If no errors are returned, validation has succeeded:
>>> benchmark.validate(env) []
If an error occurs, a
ValidationErrortuple will describe the type of the error, and optionally contain other data:>>> benchmark.validate(env) [ValidationError(type="RuntimeError")]
Multiple
ValidationErrorerrors may be returned to indicate multiple errors.This is a synchronous version of
ivalidate()that blocks until all results are ready:>>> benchmark.validate(env) == list(benchmark.ivalidate(env)) True
- Parameters
env – The
CompilerEnvinstance that is being validated.- Returns
A list of zero or more
ValidationErrortuples that occurred during validation.
- validation_callbacks() List[Callable[[CompilerEnv], Iterable[ValidationError]]][source]
Return the list of registered validation callbacks.
- Returns
A list of callables. See
add_validation_callback().
- write_sources_to_directory(directory: Path) int[source]
Write the source files for this benchmark to the given directory.
This writes each of the
benchmark.sourcesfiles to disk.If the benchmark has no sources, no files are written.
- Parameters
directory – The directory to write results to. If it does not exist, it is created.
- Returns
The number of files written.
- class compiler_gym.datasets.BenchmarkSource(filename: str, contents: bytes)[source]
A source file that is used to generate a benchmark. A benchmark may comprise many source files.
Warning
The
BenchmarkSourceclass is new and is likely to change in the future.- contents: bytes
The contents of the file as a byte array.
- filename: str
The name of the file.
Dataset
- class compiler_gym.datasets.Dataset(name: str, description: str, license: str, site_data_base: ~typing.Optional[~pathlib.Path] = None, benchmark_class=<class 'compiler_gym.datasets.benchmark.Benchmark'>, references: ~typing.Optional[~typing.Dict[str, str]] = None, deprecated: ~typing.Optional[str] = None, sort_order: int = 0, validatable: str = 'No')[source]
A dataset is a collection of benchmarks.
The Dataset class has methods for installing and managing groups of benchmarks, for listing the available benchmark URIs, and for instantiating
Benchmarkobjects.The Dataset class is an abstract base for implementing datasets. At a minimum, subclasses must implement the
benchmark()andbenchmark_uris()methods, andsize. Other methods such asinstall()may be used where helpful.- __init__(name: str, description: str, license: str, site_data_base: ~typing.Optional[~pathlib.Path] = None, benchmark_class=<class 'compiler_gym.datasets.benchmark.Benchmark'>, references: ~typing.Optional[~typing.Dict[str, str]] = None, deprecated: ~typing.Optional[str] = None, sort_order: int = 0, validatable: str = 'No')[source]
Constructor.
- Parameters
name – The name of the dataset, in the format:
scheme://name.description – A short human-readable description of the dataset.
license – The name of the dataset’s license.
site_data_base – An optional directory that can be used by the dataset to house the “site data”, i.e. persistent files on disk. The site data directory is a subdirectory of this
site_data_basepath, which can be shared by multiple datasets. If not provided, thedataset.site_data_pathattribute will raise an error. Usedataset.has_site_datato check if a site data path was set.benchmark_class – The class to use when instantiating benchmarks. It must have the same constructor signature as
Benchmark.references – A dictionary of useful named URLs for this dataset containing extra information, download links, papers, etc.
deprecated – Mark the dataset as deprecated and issue a warning when
install(), including the given method. Deprecated datasets are excluded from thedatasets()iterator by default.sort_order – An optional numeric value that should be used to order this dataset relative to others. Lowest value sorts first.
validatable – Whether the dataset is validatable. A validatable dataset is one where the behavior of the benchmarks can be checked by compiling the programs to binaries and executing them. If the benchmarks crash, or are found to have different behavior, then validation fails. This type of validation is used to check that the compiler has not broken the semantics of the program. This value takes a string and is used for documentation purposes only. Suggested values are “Yes”, “No”, or “Partial”.
- Raises
ValueError – If
namedoes not match the expected type.
- __len__() int[source]
The number of benchmarks in the dataset.
This is the same as
Dataset.size:>>> len(dataset) == dataset.size True
If the number of benchmarks is unknown or unbounded, for example because the dataset represents a program generator that can produce an infinite number of programs, the value is 0.
- Returns
An integer.
- __getitem__(uri: str) Benchmark[source]
Select a benchmark by URI.
This is the same as
Dataset.benchmark(uri):>>> dataset["benchmark://cbench-v1/crc32"] == dataset.benchmark("benchmark://cbench-v1/crc32") True
- Returns
A
Benchmarkinstance.- Raises
LookupError – If
uridoes not exist.
- __iter__() Iterable[Benchmark][source]
Enumerate the (possibly infinite) benchmarks lazily.
This is the same as
Dataset.benchmarks():>>> from itertools import islice >>> list(islice(dataset, 100)) == list(islice(datset.benchmarks(), 100)) True
- Returns
An iterable sequence of
Benchmarkinstances.
- benchmark(uri: str) Benchmark[source]
Select a benchmark.
- Parameters
uri – The URI of the benchmark to return.
- Returns
A
Benchmarkinstance.- Raises
LookupError – If
uriis not found.ValueError – If the URI is invalid.
- benchmark_from_parsed_uri(uri: BenchmarkUri) Benchmark[source]
Select a benchmark.
Subclasses must implement this method. Implementors may assume that the URI is well formed and that the
schemeanddatasetcomponents are correct.- Parameters
uri – The parsed URI of the benchmark to return.
- Returns
A
Benchmarkinstance.- Raises
LookupError – If
uriis not found.ValueError – If the URI is invalid.
- benchmark_uris() Iterable[str][source]
Enumerate the (possibly infinite) benchmark URIs.
Iteration order is consistent across runs. The order of
benchmarks()andbenchmark_uris()is the same.If the number of benchmarks in the dataset is infinite (
len(dataset) == math.inf), the iterable returned by this method will continue indefinitely.- Returns
An iterable sequence of benchmark URI strings.
- benchmarks() Iterable[Benchmark][source]
Enumerate the (possibly infinite) benchmarks lazily.
Iteration order is consistent across runs. The order of
benchmarks()andbenchmark_uris()is the same.If the number of benchmarks in the dataset is infinite (
len(dataset) == math.inf), the iterable returned by this method will continue indefinitely.- Returns
An iterable sequence of
Benchmarkinstances.
- property deprecated: bool
Whether the dataset is included in the iterable sequence of datasets of a containing
Datasetscollection.- Type
bool
- property description: str
A short human-readable description of the dataset.
- Type
str
- property has_site_data: bool
Return whether the dataset has a site data directory.
- Type
bool
- install() None[source]
Install this dataset locally.
Implementing this method is optional. If implementing this method, you must call
super().install()first.This method should not perform redundant work. This method should first detect whether any work needs to be done so that repeated calls to
install()will complete quickly.
- property installed: bool
Whether the dataset is installed locally. Installation occurs automatically on first use, or by calling
install().- Type
bool
- property license: str
The name of the license of the dataset.
- Type
str
- property name: str
The name of the dataset.
- Type
str
- property protocol: str
The URI scheme that is used to identify benchmarks in this dataset.
- type
str
Deprecated since version 0.2.2: The protocol attribute has been renamed scheme
- random_benchmark(random_state: Optional[Generator] = None) Benchmark[source]
Select a benchmark randomly.
- Parameters
random_state – A random number generator. If not provided, a default
np.random.default_rng()is used.- Returns
A
Benchmarkinstance.
- property references: Dict[str, str]
A dictionary of useful named URLs for this dataset containing extra information, download links, papers, etc.
For example:
>>> dataset.references {'Paper': 'https://arxiv.org/pdf/1407.3487.pdf', 'Homepage': 'https://ctuning.org/wiki/index.php/CTools:CBench'}
- Type
Dict[str, str]
- property scheme: str
The URI scheme that is used to identify benchmarks in this dataset.
- Type
str
- property site_data_path: Path
The filesystem path used to store persistent dataset files.
This directory may not exist.
- Type
Path
- Raises
ValueError – If no site data path was specified at constructor time.
- property site_data_size_in_bytes: int
The total size of the on-disk data used by this dataset.
- Type
int
- property size: int
The number of benchmarks in the dataset.
If the number of benchmarks is unknown or unbounded, for example because the dataset represents a program generator that can produce an infinite number of programs, the value is 0.
- Type
int
- uninstall() None[source]
Remove any local data for this benchmark.
This method undoes the work of
install(). The dataset can still be used after calling this method.
- property validatable: str
Whether the dataset is validatable. A validatable dataset is one where the behavior of the benchmarks can be checked by compiling the programs to binaries and executing them. If the benchmarks crash, or are found to have different behavior, then validation fails. This type of validation is used to check that the compiler has not broken the semantics of the program.
This property takes a string and is used for documentation purposes only. Suggested values are “Yes”, “No”, or “Partial”.
- Type
str
- property version: int
The version tag for this dataset. Defaults to zero.
- Type
int
FilesDataset
- class compiler_gym.datasets.FilesDataset(dataset_root: Path, benchmark_file_suffix: str = '', memoize_uris: bool = True, **dataset_args)[source]
A dataset comprising a directory tree of files.
A FilesDataset is a root directory that contains (a possibly nested tree of) files, where each file represents a benchmark. The directory contents can be filtered by specifying a filename suffix that files must match.
The URI of benchmarks is the relative path of each file, stripped of a required filename suffix, if specified. For example, given the following file tree:
/tmp/dataset/a.txt /tmp/dataset/LICENSE /tmp/dataset/subdir/subdir/b.txt /tmp/dataset/subdir/subdir/c.txt
a FilesDataset
benchmark://ds-v0rooted at/tmp/datasetwith filename suffix.txtwill contain the following URIs:>>> list(dataset.benchmark_uris()) [ "benchmark://ds-v0/a", "benchmark://ds-v0/subdir/subdir/b", "benchmark://ds-v0/subdir/subdir/c", ]
- __init__(dataset_root: Path, benchmark_file_suffix: str = '', memoize_uris: bool = True, **dataset_args)[source]
Constructor.
- Parameters
dataset_root – The root directory to look for benchmark files.
benchmark_file_suffix – A file extension that must be matched for a file to be used as a benchmark.
memoize_uris – Whether to memoize the list of URIs contained in the dataset. Memoizing the URIs enables faster repeated iteration over
dataset.benchmark_uris()at the expense of increased memory overhead as the file list must be kept in memory.dataset_args – See
Dataset.__init__().
- benchmark_from_parsed_uri(uri: BenchmarkUri) Benchmark[source]
Select a benchmark.
Subclasses must implement this method. Implementors may assume that the URI is well formed and that the
schemeanddatasetcomponents are correct.- Parameters
uri – The parsed URI of the benchmark to return.
- Returns
A
Benchmarkinstance.- Raises
LookupError – If
uriis not found.ValueError – If the URI is invalid.
- benchmark_uris() Iterable[str][source]
Enumerate the (possibly infinite) benchmark URIs.
Iteration order is consistent across runs. The order of
benchmarks()andbenchmark_uris()is the same.If the number of benchmarks in the dataset is infinite (
len(dataset) == math.inf), the iterable returned by this method will continue indefinitely.- Returns
An iterable sequence of benchmark URI strings.
- property size: int
The number of benchmarks in the dataset.
If the number of benchmarks is unknown or unbounded, for example because the dataset represents a program generator that can produce an infinite number of programs, the value is 0.
- Type
int
TarDataset
- class compiler_gym.datasets.TarDataset(tar_urls: List[str], tar_sha256: Optional[str] = None, tar_compression: str = 'bz2', strip_prefix: str = '', **dataset_args)[source]
A dataset comprising a files tree stored in a tar archive.
This extends the
FilesDatasetclass by adding support for compressed archives of files. The archive is downloaded and unpacked on-demand.- __init__(tar_urls: List[str], tar_sha256: Optional[str] = None, tar_compression: str = 'bz2', strip_prefix: str = '', **dataset_args)[source]
Constructor.
- Parameters
tar_urls – A list of redundant URLS to download the tar archive from.
tar_sha256 – The SHA256 checksum of the downloaded tar archive.
tar_compression – The tar archive compression type. One of {“bz2”, “gz”}.
strip_prefix – An optional path prefix to strip. Only files that match this path prefix will be used as benchmarks.
dataset_args – See
FilesDataset.__init__().
- install() None[source]
Install this dataset locally.
Implementing this method is optional. If implementing this method, you must call
super().install()first.This method should not perform redundant work. This method should first detect whether any work needs to be done so that repeated calls to
install()will complete quickly.
TarDatasetWithManifest
- class compiler_gym.datasets.TarDatasetWithManifest(manifest_urls: List[str], manifest_sha256: str, manifest_compression: str = 'bz2', **dataset_args)[source]
A tarball-based dataset that reads the benchmark URIs from a separate manifest file.
A manifest file is a plain text file containing a list of benchmark names, one per line, and is shipped separately from the tar file. The idea is to allow the list of benchmark URIs to be enumerated in a more lightweight manner than downloading and unpacking the entire dataset. It does this by downloading and unpacking only the manifest to iterate over the URIs.
The manifest file is assumed to be correct and is not validated.
- __init__(manifest_urls: List[str], manifest_sha256: str, manifest_compression: str = 'bz2', **dataset_args)[source]
Constructor.
- Parameters
manifest_urls – A list of redundant URLS to download the compressed text file containing a list of benchmark URI suffixes, one per line.
manifest_sha256 – The sha256 checksum of the compressed manifest file.
manifest_compression – The manifest compression type. One of {“bz2”, “gz”}.
dataset_args – See
TarDataset.__init__().
- benchmark_uris() Iterable[str][source]
Enumerate the (possibly infinite) benchmark URIs.
Iteration order is consistent across runs. The order of
benchmarks()andbenchmark_uris()is the same.If the number of benchmarks in the dataset is infinite (
len(dataset) == math.inf), the iterable returned by this method will continue indefinitely.- Returns
An iterable sequence of benchmark URI strings.
- property size: int
The number of benchmarks in the dataset.
If the number of benchmarks is unknown or unbounded, for example because the dataset represents a program generator that can produce an infinite number of programs, the value is 0.
- Type
int
Datasets
- class compiler_gym.datasets.Datasets(datasets: Iterable[Dataset])[source]
A collection of datasets.
This class provides a dictionary-like interface for indexing and iterating over multiple
Datasetobjects. Select a dataset by URI using:>>> env.datasets["benchmark://cbench-v1"]Check whether a dataset exists using:
>>> "benchmark://cbench-v1" in env.datasets TrueOr iterate over the datasets using:
>>> for dataset in env.datasets: ... print(dataset.name) benchmark://cbench-v1 benchmark://github-v0 benchmark://npb-v0To select a benchmark from the datasets, use
benchmark():>>> env.datasets.benchmark("benchmark://a-v0/a")Use the
benchmarks()method to iterate over every benchmark in the datasets in a stable round robin order:>>> for benchmark in env.datasets.benchmarks(): ... print(benchmark) benchmark://cbench-v1/1 benchmark://github-v0/1 benchmark://npb-v0/1 benchmark://cbench-v1/2 ...If you want to exclude a dataset, delete it:
>>> del env.datasets["benchmark://b-v0"]
- __getitem__(dataset: str) Dataset[source]
Lookup a dataset.
- Parameters
dataset – A dataset name.
- Returns
A
Datasetinstance.- Raises
LookupError – If
datasetis not found.
- __setitem__(key: str, dataset: Dataset)[source]
Add a dataset to the collection.
- Parameters
key – The name of the dataset.
dataset – The dataset to add.
- __delitem__(dataset: str)[source]
Remove a dataset from the collection.
This does not affect any underlying storage used by dataset. See
uninstall()to clean up.
- Parameters
dataset – The name of a dataset.
- Returns
Trueif the dataset was removed,Falseif it was already removed.
- __iter__() Iterable[Dataset][source]
Iterate over the datasets.
Dataset order is consistent across runs.
Equivalent to
datasets.datasets(), but without the ability to iterate over the deprecated datasets.If the number of benchmarks in any of the datasets is infinite (
len(dataset) == math.inf), the iterable returned by this method will continue indefinitely.
- Returns
An iterable sequence of
Datasetinstances.
- benchmark(uri: str) Benchmark[source]
Select a benchmark.
Returns the corresponding
Benchmark, regardless of whether the containing dataset is installed or deprecated.
- Parameters
uri – The URI of the benchmark to return.
- Returns
A
Benchmarkinstance.
- benchmark_from_parsed_uri(uri: BenchmarkUri) Benchmark[source]
Select a benchmark.
Returns the corresponding
Benchmark, regardless of whether the containing dataset is installed or deprecated.
- Parameters
uri – The parsed URI of the benchmark to return.
- Returns
A
Benchmarkinstance.
- benchmark_uris(with_deprecated: bool = False) Iterable[str][source]
Enumerate the (possibly infinite) benchmark URIs.
Benchmark URI order is consistent across runs. URIs from datasets are returned in round robin order. The order of
benchmarks()andbenchmark_uris()is the same.If the number of benchmarks in any of the datasets is infinite (
len(dataset) == math.inf), the iterable returned by this method will continue indefinitely.
- Parameters
with_deprecated – If
True, include benchmarks from datasets that have been marked deprecated.- Returns
An iterable sequence of benchmark URI strings.
- benchmarks(with_deprecated: bool = False) Iterable[Benchmark][source]
Enumerate the (possibly infinite) benchmarks lazily.
Benchmarks order is consistent across runs. One benchmark from each dataset is returned in round robin order until all datasets have been fully enumerated. The order of
benchmarks()andbenchmark_uris()is the same.If the number of benchmarks in any of the datasets is infinite (
len(dataset) == math.inf), the iterable returned by this method will continue indefinitely.
- Parameters
with_deprecated – If
True, include benchmarks from datasets that have been marked deprecated.- Returns
An iterable sequence of
Benchmarkinstances.
- dataset(dataset: str) Dataset[source]
Get a dataset.
Return the corresponding
Dataset. Name lookup will succeed whether or not the dataset is deprecated.
- Parameters
dataset – A dataset name.
- Returns
A
Datasetinstance.- Raises
LookupError – If
datasetis not found.
- dataset_from_parsed_uri(uri: BenchmarkUri) Dataset[source]
Get a dataset.
Return the corresponding
Dataset. Name lookup will succeed whether or not the dataset is deprecated.
- Parameters
uri – A parsed URI.
- Returns
A
Datasetinstance.- Raises
LookupError – If
datasetis not found.
- datasets(with_deprecated: bool = False) Iterable[Dataset][source]
Enumerate the datasets.
Dataset order is consistent across runs.
- Parameters
with_deprecated – If
True, include datasets that have been marked as deprecated.- Returns
An iterable sequence of
Datasetinstances.
- random_benchmark(random_state: Optional[Generator] = None, weighted: bool = False, weights: Optional[Dict[str, float]] = None) Benchmark[source]
Select a benchmark randomly.
First, a dataset is selected randomly using
random_state.choice(list(datasets)). Then therandom_benchmark()method of the chosen dataset is called to select a benchmark.By default datasets are selected uniformly randomly. This means that datasets with a small number of benchmarks will be overrepresented compared to datasets with many benchmarks. To correct for this bias pass the argument
weighted=True, which weights the dataset choice by the number of benchmarks in each dataset, equivalent to:>>> random.choices(datasets, weights=[len(p) for p in datasets])Weighting the choice of datasets by their size means that datasets with infinite sizes (such as random program generators) will be excluded from sampling as their size is
0. To override the weights of datasets pass aweightsmapping:>>> env.datasets.random_benchmark(weighted=True, weights={ "benchmark://dataset-v0": 10, "benchmark://another-dataset-v0": 555, })
- Parameters
random_state – A random number generator. If not provided, a default
np.random.default_rng()is used.weighted – If set, weight the choice of dataset by the number of benchmarks in each dataset, or the value specified in the
weightsmapping.weights – An optional mapping from dataset URI to the weight to use when
weighted=True. This overrides the default value of using the dataset size.- Returns
A
Benchmarkinstance.