Files
muh-bot 2a7ca101d7 feat(cccl): integrate missing CCCL directories — python/, ci/, .agent/, docs/, test/
Sparse-checkout from NVIDIA/cccl main branch to complete cccl_upstream:

Added:
- python/cuda_cccl/ (226 files) — Python bindings for device-level algorithms
  Critical for muh toolchain: cuda.compute.reduce_into, scan, radix_sort, etc.
  Includes 204 .py files with full test coverage for all 27 algorithms
- ci/ (163 files) — Build/test infrastructure
  build_cub.sh, test_cub.sh, build_and_test_targets.sh, matrix.yaml
  Directly maps to our [INFRA-CI] and [INFRA-BUILD] items
- .agent/skills/ (7 files) — NVIDIA's own agent skills for CCCL
  cccl-style/SKILL.md, cccl-test/SKILL.md, sass-diff/SKILL.md
- docs/ (491 files) — Official CCCL documentation
  CI references, CMake guides, Python compute docs, libcudacxx PTX docs
- test/ (12 files) — Top-level integration tests (cuda_smoke, stdpar)
- Root configs: .clang-format, .clang-tidy, CONTRIBUTING.md, pyproject.toml
- CLAUDE.md symlink → AGENTS.md (NVIDIA's standard)

cccl_upstream now mirrors full NVIDIA/cccl structure:
  Before: 42M (cub + thrust + libcudacxx + cudax + c + examples + benchmarks)
  After:  53M (+python +ci +docs +.agent +test +configs)

This completes the CCCL base needed for:
- [muh-bench] items: ci/util/build_and_test_targets.sh for targeted builds
- [CCCL-verify] items: python/cuda_cccl/tests/ as reference implementations
- [CCCL-test] items: ci/test_cub.sh, ci/test_thrust.sh
- Agent workflow: .agent/skills/ for consistent style and test patterns
2026-08-07 02:34:33 +00:00

285 lines
8.2 KiB
Python

# CCCL Documentation Configuration File
# Generated to replace repo-docs with direct Sphinx usage
import os
import sys
from datetime import datetime
# Add extension directory to path
sys.path.insert(0, os.path.abspath("_ext"))
# Add Python CCCL package to path for autodoc
python_package_path = os.path.abspath("../python/cuda_cccl")
if os.path.exists(python_package_path):
sys.path.insert(0, python_package_path)
# Note: numpy is installed as a real dependency (see requirements.txt)
# This avoids issues with type annotations using union syntax (ndarray | type)
# -- Project information -----------------------------------------------------
project = "CUDA Core Compute Libraries"
copyright = f"{datetime.now().year}, NVIDIA Corporation"
author = "NVIDIA Corporation"
# Version information
_env_version = os.environ.get("SPHINX_CCCL_VER")
if _env_version:
release = _env_version
else:
try:
with open("VERSION.md", "r", encoding="utf-8") as f:
release = f.read().strip()
except Exception:
release = "unstable"
version = release
# -- General configuration ---------------------------------------------------
extensions = [
"sphinx.ext.autodoc",
"sphinx.ext.autosummary",
"sphinx.ext.intersphinx",
"sphinx.ext.napoleon",
"sphinx.ext.extlinks",
"sphinx.ext.mathjax",
"sphinx.ext.graphviz",
"sphinx.ext.doctest",
"myst_parser", # MyST parser for markdown support
"breathe", # For Doxygen integration - has built-in embed:rst support
# "exhale", # Disabled - causing build timeouts, API docs handled by breathe
"sphinx_design", # For dropdown, card, and other directives
"sphinx_copybutton",
"nbsphinx",
# "rst_processor", # Disabled - breathe handles embed:rst natively
"auto_api_generator", # Automatically generate API reference pages from Doxygen XML
]
# Breathe configuration for Doxygen integration
breathe_projects = {
"cub": "_build/doxygen/cub/xml",
"thrust": "_build/doxygen/thrust/xml",
"libcudacxx": "_build/doxygen/libcudacxx/xml",
"cudax": "_build/doxygen/cudax/xml",
}
breathe_default_project = "cub"
breathe_default_members = ("members", "undoc-members")
breathe_show_enumvalue_initializer = True
breathe_domain_by_extension = {"cuh": "cpp", "h": "cpp", "hpp": "cpp"}
# Configure cpp domain to handle cub namespace
cpp_index_common_prefix = ["cub::"]
# Preprocessor definitions for Breathe to handle CCCL macros
cpp_id_attributes = [
"__device__",
"__host__",
"__global__",
"__forceinline__",
"_CCCL_HOST_DEVICE",
"_CCCL_DEVICE",
"_CCCL_HOST",
"_CCCL_FORCEINLINE",
"_CCCL_API",
"_CCCL_HOST_API",
"_CCCL_DEVICE_API",
"_CCCL_NODEBUG_API",
"_CCCL_NODEBUG_HOST_API",
"_CCCL_NODEBUG_DEVICE_API",
"_CCCL_TRIVIAL_API",
"_CCCL_TRIVIAL_HOST_API",
"_CCCL_TRIVIAL_DEVICE_API",
]
cpp_paren_attributes = ["__declspec", "__align__"]
# Add support for .rst and .md files
source_suffix = {
".rst": "restructuredtext",
".md": "markdown",
}
templates_path = ["_templates"]
# Exclude patterns
exclude_patterns = [
"_build",
"_repo",
"tools",
"VERSION.md",
"Thumbs.db",
".DS_Store",
"env/**", # Virtual environment
"**/.pytest_cache",
"**/__pycache__",
"*.pyc",
"*.pyo",
]
# -- Options for HTML output -------------------------------------------------
html_theme = "nvidia_sphinx_theme"
html_logo = "_static/nvidia-logo.png"
html_baseurl = (
os.environ.get("CCCL_DOCS_BASE_URL", "https://nvidia.github.io/cccl/").rstrip("/")
+ "/"
)
html_theme_options = {
"icon_links": [
{
"name": "GitHub",
"url": "https://github.com/NVIDIA/cccl",
"icon": "fa-brands fa-github",
"type": "fontawesome",
}
],
"navigation_depth": 4,
"show_toc_level": 2,
"navbar_start": ["navbar-logo"],
"navbar_end": ["theme-switcher", "navbar-icon-links"],
"footer_start": ["copyright"],
"footer_end": ["sphinx-version"],
"sidebar_includehidden": True,
"collapse_navigation": False,
"switcher": {
"json_url": f"{html_baseurl}nv-versions.json",
"version_match": release,
},
}
html_static_path = ["_static"] if os.path.exists("_static") else []
# Images directory
if os.path.exists("img"):
html_static_path.append("img")
html_js_files = ["deduplicate_toc.js"]
html_title = "CUDA Core Compute Libraries"
# -- Options for extensions --------------------------------------------------
# Intersphinx mapping
intersphinx_mapping = {
"python": ("https://docs.python.org/3/", None),
"numpy": ("https://numpy.org/doc/stable/", None),
}
# MyST parser configuration
myst_enable_extensions = [
"colon_fence",
"deflist",
"html_image",
]
# Napoleon settings
napoleon_google_docstring = True
napoleon_numpy_docstring = True
napoleon_include_init_with_doc = False
napoleon_include_private_with_doc = False
napoleon_include_special_with_doc = True
napoleon_use_admonition_for_examples = False
napoleon_use_admonition_for_notes = False
napoleon_use_admonition_for_references = False
napoleon_use_ivar = False
napoleon_use_param = True
napoleon_use_rtype = True
napoleon_preprocess_types = False
napoleon_type_aliases = None
# Autodoc settings
autodoc_default_options = {
"members": True,
"member-order": "bysource",
"special-members": "__init__",
"undoc-members": True,
"exclude-members": "__weakref__",
}
# Enable type hints to be shown in the documentation
autodoc_type_hints = "description"
autodoc_type_aliases = {
"Operator": "Operator",
}
# Set Python domain primary for intersphinx
primary_domain = "py"
# Mock imports for Python documentation - these modules may not be installed
autodoc_mock_imports = [
"numba",
"numba.core",
"numba.core.cgutils",
"numba.core.extending",
"numba.core.typing",
"numba.core.typing.ctypes_utils",
"numba.core.typing.templates",
"numba.cuda",
"numba.cuda.cudadecl",
"numba.cuda.dispatcher",
"numba.extending",
"numba.types",
"cuda.bindings",
"cuda.bindings.driver",
"cuda.bindings.runtime",
"cuda.core",
"cuda.core.experimental",
"cuda.core.experimental._utils",
"cuda.core.experimental._utils.cuda_utils",
"cuda.pathfinder",
"llvmlite",
"llvmlite.ir",
# numpy is installed as a real dependency (see requirements.txt)
"numpydoc_test_module", # Mock to avoid import errors
"cupy",
"cuda.compute._bindings",
"cuda.compute._bindings_impl",
]
# External links configuration
extlinks = {
"github": ("https://github.com/NVIDIA/cccl/blob/main/%s", "%s"),
}
# Exhale not used - API documentation is handled directly through breathe directives
# Napoleon configuration (handles NumPy-style docstrings)
# Note: numpydoc settings removed as Napoleon is used instead
# Config copybutton
# Suppress specific warning categories that arise from breathe (Doxygen-to-Sphinx
# bridge) limitations. These cannot be fixed in our source headers or RST files.
#
# See also _BREATHE_SKIP_SYMBOLS in _ext/auto_api_generator.py for symbols that
# are excluded from page generation entirely due to unparsable declarations.
suppress_warnings = [
# Breathe walks each Doxygen XML file independently. When a symbol appears
# in both a namespace XML and a class/group XML (which is normal for Doxygen),
# breathe emits the C++ declaration twice, triggering a duplicate-declaration
# warning. There is no way to control this from our side without patching
# breathe's XML traversal.
"cpp.duplicate_declaration",
# When breathe expands doxygenfunction/doxygenvariable directives, it writes
# the resolved C++ signature into RST. Signatures containing default argument
# values (e.g. ``= {}``) or complex SFINAE expressions produce RST that the
# docutils parser cannot handle (mismatched inline-literal markers, unexpected
# braces, etc.). The source C++ is valid; the issue is that what breathe
# emits as RST is not valid RST.
"docutils",
]
copybutton_prompt_text = ">>> |$ |# "
autosummary_imported_members = False
autosummary_generate = True
autoclass_content = "class"
def setup(app):
if os.path.exists("_static/custom.css"):
app.add_css_file("custom.css")