Skip to content

[Draft] Document CUB environments for maintainers#10013

Draft
bernhardmgruber wants to merge 2 commits into
NVIDIA:mainfrom
bernhardmgruber:docs_env
Draft

[Draft] Document CUB environments for maintainers#10013
bernhardmgruber wants to merge 2 commits into
NVIDIA:mainfrom
bernhardmgruber:docs_env

Conversation

@bernhardmgruber

@bernhardmgruber bernhardmgruber commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

This PR tries to extend the CUB documentation on what environments are and how we use them.

Fixes: #7712
Fixes: #7276

@bernhardmgruber
bernhardmgruber requested a review from a team as a code owner July 20, 2026 13:50
@bernhardmgruber
bernhardmgruber requested a review from griwes July 20, 2026 13:50
@github-project-automation github-project-automation Bot moved this to Todo in CCCL Jul 20, 2026
@cccl-authenticator-app cccl-authenticator-app Bot moved this from Todo to In Review in CCCL Jul 20, 2026
@bernhardmgruber

Copy link
Copy Markdown
Contributor Author

I think it's really hard to explain how environments are handled in CUB without the many internal facilities we have for them. That makes me wonder whether some of them should become public. For example:

  • cuda::execution::__query_or
  • cuda::execution::__query_result_or_t
  • cuda::execution::__call_or
  • cuda::execution::__get_requirements[_t]
  • cuda::execution::__get_tuning[_t]

We don't need those in the public to implement CUB, but if a user wants to inspect environments themselves, they are going to have a hard time.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Summary by CodeRabbit

  • Documentation
    • Added comprehensive documentation for CUB execution environments, including their structure, supported queries, construction, and usage.
    • Documented environment properties such as streams, memory resources, execution requirements, and tuning policies.
    • Added the new execution environments page to the CUB documentation navigation.

Walkthrough

Changes

CUB environments and requirements

Layer / File(s) Summary
Environment construction and composition
docs/cub/environments.rst, docs/cub/index.rst
Documents queryable environments, property wrappers, composition, requirement and tuning builders, and adds the page to the CUB navigation.
Environment querying and algorithm contract
docs/cub/environments.rst
Documents CPO and fallback queries and the environment values expected by CUB device-wide algorithms.
Environment property assumptions
docs/cub/environments.rst
Documents non-owning environment behavior, passing expectations, query-only access, and asynchronous lifetime responsibilities.

Suggested reviewers: griwes


Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (2)
docs/thrust/system.rst (1)

1-11: 🧹 Nitpick | 🔵 Trivial

suggestion: Run the repository’s targeted documentation build and pre-commit checks before merging, and verify that both system/systems and system/diagnostics resolve in the generated navigation. These checks were not run in this file-only review.

Source: Coding guidelines

docs/thrust/algorithms/reductions/transformed.rst (1)

10-10: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

suggestion: Validate the revised API glob paths with the repository’s targeted documentation build and pre-commit. The generated API tree and required build instructions were not supplied, so path resolution cannot be confirmed from this diff alone. As per coding guidelines, review CONTRIBUTING.md and the CI overview before running validation.

Source: Coding guidelines


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 93891432-8bbd-4e1c-9c78-45dadcbf6a13

📥 Commits

Reviewing files that changed from the base of the PR and between 37d9d93 and 63e8f5e.

