From aaa91c8c26962e4c83e7b68cbf98c4dd79acbd12 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Mon, 25 Nov 2024 10:51:03 -0600 Subject: [PATCH 1/5] remove more uses of cugraph-ops --- .github/workflows/build.yaml | 6 ---- .github/workflows/pr.yaml | 7 ---- .../all_cuda-118_arch-x86_64.yaml | 1 - .../all_cuda-125_arch-x86_64.yaml | 1 - conda/recipes/libcugraph/meta.yaml | 2 -- dependencies.yaml | 33 +------------------ python/pylibcugraph/CMakeLists.txt | 10 ------ 7 files changed, 1 insertion(+), 59 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 739996a264c..357d0d9bcae 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -76,9 +76,6 @@ jobs: sha: ${{ inputs.sha }} date: ${{ inputs.date }} script: ci/build_wheel_pylibcugraph.sh - extra-repo: rapidsai/cugraph-ops - extra-repo-sha: branch-25.02 - extra-repo-deploy-key: CUGRAPH_OPS_SSH_PRIVATE_DEPLOY_KEY node_type: cpu32 wheel-publish-pylibcugraph: needs: wheel-build-pylibcugraph @@ -100,9 +97,6 @@ jobs: sha: ${{ inputs.sha }} date: ${{ inputs.date }} script: ci/build_wheel_cugraph.sh - extra-repo: rapidsai/cugraph-ops - extra-repo-sha: branch-25.02 - extra-repo-deploy-key: CUGRAPH_OPS_SSH_PRIVATE_DEPLOY_KEY wheel-publish-cugraph: needs: wheel-build-cugraph secrets: inherit diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index bb2a5ebc6ce..3f2e43b2ea9 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -129,9 +129,6 @@ jobs: with: build_type: pull-request script: ci/build_wheel_pylibcugraph.sh - extra-repo: rapidsai/cugraph-ops - extra-repo-sha: branch-25.02 - extra-repo-deploy-key: CUGRAPH_OPS_SSH_PRIVATE_DEPLOY_KEY node_type: cpu32 wheel-tests-pylibcugraph: needs: [wheel-build-pylibcugraph, changed-files] @@ -148,9 +145,6 @@ jobs: with: build_type: pull-request script: ci/build_wheel_cugraph.sh - extra-repo: rapidsai/cugraph-ops - extra-repo-sha: branch-25.02 - extra-repo-deploy-key: CUGRAPH_OPS_SSH_PRIVATE_DEPLOY_KEY wheel-tests-cugraph: needs: [wheel-build-cugraph, changed-files] secrets: inherit @@ -166,7 +160,6 @@ jobs: arch: '["amd64"]' cuda: '["12.5"]' node_type: cpu32 - extra-repo-deploy-key: CUGRAPH_OPS_SSH_PRIVATE_DEPLOY_KEY build_command: | sccache -z; build-all --verbose -j$(nproc --ignore=1) -DBUILD_CUGRAPH_MG_TESTS=ON; diff --git a/conda/environments/all_cuda-118_arch-x86_64.yaml b/conda/environments/all_cuda-118_arch-x86_64.yaml index 5275d608440..9fdba6e5970 100644 --- a/conda/environments/all_cuda-118_arch-x86_64.yaml +++ b/conda/environments/all_cuda-118_arch-x86_64.yaml @@ -26,7 +26,6 @@ dependencies: - graphviz - ipython - libcudf==25.2.*,>=0.0.0a0 -- libcugraphops==25.2.*,>=0.0.0a0 - libraft-headers==25.2.*,>=0.0.0a0 - libraft==25.2.*,>=0.0.0a0 - librmm==25.2.*,>=0.0.0a0 diff --git a/conda/environments/all_cuda-125_arch-x86_64.yaml b/conda/environments/all_cuda-125_arch-x86_64.yaml index 33c9be9cdda..a64e0f481d5 100644 --- a/conda/environments/all_cuda-125_arch-x86_64.yaml +++ b/conda/environments/all_cuda-125_arch-x86_64.yaml @@ -29,7 +29,6 @@ dependencies: - ipython - libcublas-dev - libcudf==25.2.*,>=0.0.0a0 -- libcugraphops==25.2.*,>=0.0.0a0 - libcurand-dev - libcusolver-dev - libcusparse-dev diff --git a/conda/recipes/libcugraph/meta.yaml b/conda/recipes/libcugraph/meta.yaml index 8b1fadbba25..922d5e577b2 100644 --- a/conda/recipes/libcugraph/meta.yaml +++ b/conda/recipes/libcugraph/meta.yaml @@ -69,7 +69,6 @@ requirements: - cuda-version ={{ cuda_version }} - doxygen {{ doxygen_version }} - libcudf ={{ minor_version }} - - libcugraphops ={{ minor_version }} - libraft ={{ minor_version }} - libraft-headers ={{ minor_version }} - librmm ={{ minor_version }} @@ -114,7 +113,6 @@ outputs: - libcusolver - libcusparse {% endif %} - - libcugraphops ={{ minor_version }} - libraft ={{ minor_version }} - libraft-headers ={{ minor_version }} - librmm ={{ minor_version }} diff --git a/dependencies.yaml b/dependencies.yaml index 3b53aecec01..821ed7a6a84 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -20,8 +20,6 @@ files: - depends_on_dask_cudf - depends_on_pylibraft - depends_on_raft_dask - # Deprecate pylibcugraphops - - depends_on_pylibcugraphops - depends_on_pylibwholegraph - depends_on_cupy - depends_on_pytorch @@ -41,8 +39,6 @@ files: - cuda_version - docs - py_version - # Deprecate pylibcugraphops - - depends_on_pylibcugraphops test_cpp: output: none includes: @@ -295,8 +291,6 @@ dependencies: - c-compiler - cxx-compiler - libcudf==25.2.*,>=0.0.0a0 - # Deprecate libcugraphops - - libcugraphops==25.2.*,>=0.0.0a0 - libraft-headers==25.2.*,>=0.0.0a0 - libraft==25.2.*,>=0.0.0a0 - librmm==25.2.*,>=0.0.0a0 @@ -339,6 +333,7 @@ dependencies: - nbsphinx - numpydoc - pydata-sphinx-theme + - pylibcugraphops==25.2.*,>=0.0.0a0 - recommonmark - sphinx-copybutton - sphinx-markdown-tables @@ -710,32 +705,6 @@ dependencies: - pylibcugraph-cu11==25.2.*,>=0.0.0a0 - {matrix: null, packages: [*pylibcugraph_unsuffixed]} - # deprecate pylibcugraphops - depends_on_pylibcugraphops: - common: - - output_types: conda - packages: - - &pylibcugraphops_unsuffixed pylibcugraphops==25.2.*,>=0.0.0a0 - - output_types: requirements - packages: - # pip recognizes the index as a global option for the requirements.txt file - - --extra-index-url=https://pypi.nvidia.com - - --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple - specific: - - output_types: [requirements, pyproject] - matrices: - - matrix: - cuda: "12.*" - cuda_suffixed: "true" - packages: - - pylibcugraphops-cu12==25.2.*,>=0.0.0a0 - - matrix: - cuda: "11.*" - cuda_suffixed: "true" - packages: - - pylibcugraphops-cu11==25.2.*,>=0.0.0a0 - - {matrix: null, packages: [*pylibcugraphops_unsuffixed]} - depends_on_cupy: common: - output_types: conda diff --git a/python/pylibcugraph/CMakeLists.txt b/python/pylibcugraph/CMakeLists.txt index 045628e9c0d..22d788ff253 100644 --- a/python/pylibcugraph/CMakeLists.txt +++ b/python/pylibcugraph/CMakeLists.txt @@ -32,14 +32,8 @@ project( option(FIND_CUGRAPH_CPP "Search for existing CUGRAPH C++ installations before defaulting to local files" OFF ) -option(USE_CUGRAPH_OPS "Enable all functions that call cugraph-ops" ON) option(USE_CUDA_MATH_WHEELS "Use the CUDA math wheels instead of the system libraries" OFF) -if(NOT USE_CUGRAPH_OPS) - message(STATUS "Disabling libcugraph functions that reference cugraph-ops") - add_compile_definitions(NO_CUGRAPH_OPS) -endif() - # If the user requested it we attempt to find CUGRAPH. if(FIND_CUGRAPH_CPP) find_package(cugraph "${RAPIDS_VERSION}" REQUIRED) @@ -54,14 +48,10 @@ if (NOT cugraph_FOUND) set(BUILD_TESTS OFF) set(BUILD_CUGRAPH_MG_TESTS OFF) - set(BUILD_CUGRAPH_OPS_CPP_TESTS OFF) set(CUDA_STATIC_RUNTIME ON) set(CUDA_STATIC_MATH_LIBRARIES ON) set(USE_RAFT_STATIC ON) set(CUGRAPH_COMPILE_RAFT_LIB ON) - set(CUGRAPH_USE_CUGRAPH_OPS_STATIC ON) - set(CUGRAPH_EXCLUDE_CUGRAPH_OPS_FROM_ALL ON) - set(ALLOW_CLONE_CUGRAPH_OPS ON) if(CUDAToolkit_VERSION VERSION_GREATER_EQUAL 12.0) set(CUDA_STATIC_MATH_LIBRARIES OFF) From 126332b572cdcf6654222793f169b1f385f4ac8e Mon Sep 17 00:00:00 2001 From: James Lamb Date: Mon, 25 Nov 2024 12:35:51 -0600 Subject: [PATCH 2/5] remove cugraph_ops_utils.hpp, unnecessary CMake args in wheel building scripts --- .github/workflows/pr.yaml | 6 ++-- ci/build_wheel_cugraph.sh | 2 +- ci/build_wheel_pylibcugraph.sh | 2 +- ci/release/update-version.sh | 2 -- cpp/.clang-format | 2 +- cpp/CMakeLists.txt | 1 - cpp/src/utilities/cugraph_ops_utils.hpp | 44 ------------------------- 7 files changed, 6 insertions(+), 53 deletions(-) delete mode 100644 cpp/src/utilities/cugraph_ops_utils.hpp diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 3f2e43b2ea9..b7cc68807ce 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -38,7 +38,7 @@ jobs: files_yaml: | test_cpp: - '**' - - '!.devcontainers/**' + - '!.devcontainer/**' - '!CONTRIBUTING.md' - '!README.md' - '!docs/**' @@ -49,13 +49,13 @@ jobs: - '!readme_pages/**' test_notebooks: - '**' - - '!.devcontainers/**' + - '!.devcontainer/**' - '!CONTRIBUTING.md' - '!README.md' - '!docs/**' test_python: - '**' - - '!.devcontainers/**' + - '!.devcontainer/**' - '!CONTRIBUTING.md' - '!README.md' - '!docs/**' diff --git a/ci/build_wheel_cugraph.sh b/ci/build_wheel_cugraph.sh index b937fd7f6d8..11ab9acc58c 100755 --- a/ci/build_wheel_cugraph.sh +++ b/ci/build_wheel_cugraph.sh @@ -30,7 +30,7 @@ case "${RAPIDS_CUDA_VERSION}" in ;; esac -export SKBUILD_CMAKE_ARGS="-DDETECT_CONDA_ENV=OFF;-DFIND_CUGRAPH_CPP=OFF;-DCPM_cugraph-ops_SOURCE=${GITHUB_WORKSPACE}/cugraph-ops/${EXTRA_CMAKE_ARGS}" +export SKBUILD_CMAKE_ARGS="-DDETECT_CONDA_ENV=OFF;-DFIND_CUGRAPH_CPP=OFF${EXTRA_CMAKE_ARGS}" export SKBUILD_BUILD_TOOL_ARGS="-j${PARALLEL_LEVEL};-l${PARALLEL_LEVEL}" ./ci/build_wheel.sh cugraph ${package_dir} diff --git a/ci/build_wheel_pylibcugraph.sh b/ci/build_wheel_pylibcugraph.sh index 928e12d2350..8bdfa20ee77 100755 --- a/ci/build_wheel_pylibcugraph.sh +++ b/ci/build_wheel_pylibcugraph.sh @@ -17,7 +17,7 @@ case "${RAPIDS_CUDA_VERSION}" in ;; esac -export SKBUILD_CMAKE_ARGS="-DDETECT_CONDA_ENV=OFF;-DFIND_CUGRAPH_CPP=OFF;-DCPM_cugraph-ops_SOURCE=${GITHUB_WORKSPACE}/cugraph-ops/${EXTRA_CMAKE_ARGS}" +export SKBUILD_CMAKE_ARGS="-DDETECT_CONDA_ENV=OFF;-DFIND_CUGRAPH_CPP=OFF${EXTRA_CMAKE_ARGS}" export SKBUILD_BUILD_TOOL_ARGS="-j${PARALLEL_LEVEL};-l${PARALLEL_LEVEL}" ./ci/build_wheel.sh pylibcugraph ${package_dir} diff --git a/ci/release/update-version.sh b/ci/release/update-version.sh index 961f7816caa..9aff2ec2711 100755 --- a/ci/release/update-version.sh +++ b/ci/release/update-version.sh @@ -98,8 +98,6 @@ done # CI files for FILE in .github/workflows/*.yaml; do sed_runner "/shared-workflows/ s/@.*/@branch-${NEXT_SHORT_TAG}/g" "${FILE}" - # Wheel builds clone cugraph-ops, update its branch - sed_runner "s/extra-repo-sha: branch-.*/extra-repo-sha: branch-${NEXT_SHORT_TAG}/g" "${FILE}" # Wheel builds install dask-cuda from source, update its branch sed_runner "s/dask-cuda.git@branch-[0-9][0-9].[0-9][0-9]/dask-cuda.git@branch-${NEXT_SHORT_TAG}/g" "${FILE}" done diff --git a/cpp/.clang-format b/cpp/.clang-format index 3095c6d514a..16abf7475fa 100644 --- a/cpp/.clang-format +++ b/cpp/.clang-format @@ -77,7 +77,7 @@ IncludeCategories: Priority: 1 - Regex: '^ - $ PRIVATE ${COMPILED_RAFT_LIB} cuco::cuco diff --git a/cpp/src/utilities/cugraph_ops_utils.hpp b/cpp/src/utilities/cugraph_ops_utils.hpp deleted file mode 100644 index bb014b9d7d6..00000000000 --- a/cpp/src/utilities/cugraph_ops_utils.hpp +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2021-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include -#include - -namespace cugraph { -namespace detail { - -template -ops::graph::csc get_graph( - graph_view_t const& gview) -{ - ops::graph::csc graph; - graph.n_src_nodes = gview.number_of_vertices(); - graph.n_dst_nodes = gview.number_of_vertices(); - graph.n_indices = gview.local_edge_partition_view().number_of_edges(); - // FIXME this is sufficient for now, but if there is a fast (cached) way - // of getting max degree, use that instead - graph.dst_max_in_degree = std::numeric_limits::max(); - // FIXME: this is evil and is just temporary until we have a matching type in cugraph-ops - // or we change the type accepted by the functions calling into cugraph-ops - graph.offsets = const_cast(gview.local_edge_partition_view().offsets().data()); - graph.indices = const_cast(gview.local_edge_partition_view().indices().data()); - return graph; -} - -} // namespace detail -} // namespace cugraph From a2d679fd819dbe5c493039e20631d68850c0acbf Mon Sep 17 00:00:00 2001 From: James Lamb Date: Tue, 26 Nov 2024 10:37:50 -0600 Subject: [PATCH 3/5] remove docs, pytest marker --- README.md | 1 - build.sh | 2 +- ci/build_docs.sh | 3 +- ci/release/update-version.sh | 2 - .../all_cuda-118_arch-x86_64.yaml | 1 - .../all_cuda-125_arch-x86_64.yaml | 1 - dependencies.yaml | 1 - .../api_docs/cugraph-ops/c_cpp/index.rst | 2 - .../source/api_docs/cugraph-ops/index.rst | 11 -- .../api_docs/cugraph-ops/python/dimenet.rst | 24 ---- .../cugraph-ops/python/graph_types.rst | 34 ------ .../api_docs/cugraph-ops/python/index.rst | 13 --- .../api_docs/cugraph-ops/python/operators.rst | 109 ------------------ .../api_docs/cugraph-ops/python/pytorch.rst | 36 ------ docs/cugraph/source/api_docs/index.rst | 1 - docs/cugraph/source/conf.py | 1 - .../graph_support/cugraphops_support.rst | 10 -- .../source/graph_support/gnn_support.rst | 1 - .../wholegraph/installation/container.md | 2 +- .../tests/sampling/test_random_walks.py | 6 +- .../tests/sampling/test_random_walks_mg.py | 1 - .../sampling/test_uniform_neighbor_sample.py | 4 - .../test_uniform_neighbor_sample_mg.py | 5 - .../tests/test_uniform_neighbor_sample.py | 3 +- python/pylibcugraph/pytest.ini | 3 - readme_pages/CONTRIBUTING.md | 2 +- readme_pages/cugraph_ops.md | 17 --- 27 files changed, 6 insertions(+), 290 deletions(-) delete mode 100644 docs/cugraph/source/api_docs/cugraph-ops/c_cpp/index.rst delete mode 100644 docs/cugraph/source/api_docs/cugraph-ops/index.rst delete mode 100644 docs/cugraph/source/api_docs/cugraph-ops/python/dimenet.rst delete mode 100644 docs/cugraph/source/api_docs/cugraph-ops/python/graph_types.rst delete mode 100644 docs/cugraph/source/api_docs/cugraph-ops/python/index.rst delete mode 100644 docs/cugraph/source/api_docs/cugraph-ops/python/operators.rst delete mode 100644 docs/cugraph/source/api_docs/cugraph-ops/python/pytorch.rst delete mode 100644 docs/cugraph/source/graph_support/cugraphops_support.rst delete mode 100644 readme_pages/cugraph_ops.md diff --git a/README.md b/README.md index 857406075e0..c8fc07d5ae2 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,6 @@ That's it. NetworkX now leverages cuGraph for accelerated graph algorithms. - [libcugraph (C/C++/CUDA)](./readme_pages/libcugraph.md) - [nx-cugraph](https://rapids.ai/nx-cugraph/) - [cugraph-service](./readme_pages/cugraph_service.md) - - [cugraph-ops](./readme_pages/cugraph_ops.md) - API Docs - Python - [Python Nightly](https://docs.rapids.ai/api/cugraph/nightly/) diff --git a/build.sh b/build.sh index 756045461dd..645a2459e73 100755 --- a/build.sh +++ b/build.sh @@ -331,7 +331,7 @@ if hasArg docs || hasArg all; then ${CMAKE_VERBOSE_OPTION} fi - for PROJECT in libcugraphops libwholegraph; do + for PROJECT in libwholegraph; do XML_DIR="${REPODIR}/docs/cugraph/${PROJECT}" rm -rf "${XML_DIR}" mkdir -p "${XML_DIR}" diff --git a/ci/build_docs.sh b/ci/build_docs.sh index 2d7e90da8d0..1c90f5b243f 100755 --- a/ci/build_docs.sh +++ b/ci/build_docs.sh @@ -46,14 +46,13 @@ rapids-mamba-retry install \ "cugraph-service-server=${RAPIDS_VERSION_MAJOR_MINOR}.*" \ "cugraph-service-client=${RAPIDS_VERSION_MAJOR_MINOR}.*" \ "libcugraph_etl=${RAPIDS_VERSION_MAJOR_MINOR}.*" \ - "pylibcugraphops=${RAPIDS_VERSION_MAJOR_MINOR}.*" \ "pylibwholegraph=${RAPIDS_VERSION_MAJOR_MINOR}.*" \ 'pytorch>=2.3' \ "cuda-version=${CONDA_CUDA_VERSION}" export RAPIDS_DOCS_DIR="$(mktemp -d)" -for PROJECT in libcugraphops libwholegraph; do +for PROJECT in libwholegraph; do rapids-logger "Download ${PROJECT} xml_tar" TMP_DIR=$(mktemp -d) export XML_DIR_${PROJECT^^}="$TMP_DIR" diff --git a/ci/release/update-version.sh b/ci/release/update-version.sh index 9aff2ec2711..a73745f2c0e 100755 --- a/ci/release/update-version.sh +++ b/ci/release/update-version.sh @@ -57,12 +57,10 @@ DEPENDENCIES=( dask-cuda dask-cudf libcudf - libcugraphops libraft libraft-headers librmm pylibcugraph - pylibcugraphops pylibwholegraph pylibraft pyraft diff --git a/conda/environments/all_cuda-118_arch-x86_64.yaml b/conda/environments/all_cuda-118_arch-x86_64.yaml index 9fdba6e5970..e9f6842e8b8 100644 --- a/conda/environments/all_cuda-118_arch-x86_64.yaml +++ b/conda/environments/all_cuda-118_arch-x86_64.yaml @@ -44,7 +44,6 @@ dependencies: - pre-commit - pydantic - pydata-sphinx-theme -- pylibcugraphops==25.2.*,>=0.0.0a0 - pylibraft==25.2.*,>=0.0.0a0 - pylibwholegraph==25.2.*,>=0.0.0a0 - pytest diff --git a/conda/environments/all_cuda-125_arch-x86_64.yaml b/conda/environments/all_cuda-125_arch-x86_64.yaml index a64e0f481d5..13e102862ab 100644 --- a/conda/environments/all_cuda-125_arch-x86_64.yaml +++ b/conda/environments/all_cuda-125_arch-x86_64.yaml @@ -49,7 +49,6 @@ dependencies: - pre-commit - pydantic - pydata-sphinx-theme -- pylibcugraphops==25.2.*,>=0.0.0a0 - pylibraft==25.2.*,>=0.0.0a0 - pylibwholegraph==25.2.*,>=0.0.0a0 - pytest diff --git a/dependencies.yaml b/dependencies.yaml index 821ed7a6a84..93983a1a29b 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -333,7 +333,6 @@ dependencies: - nbsphinx - numpydoc - pydata-sphinx-theme - - pylibcugraphops==25.2.*,>=0.0.0a0 - recommonmark - sphinx-copybutton - sphinx-markdown-tables diff --git a/docs/cugraph/source/api_docs/cugraph-ops/c_cpp/index.rst b/docs/cugraph/source/api_docs/cugraph-ops/c_cpp/index.rst deleted file mode 100644 index 39dae955ef3..00000000000 --- a/docs/cugraph/source/api_docs/cugraph-ops/c_cpp/index.rst +++ /dev/null @@ -1,2 +0,0 @@ -cugraph-ops C++ API Reference -============================= diff --git a/docs/cugraph/source/api_docs/cugraph-ops/index.rst b/docs/cugraph/source/api_docs/cugraph-ops/index.rst deleted file mode 100644 index 0f6a6c937d3..00000000000 --- a/docs/cugraph/source/api_docs/cugraph-ops/index.rst +++ /dev/null @@ -1,11 +0,0 @@ -cugraph-ops API reference -========================= - -This page provides a list of all publicly accessible modules, methods and classes through `pylibcugraphops.*` namespace. - -.. toctree:: - :maxdepth: 2 - :caption: API Documentation - - python/index - c_cpp/index diff --git a/docs/cugraph/source/api_docs/cugraph-ops/python/dimenet.rst b/docs/cugraph/source/api_docs/cugraph-ops/python/dimenet.rst deleted file mode 100644 index 6fadcc57b22..00000000000 --- a/docs/cugraph/source/api_docs/cugraph-ops/python/dimenet.rst +++ /dev/null @@ -1,24 +0,0 @@ -================= -Dimenet operators -================= - -.. currentmodule:: pylibcugraphops - -Radial Basis Functions ----------------------- -.. autosummary:: - :toctree: ../../api/ops - - dimenet.radial_basis_fwd - dimenet.radial_basis_bwd - dimenet.radial_basis_bwd_bwd - -Edge-to-Edge Aggregation -------------------------- -.. autosummary:: - :toctree: ../../api/ops - - dimenet.agg_edge_to_edge_fwd - dimenet.agg_edge_to_edge_bwd - dimenet.agg_edge_to_edge_bwd2_grad - dimenet.agg_edge_to_edge_bwd2_main diff --git a/docs/cugraph/source/api_docs/cugraph-ops/python/graph_types.rst b/docs/cugraph/source/api_docs/cugraph-ops/python/graph_types.rst deleted file mode 100644 index 141d40393a5..00000000000 --- a/docs/cugraph/source/api_docs/cugraph-ops/python/graph_types.rst +++ /dev/null @@ -1,34 +0,0 @@ -=========== -Graph types -=========== - -.. currentmodule:: pylibcugraphops - - -CSC Graph ------------------ -.. autosummary:: - :toctree: ../../api/ops - - make_csc - -Heterogenous CSC Graph ----------------------- -.. autosummary:: - :toctree: ../../api/ops - - make_csc_hg - -Bipartite Graph ------------------ -.. autosummary:: - :toctree: ../../api/ops - - make_bipartite_csc - -Heterogenous Bipartite Graph ----------------------------- -.. autosummary:: - :toctree: ../../api/ops - - make_bipartite_csc_hg diff --git a/docs/cugraph/source/api_docs/cugraph-ops/python/index.rst b/docs/cugraph/source/api_docs/cugraph-ops/python/index.rst deleted file mode 100644 index fb25f2fa005..00000000000 --- a/docs/cugraph/source/api_docs/cugraph-ops/python/index.rst +++ /dev/null @@ -1,13 +0,0 @@ -cugraph-ops Python API reference -================================ - -This page provides a list of all publicly accessible modules, methods and classes through `pylibcugraphops.*` namespace. - -.. toctree:: - :maxdepth: 2 - :caption: API Documentation - - graph_types - operators - dimenet - pytorch diff --git a/docs/cugraph/source/api_docs/cugraph-ops/python/operators.rst b/docs/cugraph/source/api_docs/cugraph-ops/python/operators.rst deleted file mode 100644 index 8b5efd7aa36..00000000000 --- a/docs/cugraph/source/api_docs/cugraph-ops/python/operators.rst +++ /dev/null @@ -1,109 +0,0 @@ -============================= -Operators for Message-Passing -============================= - -.. currentmodule:: pylibcugraphops - -Simple Neighborhood Aggregator (SAGEConv) ------------------------------------------ -.. autosummary:: - :toctree: ../../api/ops - - operators.agg_simple_n2n_fwd - operators.agg_simple_n2n_bwd - operators.agg_simple_e2n_fwd - operators.agg_simple_e2n_bwd - operators.agg_simple_n2n_e2n_fwd - operators.agg_simple_n2n_e2n_bwd - - operators.agg_concat_n2n_fwd - operators.agg_concat_n2n_bwd - operators.agg_concat_e2n_fwd - operators.agg_concat_e2n_bwd - operators.agg_concat_n2n_e2n_fwd - operators.agg_concat_n2n_e2n_bwd - - -Weighted Neighborhood Aggregation ---------------------------------- -.. autosummary:: - :toctree: ../../api/ops - - operators.agg_weighted_n2n_fwd - operators.agg_weighted_n2n_bwd - operators.agg_concat_weighted_n2n_fwd - operators.agg_concat_weighted_n2n_bwd - -Heterogenous Aggregator using Basis Decomposition (RGCNConv) ------------------------------------------------------------- -.. autosummary:: - :toctree: ../../api/ops - - operators.agg_hg_basis_n2n_post_fwd - operators.agg_hg_basis_n2n_post_bwd - -Graph Attention (GATConv/GATv2Conv) ------------------------------------ -.. autosummary:: - :toctree: ../../api/ops - - operators.mha_gat_n2n_fwd_bf16_fp32 - operators.mha_gat_n2n_fwd_fp16_fp32 - operators.mha_gat_n2n_fwd_fp32_fp32 - operators.mha_gat_n2n_bwd_bf16_bf16_bf16_fp32 - operators.mha_gat_n2n_bwd_bf16_bf16_fp32_fp32 - operators.mha_gat_n2n_bwd_bf16_fp32_fp32_fp32 - operators.mha_gat_n2n_bwd_fp16_fp16_fp16_fp32 - operators.mha_gat_n2n_bwd_fp16_fp16_fp32_fp32 - operators.mha_gat_n2n_bwd_fp16_fp32_fp32_fp32 - operators.mha_gat_n2n_bwd_fp32_fp32_fp32_fp32 - operators.mha_gat_n2n_efeat_fwd_bf16_fp32 - operators.mha_gat_n2n_efeat_fwd_fp16_fp32 - operators.mha_gat_n2n_efeat_fwd_fp32_fp32 - operators.mha_gat_n2n_efeat_bwd_bf16_bf16_bf16_fp32 - operators.mha_gat_n2n_efeat_bwd_bf16_bf16_fp32_fp32 - operators.mha_gat_n2n_efeat_bwd_bf16_fp32_fp32_fp32 - operators.mha_gat_n2n_efeat_bwd_fp16_fp16_fp16_fp32 - operators.mha_gat_n2n_efeat_bwd_fp16_fp16_fp32_fp32 - operators.mha_gat_n2n_efeat_bwd_fp16_fp32_fp32_fp32 - operators.mha_gat_n2n_efeat_bwd_fp32_fp32_fp32_fp32 - - operators.mha_gat_v2_n2n_fwd - operators.mha_gat_v2_n2n_bwd - operators.mha_gat_v2_n2n_efeat_fwd - operators.mha_gat_v2_n2n_efeat_bwd - -Transformer-like Graph Attention (TransformerConv) --------------------------------------------------- -.. autosummary:: - :toctree: ../../api/ops - - operators.mha_gat_v2_n2n_fwd - operators.mha_gat_v2_n2n_bwd - operators.mha_gat_v2_n2n_efeat_fwd - operators.mha_gat_v2_n2n_efeat_bwd - -Directional Message-Passing (DMPNN) ------------------------------------ -.. autosummary:: - :toctree: ../../api/ops - - operators.agg_dmpnn_e2e_fwd - operators.agg_dmpnn_e2e_bwd - -Update Edges: Concatenation or Sum of Edge and Node Features ------------------------------------------------------------- -.. autosummary:: - :toctree: ../../api/ops - - operators.update_efeat_e2e_concat_fwd - operators.update_efeat_e2e_concat_bwd - - operators.update_efeat_e2e_sum_fwd - operators.update_efeat_e2e_sum_bwd - - operators.update_efeat_e2e_concat_fwd - operators.update_efeat_e2e_concat_bwd - - operators.update_efeat_e2e_sum_fwd - operators.update_efeat_e2e_sum_bwd diff --git a/docs/cugraph/source/api_docs/cugraph-ops/python/pytorch.rst b/docs/cugraph/source/api_docs/cugraph-ops/python/pytorch.rst deleted file mode 100644 index d2074df15b0..00000000000 --- a/docs/cugraph/source/api_docs/cugraph-ops/python/pytorch.rst +++ /dev/null @@ -1,36 +0,0 @@ -========================== -PyTorch Autograd Wrappers -========================== - -.. currentmodule:: pylibcugraphops.pytorch - -Simple Neighborhood Aggregator (SAGEConv) ------------------------------------------ -.. autosummary:: - :toctree: ../../api/ops - - operators.agg_concat_n2n - -Graph Attention (GATConv/GATv2Conv) ------------------------------------ -.. autosummary:: - :toctree: ../../api/ops - - operators.mha_gat_n2n - operators.mha_gat_v2_n2n - -Heterogenous Aggregator using Basis Decomposition (RGCNConv) ------------------------------------------------------------- -.. autosummary:: - :toctree: ../../api/ops - - operators.agg_hg_basis_n2n_post - - -Update Edges: Concatenation or Sum of Edge and Node Features ------------------------------------------------------------- -.. autosummary:: - :toctree: ../../api/ops - - operators.update_efeat_e2e - operators.update_efeat_e2e diff --git a/docs/cugraph/source/api_docs/index.rst b/docs/cugraph/source/api_docs/index.rst index c4b90b5794d..a3cae3468e5 100644 --- a/docs/cugraph/source/api_docs/index.rst +++ b/docs/cugraph/source/api_docs/index.rst @@ -24,7 +24,6 @@ Graph Neural Networks API Documentation cugraph-dgl/cugraph_dgl.rst cugraph-pyg/cugraph_pyg.rst - cugraph-ops/index.rst wholegraph/index.rst Additional Graph Packages API Documentation diff --git a/docs/cugraph/source/conf.py b/docs/cugraph/source/conf.py index 66bc3137fba..5c1b812435b 100644 --- a/docs/cugraph/source/conf.py +++ b/docs/cugraph/source/conf.py @@ -222,7 +222,6 @@ def setup(app): breathe_projects = { 'libcugraph': os.environ['XML_DIR_LIBCUGRAPH'], - 'libcugraphops': os.environ['XML_DIR_LIBCUGRAPHOPS'], 'libwholegraph': os.environ['XML_DIR_LIBWHOLEGRAPH'] } diff --git a/docs/cugraph/source/graph_support/cugraphops_support.rst b/docs/cugraph/source/graph_support/cugraphops_support.rst deleted file mode 100644 index 96b13f62a9c..00000000000 --- a/docs/cugraph/source/graph_support/cugraphops_support.rst +++ /dev/null @@ -1,10 +0,0 @@ -================== -cugraphops Support -================== - -cugraph-ops aims to be a low-level, framework agnostic library providing commonly used computational primitives for GNNs and other graph operations. - -.. toctree:: - :maxdepth: 3 - - https://github.com/rapidsai/cugraph/blob/branch-24.06/readme_pages/cugraph_ops.md diff --git a/docs/cugraph/source/graph_support/gnn_support.rst b/docs/cugraph/source/graph_support/gnn_support.rst index 639b657c64d..71586621608 100644 --- a/docs/cugraph/source/graph_support/gnn_support.rst +++ b/docs/cugraph/source/graph_support/gnn_support.rst @@ -8,5 +8,4 @@ Graph Neural Network Support PyG_support.md DGL_support.md - cugraphops_support.rst wholegraph_support.md diff --git a/docs/cugraph/source/wholegraph/installation/container.md b/docs/cugraph/source/wholegraph/installation/container.md index 6aac53cf88f..4068ead27b2 100644 --- a/docs/cugraph/source/wholegraph/installation/container.md +++ b/docs/cugraph/source/wholegraph/installation/container.md @@ -21,7 +21,7 @@ RUN pip3 install -U py RUN pip3 install Cython setuputils3 scikit-build nanobind pytest-forked pytest ``` -To run GNN applications, you may also need cuGraphOps, DGL and/or PyG libraries to run the GNN layers. +To run GNN applications, you may also need DGL and/or PyG libraries to run the GNN layers. You may refer to [DGL](https://www.dgl.ai/pages/start.html) or [PyG](https://pytorch-geometric.readthedocs.io/en/latest/notes/installation.html) For example, to install DGL, you may need to add: diff --git a/python/cugraph/cugraph/tests/sampling/test_random_walks.py b/python/cugraph/cugraph/tests/sampling/test_random_walks.py index 9c94e036683..76ceb478518 100644 --- a/python/cugraph/cugraph/tests/sampling/test_random_walks.py +++ b/python/cugraph/cugraph/tests/sampling/test_random_walks.py @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2023, NVIDIA CORPORATION.: +# Copyright (c) 2020-2024, NVIDIA CORPORATION.: # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -222,7 +222,6 @@ def test_random_walks_invalid_max_dept(graph_file, directed, max_depth): @pytest.mark.sg -@pytest.mark.cugraph_ops @pytest.mark.parametrize("graph_file", SMALL_DATASETS) @pytest.mark.parametrize("directed", DIRECTED_GRAPH_OPTIONS) def test_random_walks_coalesced(graph_file, directed): @@ -246,7 +245,6 @@ def test_random_walks_coalesced(graph_file, directed): @pytest.mark.sg -@pytest.mark.cugraph_ops @pytest.mark.parametrize("graph_file", SMALL_DATASETS) @pytest.mark.parametrize("directed", DIRECTED_GRAPH_OPTIONS) def test_random_walks_padded_0(graph_file, directed): @@ -271,7 +269,6 @@ def test_random_walks_padded_0(graph_file, directed): @pytest.mark.sg -@pytest.mark.cugraph_ops def test_random_walks_padded_1(): max_depth = random.randint(2, 10) @@ -294,7 +291,6 @@ def test_random_walks_padded_1(): @pytest.mark.sg -@pytest.mark.cugraph_ops @pytest.mark.parametrize("graph_file", SMALL_DATASETS) def test_random_walks_nx(graph_file): G = graph_file.get_graph(create_using=cugraph.Graph(directed=True)) diff --git a/python/cugraph/cugraph/tests/sampling/test_random_walks_mg.py b/python/cugraph/cugraph/tests/sampling/test_random_walks_mg.py index 34eeb2902f8..96b34c638b5 100644 --- a/python/cugraph/cugraph/tests/sampling/test_random_walks_mg.py +++ b/python/cugraph/cugraph/tests/sampling/test_random_walks_mg.py @@ -203,7 +203,6 @@ def input_graph(request): @pytest.mark.mg -@pytest.mark.cugraph_ops def test_dask_mg_random_walks(dask_client, input_graph): path_data, seeds, max_depth = calc_random_walks(input_graph) df_G = input_graph.input_df.compute().reset_index(drop=True) diff --git a/python/cugraph/cugraph/tests/sampling/test_uniform_neighbor_sample.py b/python/cugraph/cugraph/tests/sampling/test_uniform_neighbor_sample.py index ad0dbe77f7d..65687a1a227 100644 --- a/python/cugraph/cugraph/tests/sampling/test_uniform_neighbor_sample.py +++ b/python/cugraph/cugraph/tests/sampling/test_uniform_neighbor_sample.py @@ -130,7 +130,6 @@ def simple_unweighted_input_expected_output(request): # Tests # ============================================================================= @pytest.mark.sg -@pytest.mark.cugraph_ops def test_uniform_neighbor_sample_simple(input_combo): G = input_combo["Graph"] @@ -229,7 +228,6 @@ def test_uniform_neighbor_sample_simple(input_combo): @pytest.mark.sg -@pytest.mark.cugraph_ops @pytest.mark.parametrize("directed", IS_DIRECTED) def test_uniform_neighbor_sample_tree(directed): @@ -301,7 +299,6 @@ def test_uniform_neighbor_sample_tree(directed): @pytest.mark.sg -@pytest.mark.cugraph_ops def test_uniform_neighbor_sample_unweighted(simple_unweighted_input_expected_output): test_data = simple_unweighted_input_expected_output @@ -322,7 +319,6 @@ def test_uniform_neighbor_sample_unweighted(simple_unweighted_input_expected_out @pytest.mark.sg -@pytest.mark.cugraph_ops @pytest.mark.parametrize("return_offsets", [True, False]) @pytest.mark.parametrize("include_hop_column", [True, False]) def test_uniform_neighbor_sample_edge_properties(return_offsets, include_hop_column): diff --git a/python/cugraph/cugraph/tests/sampling/test_uniform_neighbor_sample_mg.py b/python/cugraph/cugraph/tests/sampling/test_uniform_neighbor_sample_mg.py index 4a85b49a66e..6343b0ff9f3 100644 --- a/python/cugraph/cugraph/tests/sampling/test_uniform_neighbor_sample_mg.py +++ b/python/cugraph/cugraph/tests/sampling/test_uniform_neighbor_sample_mg.py @@ -131,7 +131,6 @@ def input_combo(request): # Tests # ============================================================================= @pytest.mark.mg -@pytest.mark.cugraph_ops def test_mg_uniform_neighbor_sample_simple(dask_client, input_combo): dg = input_combo["MGGraph"] @@ -220,7 +219,6 @@ def test_mg_uniform_neighbor_sample_simple(dask_client, input_combo): @pytest.mark.mg -@pytest.mark.cugraph_ops @pytest.mark.parametrize("directed", IS_DIRECTED) def test_mg_uniform_neighbor_sample_tree(dask_client, directed): @@ -286,7 +284,6 @@ def test_mg_uniform_neighbor_sample_tree(dask_client, directed): @pytest.mark.mg @pytest.mark.skipif(is_single_gpu(), reason="FIXME: MG test fails on single-GPU") -@pytest.mark.cugraph_ops def test_mg_uniform_neighbor_sample_unweighted(dask_client): df = cudf.DataFrame( { @@ -321,7 +318,6 @@ def test_mg_uniform_neighbor_sample_unweighted(dask_client): @pytest.mark.mg @pytest.mark.skipif(is_single_gpu(), reason="FIXME: MG test fails on single-GPU") -@pytest.mark.cugraph_ops def test_mg_uniform_neighbor_sample_ensure_no_duplicates(dask_client): # See issue #2760 # This ensures that the starts are properly distributed @@ -347,7 +343,6 @@ def test_mg_uniform_neighbor_sample_ensure_no_duplicates(dask_client): @pytest.mark.mg -@pytest.mark.cugraph_ops @pytest.mark.parametrize("return_offsets", [True, False]) def test_uniform_neighbor_sample_edge_properties(dask_client, return_offsets): n_workers = len(dask_client.scheduler_info()["workers"]) diff --git a/python/pylibcugraph/pylibcugraph/tests/test_uniform_neighbor_sample.py b/python/pylibcugraph/pylibcugraph/tests/test_uniform_neighbor_sample.py index ffa90731483..4dafeb19032 100644 --- a/python/pylibcugraph/pylibcugraph/tests/test_uniform_neighbor_sample.py +++ b/python/pylibcugraph/pylibcugraph/tests/test_uniform_neighbor_sample.py @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2023, NVIDIA CORPORATION. +# Copyright (c) 2022-2024, NVIDIA CORPORATION. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -183,7 +183,6 @@ def test_neighborhood_sampling_cudf( ) -@pytest.mark.cugraph_ops def test_neighborhood_sampling_large_sg_graph(gpubenchmark): """ Use a large SG graph and set input args accordingly to test/benchmark diff --git a/python/pylibcugraph/pytest.ini b/python/pylibcugraph/pytest.ini index d5ade9f4836..8ca4e198441 100644 --- a/python/pylibcugraph/pytest.ini +++ b/python/pylibcugraph/pytest.ini @@ -12,7 +12,4 @@ # limitations under the License. [pytest] -markers = - cugraph_ops: Tests requiring cugraph-ops - addopts = --tb=native diff --git a/readme_pages/CONTRIBUTING.md b/readme_pages/CONTRIBUTING.md index ffe1ef1831b..01d5f263624 100644 --- a/readme_pages/CONTRIBUTING.md +++ b/readme_pages/CONTRIBUTING.md @@ -1,5 +1,5 @@ # Contributing to cuGraph -cuGraph, for the most part, is an open-source project where we encourage community involvement. The cugraph-ops package is the expection being a closed-source package. +cuGraph, for the most part, is an open-source project where we encourage community involvement. There are multiple ways to be involved and contribute to the cuGraph community, the top paths are listed below: diff --git a/readme_pages/cugraph_ops.md b/readme_pages/cugraph_ops.md deleted file mode 100644 index 7bd4ac55185..00000000000 --- a/readme_pages/cugraph_ops.md +++ /dev/null @@ -1,17 +0,0 @@ -