📒 Files selected for processing (65)
  • docs/cub/api.rst
  • docs/cub/benchmarking.rst
  • docs/cub/block_wide.rst
  • docs/cub/determinism.rst
  • docs/cub/developer_overview.rst
  • docs/cub/device_topk_requirements.rst
  • docs/cub/device_wide.rst
  • docs/cub/environments.rst
  • docs/cub/index.rst
  • docs/cub/thread_level.rst
  • docs/cub/tuning.rst
  • docs/cub/tuning_infra.rst
  • docs/cub/warp_wide.rst
  • docs/thrust/algorithms.rst
  • docs/thrust/algorithms/copying.rst
  • docs/thrust/algorithms/copying/gather.rst
  • docs/thrust/algorithms/copying/scatter.rst
  • docs/thrust/algorithms/merging.rst
  • docs/thrust/algorithms/prefix_sum.rst
  • docs/thrust/algorithms/prefix_sums/segmented.rst
  • docs/thrust/algorithms/prefix_sums/transformed.rst
  • docs/thrust/algorithms/reductions.rst
  • docs/thrust/algorithms/reductions/comparisons.rst
  • docs/thrust/algorithms/reductions/counting.rst
  • docs/thrust/algorithms/reductions/extrema.rst
  • docs/thrust/algorithms/reductions/logical.rst
  • docs/thrust/algorithms/reductions/predicates.rst
  • docs/thrust/algorithms/reductions/transformed.rst
  • docs/thrust/algorithms/reordering.rst
  • docs/thrust/algorithms/reordering/partitioning.rst
  • docs/thrust/algorithms/reordering/shuffling.rst
  • docs/thrust/algorithms/reordering/stream_compaction.rst
  • docs/thrust/algorithms/searching.rst
  • docs/thrust/algorithms/searching/binary_search.rst
  • docs/thrust/algorithms/set_operations.rst
  • docs/thrust/algorithms/sorting.rst
  • docs/thrust/algorithms/transformations.rst
  • docs/thrust/algorithms/transformations/filling.rst
  • docs/thrust/algorithms/transformations/modifying.rst
  • docs/thrust/algorithms/transformations/replacing.rst
  • docs/thrust/api.rst
  • docs/thrust/containers.rst
  • docs/thrust/function_objects.rst
  • docs/thrust/function_objects/adaptors.rst
  • docs/thrust/function_objects/placeholder.rst
  • docs/thrust/function_objects/predefined.rst
  • docs/thrust/index.rst
  • docs/thrust/iterators.rst
  • docs/thrust/memory_management.rst
  • docs/thrust/memory_management/allocators.rst
  • docs/thrust/memory_management/memory_resources.rst
  • docs/thrust/numerics.rst
  • docs/thrust/parallel_execution_policies.rst
  • docs/thrust/random.rst
  • docs/thrust/random/distributions.rst
  • docs/thrust/random/engine.rst
  • docs/thrust/random/engine_adaptors.rst
  • docs/thrust/random/predefined.rst
  • docs/thrust/system.rst
  • docs/thrust/system/diagnostics.rst
  • docs/thrust/system/systems.rst
  • docs/thrust/utility.rst
  • docs/thrust/utility/pair.rst
  • docs/thrust/utility/tuple.rst
  • docs/thrust/utility/type_traits.rst
💤 Files with no reviewable changes (2)
  • docs/thrust/api.rst
  • docs/cub/api.rst

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 5

🧹 Nitpick comments (2)
docs/thrust/system.rst (1)

1-11: 🧹 Nitpick | 🔵 Trivial

suggestion: Run the repository’s targeted documentation build and pre-commit checks before merging, and verify that both system/systems and system/diagnostics resolve in the generated navigation. These checks were not run in this file-only review.

Source: Coding guidelines

docs/thrust/algorithms/reductions/transformed.rst (1)

10-10: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

suggestion: Validate the revised API glob paths with the repository’s targeted documentation build and pre-commit. The generated API tree and required build instructions were not supplied, so path resolution cannot be confirmed from this diff alone. As per coding guidelines, review CONTRIBUTING.md and the CI overview before running validation.

Source: Coding guidelines


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 93891432-8bbd-4e1c-9c78-45dadcbf6a13

📥 Commits

Reviewing files that changed from the base of the PR and between 37d9d93 and 63e8f5e.

📒 Files selected for processing (65)
  • docs/cub/api.rst
  • docs/cub/benchmarking.rst
  • docs/cub/block_wide.rst
  • docs/cub/determinism.rst
  • docs/cub/developer_overview.rst
  • docs/cub/device_topk_requirements.rst
  • docs/cub/device_wide.rst
  • docs/cub/environments.rst
  • docs/cub/index.rst
  • docs/cub/thread_level.rst
  • docs/cub/tuning.rst
  • docs/cub/tuning_infra.rst
  • docs/cub/warp_wide.rst
  • docs/thrust/algorithms.rst
  • docs/thrust/algorithms/copying.rst
  • docs/thrust/algorithms/copying/gather.rst
  • docs/thrust/algorithms/copying/scatter.rst
  • docs/thrust/algorithms/merging.rst
  • docs/thrust/algorithms/prefix_sum.rst
  • docs/thrust/algorithms/prefix_sums/segmented.rst
  • docs/thrust/algorithms/prefix_sums/transformed.rst
  • docs/thrust/algorithms/reductions.rst
  • docs/thrust/algorithms/reductions/comparisons.rst
  • docs/thrust/algorithms/reductions/counting.rst
  • docs/thrust/algorithms/reductions/extrema.rst
  • docs/thrust/algorithms/reductions/logical.rst
  • docs/thrust/algorithms/reductions/predicates.rst
  • docs/thrust/algorithms/reductions/transformed.rst
  • docs/thrust/algorithms/reordering.rst
  • docs/thrust/algorithms/reordering/partitioning.rst
  • docs/thrust/algorithms/reordering/shuffling.rst
  • docs/thrust/algorithms/reordering/stream_compaction.rst
  • docs/thrust/algorithms/searching.rst
  • docs/thrust/algorithms/searching/binary_search.rst
  • docs/thrust/algorithms/set_operations.rst
  • docs/thrust/algorithms/sorting.rst
  • docs/thrust/algorithms/transformations.rst
  • docs/thrust/algorithms/transformations/filling.rst
  • docs/thrust/algorithms/transformations/modifying.rst
  • docs/thrust/algorithms/transformations/replacing.rst
  • docs/thrust/api.rst
  • docs/thrust/containers.rst
  • docs/thrust/function_objects.rst
  • docs/thrust/function_objects/adaptors.rst
  • docs/thrust/function_objects/placeholder.rst
  • docs/thrust/function_objects/predefined.rst
  • docs/thrust/index.rst
  • docs/thrust/iterators.rst
  • docs/thrust/memory_management.rst
  • docs/thrust/memory_management/allocators.rst
  • docs/thrust/memory_management/memory_resources.rst
  • docs/thrust/numerics.rst
  • docs/thrust/parallel_execution_policies.rst
  • docs/thrust/random.rst
  • docs/thrust/random/distributions.rst
  • docs/thrust/random/engine.rst
  • docs/thrust/random/engine_adaptors.rst
  • docs/thrust/random/predefined.rst
  • docs/thrust/system.rst
  • docs/thrust/system/diagnostics.rst
  • docs/thrust/system/systems.rst
  • docs/thrust/utility.rst
  • docs/thrust/utility/pair.rst
  • docs/thrust/utility/tuple.rst
  • docs/thrust/utility/type_traits.rst
💤 Files with no reviewable changes (2)
  • docs/thrust/api.rst
  • docs/cub/api.rst
🛑 Comments failed to post (5)
docs/cub/device_topk_requirements.rst (1)

45-75: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

rg -n "Device(Batched)?TopK|static_assert|determinism::|tie_break::|output_ordering::" cub docs/cub/device_topk_requirements.rst

Repository: NVIDIA/cccl

Length of output: 50368


🏁 Script executed:

sed -n '35,85p;190,330p' docs/cub/device_topk_requirements.rst | cat -n

Repository: NVIDIA/cccl

Length of output: 9749


🏁 Script executed:

sed -n '186,330p' docs/cub/device_topk_requirements.rst | cat -n

Repository: NVIDIA/cccl

Length of output: 6984


important: Split current support from the long-term contract docs/cub/device_topk_requirements.rst:45-75,202-203,304-323 still presents the deterministic default and suggested pinned/sorted requirements as available today, but the current-support note says only not_guaranteed/unspecified/unsorted compiles now and that cub::DeviceTopK still ignores tie_break. Mark the unsupported rows as future behavior or trim the table to combinations that compile today.

Sources: Coding guidelines, Path instructions

docs/cub/environments.rst (3)

48-49: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

pre-commit run --files docs/cub/environments.rst

Repository: NVIDIA/cccl

Length of output: 197


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== repo files ==\n'
git ls-files | rg '(^|/)(CONTRIBUTING\.md|CI|ci|\.github/workflows/|docs/cub/environments\.rst)$'

printf '\n== CONTRIBUTING.md (if present) ==\n'
if [ -f CONTRIBUTING.md ]; then
  cat -n CONTRIBUTING.md | sed -n '1,220p'
fi

printf '\n== CI overview candidates ==\n'
for f in $(git ls-files | rg '(^|/)(CI|ci|continuous|workflow|workflows).*(md|rst|txt)$|(^|/)(ci|CI)\.md$'); do
  echo "--- $f ---"
  wc -l "$f"
done