-
- cuGraph -

-

-CuGraphOps -

-Cugraph-ops is a closed-source library that is composed of highly optimized and -performant primitives associated with GNNs and related graph -operations, such as training, sampling and inference. - - -This is how cuGraphOps fits into the cuGraph ecosystem -

-
- cuGraph -

From 871939c60ade42c05e8017efbb5cf9386f89afba Mon Sep 17 00:00:00 2001 From: James Lamb Date: Tue, 26 Nov 2024 10:38:34 -0600 Subject: [PATCH 4/5] remove now-unused cugraphops_context.png --- img/cugraphops_context.png | Bin 24370 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 img/cugraphops_context.png diff --git a/img/cugraphops_context.png b/img/cugraphops_context.png deleted file mode 100644 index 8db157d2f095106eaba7b70270e28aa095b4ca30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24370 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 UVCkCSzftivRt}bB7rkQs4;SLf1ONa4 From c1f4e560d901741f10c71508c20bcad9a2c0eafc Mon Sep 17 00:00:00 2001 From: James Lamb Date: Wed, 27 Nov 2024 10:12:10 -0600 Subject: [PATCH 5/5] skip wholegraph docs builds --- build.sh | 22 +++++++++++----------- ci/build_docs.sh | 12 ++++++------ docs/cugraph/source/api_docs/index.rst | 2 +- docs/cugraph/source/conf.py | 2 +- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/build.sh b/build.sh index 645a2459e73..0282948659e 100755 --- a/build.sh +++ b/build.sh @@ -331,17 +331,17 @@ if hasArg docs || hasArg all; then ${CMAKE_VERBOSE_OPTION} fi - for PROJECT in libwholegraph; do - XML_DIR="${REPODIR}/docs/cugraph/${PROJECT}" - rm -rf "${XML_DIR}" - mkdir -p "${XML_DIR}" - export XML_DIR_${PROJECT^^}="$XML_DIR" - - echo "downloading xml for ${PROJECT} into ${XML_DIR}. Environment variable XML_DIR_${PROJECT^^} is set to ${XML_DIR}" - curl -O "https://d1664dvumjb44w.cloudfront.net/${PROJECT}/xml_tar/${RAPIDS_VERSION}/xml.tar.gz" - tar -xzf xml.tar.gz -C "${XML_DIR}" - rm "./xml.tar.gz" - done + # for PROJECT in libwholegraph; do + # XML_DIR="${REPODIR}/docs/cugraph/${PROJECT}" + # rm -rf "${XML_DIR}" + # mkdir -p "${XML_DIR}" + # export XML_DIR_${PROJECT^^}="$XML_DIR" + + # echo "downloading xml for ${PROJECT} into ${XML_DIR}. Environment variable XML_DIR_${PROJECT^^} is set to ${XML_DIR}" + # curl -O "https://d1664dvumjb44w.cloudfront.net/${PROJECT}/xml_tar/${RAPIDS_VERSION}/xml.tar.gz" + # tar -xzf xml.tar.gz -C "${XML_DIR}" + # rm "./xml.tar.gz" + # done cd ${LIBCUGRAPH_BUILD_DIR} cmake --build "${LIBCUGRAPH_BUILD_DIR}" -j${PARALLEL_LEVEL} --target docs_cugraph ${VERBOSE_FLAG} diff --git a/ci/build_docs.sh b/ci/build_docs.sh index 1c90f5b243f..ad77c9a0e60 100755 --- a/ci/build_docs.sh +++ b/ci/build_docs.sh @@ -52,12 +52,12 @@ rapids-mamba-retry install \ export RAPIDS_DOCS_DIR="$(mktemp -d)" -for PROJECT in libwholegraph; do - rapids-logger "Download ${PROJECT} xml_tar" - TMP_DIR=$(mktemp -d) - export XML_DIR_${PROJECT^^}="$TMP_DIR" - curl "https://d1664dvumjb44w.cloudfront.net/${PROJECT}/xml_tar/${RAPIDS_VERSION_NUMBER}/xml.tar.gz" | tar -xzf - -C "${TMP_DIR}" -done +# for PROJECT in libwholegraph; do +# rapids-logger "Download ${PROJECT} xml_tar" +# TMP_DIR=$(mktemp -d) +# export XML_DIR_${PROJECT^^}="$TMP_DIR" +# curl "https://d1664dvumjb44w.cloudfront.net/${PROJECT}/xml_tar/${RAPIDS_VERSION_NUMBER}/xml.tar.gz" | tar -xzf - -C "${TMP_DIR}" +# done rapids-logger "Build CPP docs" pushd cpp/doxygen diff --git a/docs/cugraph/source/api_docs/index.rst b/docs/cugraph/source/api_docs/index.rst index a3cae3468e5..ccb7aacfeb5 100644 --- a/docs/cugraph/source/api_docs/index.rst +++ b/docs/cugraph/source/api_docs/index.rst @@ -24,7 +24,7 @@ Graph Neural Networks API Documentation cugraph-dgl/cugraph_dgl.rst cugraph-pyg/cugraph_pyg.rst - wholegraph/index.rst + .. wholegraph/index.rst Additional Graph Packages API Documentation ---------------------------------- diff --git a/docs/cugraph/source/conf.py b/docs/cugraph/source/conf.py index 5c1b812435b..6573349aaec 100644 --- a/docs/cugraph/source/conf.py +++ b/docs/cugraph/source/conf.py @@ -222,7 +222,7 @@ def setup(app): breathe_projects = { 'libcugraph': os.environ['XML_DIR_LIBCUGRAPH'], - 'libwholegraph': os.environ['XML_DIR_LIBWHOLEGRAPH'] + # 'libwholegraph': os.environ['XML_DIR_LIBWHOLEGRAPH'] } breathe_default_project = "libcugraph"