printf '\n== docs/cub/environments.rst (around the cited lines) ==\n'
cat -n docs/cub/environments.rst | sed -n '35,70p'

printf '\n== search for mr_env snippet and related constructs ==\n'
rg -n "mr_env|get_memory_resource|resource_ref|prop\{cuda::mr::get_memory_resource" docs/cub/environments.rst

Repository: NVIDIA/cccl

Length of output: 18255


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== surrounding context in docs/cub/environments.rst ==\n'
cat -n docs/cub/environments.rst | sed -n '1,90p'

printf '\n== occurrences of alloc in docs/cub/environments.rst ==\n'
rg -n '\balloc\b' docs/cub/environments.rst

Repository: NVIDIA/cccl

Length of output: 4990


important: Add the missing semicolon and use mr instead of alloc in mr_env; this example doesn't compile as written.

Sources: Coding guidelines, Path instructions


134-137: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

rg -n "__get_requirements_t|static_assert|determinism::run_to_run" docs/cub/environments.rst

Repository: NVIDIA/cccl

Length of output: 649


🏁 Script executed:

sed -n '120,155p' docs/cub/environments.rst | cat -n

Repository: NVIDIA/cccl

Length of output: 2202


important: Fix this example before publishing. It should call cuda::execution::__get_requirements_t consistently, and the assertion should compare the queried value directly, e.g. static_assert(determinism == cuda::execution::determinism::run_to_run);

Sources: Coding guidelines, Path instructions


159-159: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== repo root ==\n'
pwd

printf '\n== top-level files ==\n'
git ls-files | sed -n '1,120p'

printf '\n== CONTRIBUTING.md ==\n'
if git ls-files CONTRIBUTING.md >/dev/null 2>&1; then
  cat -n CONTRIBUTING.md | sed -n '1,220p'
else
  echo 'CONTRIBUTING.md not found'
fi

printf '\n== CI overview candidates ==\n'
git ls-files | rg 'CI|ci|workflow|github' || true

printf '\n== docs/cub/environments.rst excerpt ==\n'
cat -n docs/cub/environments.rst | sed -n '145,170p'

printf '\n== docs/cub/index.rst excerpt ==\n'
cat -n docs/cub/index.rst | sed -n '470,495p'

Repository: NVIDIA/cccl

Length of output: 50369


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== CONTRIBUTING exists? =="
git ls-files CONTRIBUTING.md

echo "== CI guidance files =="
git ls-files | rg '(^|/)(CI|ci|workflow|github).*(md|rst)$|(^|/)CI\.md$|(^|/)ci\.md$' || true

echo "== docs/cub/environments.rst lines 155-162 =="
sed -n '155,162p' docs/cub/environments.rst | cat -n

echo "== docs/cub/index.rst lines 482-489 =="
sed -n '482,489p' docs/cub/index.rst | cat -n

Repository: NVIDIA/cccl

Length of output: 1499


important: Fix the malformed reST link markup in both docs files.

  • docs/cub/environments.rst: the second link is missing its opening backtick (tuning <cub-policy-selectors>_).
  • docs/cub/index.rst: add the opening backtick before the external URL so the link renders correctly.
📍 Affects 2 files
  • docs/cub/environments.rst#L159-L159 (this comment)
  • docs/cub/index.rst#L486-L486

Sources: Coding guidelines, Path instructions

docs/thrust/function_objects.rst (1)

53-56: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

important: this thrust::transform call passes only one input range, but the lambda takes two parameters, so the example does not compile. Add b.begin() as the second input range, or make the lambda unary.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: be009a6d-24e4-488f-8a25-273de87e0f64

📥 Commits

Reviewing files that changed from the base of the PR and between 63e8f5e and 480b21a.

📒 Files selected for processing (2)
  • docs/cub/environments.rst
  • docs/cub/index.rst
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/cub/environments.rst

Comment thread docs/cub/index.rst
warp_wide
block_wide
device_wide
environments

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

important: Do not expose the environments page as user-facing guidance until its internal APIs have an explicit support contract. The page directs readers to __query_or, __get_requirements_t, and __get_tuning_t; either document these as unstable implementation details or provide public replacements before adding this navigation entry. As per path instructions, documentation changes must address technical accuracy and API/version consistency.

Source: Path instructions


🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

important: Fix the non-compiling C++ example in docs/cub/environments.rst before exposing it. The prop{...} declaration for mr_env is missing a terminating semicolon, violating the buildable-examples requirement.

Source: Path instructions

@bernhardmgruber

Copy link
Copy Markdown
Contributor Author

Reflecting a bit after a discussion with @gonidelis and reading #7712 again, I think we actually need two documentation pages. One that shows the user how to build an environment to be passed to a CUB algorithm. We don't explain CPOs or queries or what else you can do with an environment. Then a second page (maybe in the developer section) what else we can do with an environment. How to query it, what operations can be performed etc.

@gonidelis can you make a new PR and extract the above described subset addressing #7712? Thx!

@bernhardmgruber
bernhardmgruber marked this pull request as draft July 21, 2026 10:02
@copy-pr-bot

copy-pr-bot Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

@cccl-authenticator-app cccl-authenticator-app Bot moved this from In Review to In Progress in CCCL Jul 21, 2026
@bernhardmgruber bernhardmgruber changed the title [Draft] Document CUB environments [Draft] Document CUB environments for maintainers Jul 22, 2026
Comment thread docs/cub/environments.rst

Almost all CUB device-wide algorithms accept an execution environment as their last argument.
Environments are objects responding to queries which return values.
A "query" in this case is usually a (tag) type naming the query, for example `cuda::execution::__get_tuning_t`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should probably list the most commonly used ones

Suggested change
A "query" in this case is usually a (tag) type naming the query, for example `cuda::execution::__get_tuning_t`.
A "query" in this case is usually a (tag) type naming the query, for example `cuda::execution::__get_tuning_t`, `cuda::get_stream`, or `cuda::mr::get_memory_resource`.

Comment thread docs/cub/environments.rst
Comment on lines +15 to +16
The purpose of an environment is to provide properties that govern the execution of an algorithm,
like the used CUDA stream, memory resource, required determinism, requested tuning, etc.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Personally the explanation that really illuminated environments was @gevtushenko likening them to **kwargs arguments in Python. i.e. some kind of optional, extensible hook that users can attach arbitrary information to which the algorithm interprets as needed.

Perhaps we can snake this in here somewhere?

Comment thread docs/cub/environments.rst
See also the documentation on `determinism <cub-determinism>`_ and tuning <cub-policy-selectors>`_.


Properties of environments

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO this section should go first. The most important thing for maintainers is how to pass envs around and what they should not do with them, so knowing the following upfront is the most useful information:

  1. Environment queries should all be immutable so we should always pass by const &.
  2. Algorithms do not need to concern themselves with env lifetimes.

Also the following questions come to mind here:

  1. Are environments required to be idempotent? Is it OK to query an env multiple times for the same information or should we cache results?
  2. What is the general policy for handling environments that contain properties you do not handle? Should you static_assert()? Let it pass?

Comment thread docs/cub/environments.rst
If no such value is found, it will return the fallback value, `fallback_stream`, instead.

..
TODO(bgruber) Does cuda::std::execution::__query_or(cudaStream_t{}, cuda::get_stream, fallback_stream); work?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It does not.

auto r = cuda::std::execution::__query_or(cudaStream_t{}, cuda::get_stream, 1.0f);

static_assert(same_as<decltype(r), float>);

But cuda::get_stream(cudaStream_t{}) works. cuda::__call_or() also works, returning the cudaStream_t instead of the float.

Comment thread docs/cub/environments.rst
Querying environments
--------------------------------------------------------------------------------

There are two ways to get a value out of an environment again.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

*four, also cuda::__call_or and cuda::__lazy_call_or. Actually this is a good point to bring this up, we should really unify all of these, I myself don't actually know which is better.

Comment thread docs/cub/environments.rst
cudaStream_t stream = cuda::get_stream(env);

If `env` would not contain any value responding to the `cuda::get_stream` query, the above would not compile.
Using a CPO to query an environment is preferred over using `__query_or` in general.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This statement seems counterintuitive. The environments are usually optional, so it's not known (unless you check) whether an env can satisfy a query, so __query_or seems like the safest general method no?

Comment thread docs/cub/environments.rst
static_assert(is_same_v<decltype(determinism), cuda::execution::determinism::run_to_run>):

..
TODO(bgruber): Should we mention `__queryable_with`?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I think so. It would round out the discussion by documenting how to check whether you can query without doing it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

[DOC]: Add documentation page for "How to use Environments" [DOC] Improve CUB environment documentation

2 participants