From 2c478fb1f09e48b32b71f645659c76c39a4a2566 Mon Sep 17 00:00:00 2001 From: Rick Ratzel <3039903+rlratzel@users.noreply.github.com> Date: Fri, 23 Feb 2024 14:07:34 -0600 Subject: [PATCH] Removes APIs that have been deprecated and have exceeded the grace period, improves *_warning_wrapper performance (#4176) * Removes APIs that have been deprecated >1 releases ago. * Updates tests that assumed the deprecated APIs were in place. * Changes the `*_warning_wrapper` utilities to accept a namespace name to use in the warning messages instead of making an expensive `inspect.stack()` call. `inspect.stack()` is still used if a namespace name was not provided. This reduces overall `import` time, especially when used with `cudf.pandas` (attn: @shwina). * Removes the redundant `cugraph.utilities.api_tools` module in favor of just using the equivalent `pylibcugraph` module directly. * Fixes jaccard notebook to remove deprecated API calls that are no longer present and updates it for clarity and to match the current implementation. * Cleans up jaccard docstrings. Authors: - Rick Ratzel (https://github.com/rlratzel) Approvers: - Naim (https://github.com/naimnv) - Joseph Nke (https://github.com/jnke2016) - Don Acosta (https://github.com/acostadon) - Brad Rees (https://github.com/BradReesWork) URL: https://github.com/rapidsai/cugraph/pull/4176 --- .../link_prediction/Jaccard-Similarity.ipynb | 368 ++---------------- notebooks/img/karate_similarity.png | Bin 145416 -> 76678 bytes python/cugraph/cugraph/__init__.py | 8 +- .../cugraph/dask/link_prediction/jaccard.py | 31 +- .../cugraph/cugraph/experimental/__init__.py | 54 +-- .../cugraph/experimental/gnn/__init__.py | 10 +- .../cugraph/link_prediction/__init__.py | 19 +- .../cugraph/link_prediction/jaccard.py | 70 +--- .../cugraph/link_prediction/wjaccard.py | 139 ------- .../cugraph/link_prediction/woverlap.py | 122 ------ .../cugraph/link_prediction/wsorensen.py | 118 ------ .../cugraph/tests/community/test_louvain.py | 12 +- .../tests/community/test_triangle_count.py | 10 +- .../tests/link_prediction/test_jaccard.py | 38 +- .../tests/link_prediction/test_overlap.py | 8 +- .../tests/link_prediction/test_sorensen.py | 37 +- python/cugraph/cugraph/utilities/api_tools.py | 28 -- python/pylibcugraph/pylibcugraph/__init__.py | 4 +- .../pylibcugraph/experimental/__init__.py | 90 ----- .../pylibcugraph/utilities/api_tools.py | 91 +++-- 20 files changed, 161 insertions(+), 1096 deletions(-) delete mode 100644 python/cugraph/cugraph/link_prediction/wjaccard.py delete mode 100644 python/cugraph/cugraph/link_prediction/woverlap.py delete mode 100644 python/cugraph/cugraph/link_prediction/wsorensen.py delete mode 100644 python/cugraph/cugraph/utilities/api_tools.py delete mode 100644 python/pylibcugraph/pylibcugraph/experimental/__init__.py diff --git a/notebooks/algorithms/link_prediction/Jaccard-Similarity.ipynb b/notebooks/algorithms/link_prediction/Jaccard-Similarity.ipynb index 1e6cd032650..b5f09c0c145 100755 --- a/notebooks/algorithms/link_prediction/Jaccard-Similarity.ipynb +++ b/notebooks/algorithms/link_prediction/Jaccard-Similarity.ipynb @@ -8,19 +8,7 @@ "# Jaccard Similarity\n", "----\n", "\n", - "In this notebook we will explore the Jaccard vertex similarity metrics available in cuGraph. cuGraph supports:\n", - "- Jaccard Similarity (also called the Jaccard Index)\n", - "- Weight Jaccard\n", - "\n", - "Similarity can be between neighboring vertices (default) or second hop neighbors\n", - "\n", - "\n", - "\n", - "| Author Credit | Date | Update | cuGraph Version | Test Hardware |\n", - "| --------------|------------|------------------|-----------------|-----------------------|\n", - "| Brad Rees | 10/14/2019 | created | 0.14 | GV100 32 GB, CUDA 10.2 |\n", - "| Don Acosta | 07/20/2022 | tested/updated | 22.08 nightly | DGX Tesla V100 CUDA 11.5 |\n", - "| Ralph Liu | 06/29/2023 | updated | 23.08 nightly | DGX Tesla V100 CUDA 12.0" + "In this notebook we will explore the Jaccard vertex similarity metrics available in cuGraph." ] }, { @@ -28,27 +16,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Introduction - Common Neighbor Similarity \n", + "## Introduction\n", "\n", - "One of the most common types of vertex similarity is to evaluate the neighborhood of vertex pairs and looks at the number of common neighbors. TThat type of similar comes from statistics and is based on set comparison. Both Jaccard and the Overlap Coefficient operate on sets, and in a graph setting, those sets are the list of neighboring vertices.
\n", - "For those that like math: The neighbors of a vertex, _v_, is defined as the set, _U_, of vertices connected by way of an edge to vertex v, or _N(v) = {U} where v ∈ V and ∀ u ∈ U ∃ edge(v,u)∈ E_.\n", - "\n", - "For the rest of this introduction, set __A__ will equate to _A = N(i)_ and set __B__ will quate to _B = N(j)_. That just make the rest of the text more readable." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Jaccard Similarity" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ "The Jaccard similarity between two sets is defined as the ratio of the volume of their intersection divided by the volume of their union. \n", "\n", "The Jaccard Similarity can then be expressed as\n", @@ -63,93 +32,32 @@ "\n", "Returns:\n", "\n", - " df: cudf.DataFrame with three names columns:\n", + " df: cudf.DataFrame with three columns:\n", " df[\"first\"]: The first vertex id of each pair.\n", - " df[\"second\"]: The second vertex i of each pair.\n", + " df[\"second\"]: The second vertex id of each pair.\n", " df[\"jaccard_coeff\"]: The jaccard coefficient computed between the vertex pairs.\n", "
\n", "\n", "__References__ \n", - "- https://research.nvidia.com/publication/2017-11_Parallel-Jaccard-and" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "### Weighted Jaccard" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Weighted Jaccard is similar to the Jaccard Similarity but takes into account vertex weights placed. \n", - "\n", - "given:\n", - "The neighbors of a vertex, v, is defined as the set, U, of vertices connected by way of an edge to vertex v, or N(v) = {U} where v ∈V and ∀ u∈U ∃ edge(v,u)∈E.\n", - "and\n", - "wt(i) is the weight on vertex i\n", - " \n", - "we can now define weight summing function as
\n", - "$WT(U) = \\sum_{v \\in U} {wt(v)}$\n", - "\n", - "$WtJaccard(i, j) = \\frac{WT(N(i) \\cap N(j))}{WT(N(i) \\cup N(j))}$\n", - "\n", - "To compute the weighted Jaccard similarity between each pair of vertices connected by an edge in cuGraph use:
\n", - "\n", - "__df = cugraph.jaccard_w(input_graph, vect_weights_ptr)__\n", + "- https://research.nvidia.com/publication/2017-11_Parallel-Jaccard-and \n", "\n", - " input_graph: A cugraph.Graph object\n", - " vect_weights_ptr: An array of vertex weights\n", - "\n", - "Returns: \n", - "\n", - " df: cudf.DataFrame with three names columns:\n", - " df['first']: The first vertex id of each pair.\n", - " df['second']: The second vertex id of each pair.\n", - " df['jaccard_coeff']: The weighted jaccard coefficient computed between the vertex pairs.\n", - " \n", - "\n", - "__Note:__ For this example we will be using PageRank as the edge weights. Please review the PageRank notebook if you have any questions about running PageRank\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Additional Reading\n", + "__Additional Reading__ \n", "- [Wikipedia: Jaccard](https://en.wikipedia.org/wiki/Jaccard_index)\n" ] }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Some notes about vertex IDs...\n", - "* cuGraph will automatically renumber graphs to an internal format consisting of a contiguous series of integers starting from 0, and convert back to the original IDs when returning data to the caller. If the vertex IDs of the data are already a contiguous series of integers starting from 0, the auto-renumbering step can be skipped for faster graph creation times.\n", - " * To skip auto-renumbering, set the `renumber` boolean arg to `False` when calling the appropriate graph creation API (eg. `G.from_cudf_edgelist(gdf_r, source='src', destination='dst', renumber=False)`).\n", - " * For more advanced renumbering support, see the examples in `structure/renumber.ipynb` and `structure/renumber-2.ipynb`\n" - ] - }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Test Data\n", - "We will be using the Zachary Karate club dataset \n", + "We will be using the Zachary Karate club dataset.\n", "*W. W. Zachary, An information flow model for conflict and fission in small groups, Journal of\n", "Anthropological Research 33, 452-473 (1977).*\n", "\n", - "\n", + "\n", "\n", - "This is a small graph which allows for easy visual inspection to validate results. " + "This is a small graph which allows for easy visual inspection to validate results." ] }, { @@ -172,136 +80,10 @@ "# Import needed libraries\n", "import cugraph\n", "import cudf\n", - "from collections import OrderedDict" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "----\n", - "### Define some Print functions\n", - "(the `del` are not needed since going out of scope should free memory, just good practice)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# define a function for printing the top most similar vertices\n", - "def print_most_similar_jaccard(df):\n", - " d_local = df.query('first != second')\n", - " jmax = d_local['jaccard_coeff'].max()\n", - " dm = d_local.query('jaccard_coeff >= @jmax') \n", - " \n", - " #find the best\n", - " for i in range(len(dm)): \n", - " print(\"Vertices \" + str(dm['first'].iloc[i]) + \" and \" + \n", - " str(dm['second'].iloc[i]) + \" are most similar with score: \" \n", - " + str(dm['jaccard_coeff'].iloc[i]))\n", - " del jmax\n", - " del dm" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# define a function for printing jaccard similar vertices based on a threshold\n", - "def print_jaccard_threshold(_d, limit):\n", - " \n", - " filtered = _d.query('jaccard_coeff > @limit')\n", - " \n", - " for i in range(len(filtered)):\n", - " print(\"Vertices \" + str(filtered['first'].iloc[i]) + \" and \" + \n", - " str(filtered['second'].iloc[i]) + \" are similar with score: \" + \n", - " str(filtered['jaccard_coeff'].iloc[i]))" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Read the CSV datafile using cuDF\n", - "data file is actually _tab_ separated, so we need to set the delimiter" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Test file \n", - "from cugraph.datasets import karate\n", - "gdf = karate.get_edgelist(download=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Let's look at the DataFrame. There should be two columns and 156 records\n", - "gdf.shape" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Look at the first few data records - the output should be two columns: 'src' and 'dst'\n", - "gdf.head()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create a Graph" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# create a Graph \n", - "G = karate.get_graph()\n", - "G = G.to_undirected()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# How many vertices are in the graph? Remember that Graph is zero based\n", - "G.number_of_vertices()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "_The test graph has only 34 vertices, so why is the Graph listing 35?_\n", "\n", - "As mentioned above, cuGraph vertex numbering is zero-based, meaning that the first vertex ID starts at zero. The test dataset is 1-based. Because of that, the Graph object adds an extra isolated vertex with an ID of zero. Hence the difference in vertex count. \n", - "We could have run _renumbering_ on the data, or updated the value of each element _gdf['src'] = gdf['src'] - 1_ \n", - "for now, we will just state that vertex 0 is not part of the dataset and can be ignored" + "# The cugraph.datasets package contains several common graph datasets useful\n", + "# for testing and demonstrations.\n", + "from cugraph.datasets import karate" ] }, { @@ -309,20 +91,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "--- \n", - "# Jaccard " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#%%time\n", - "# Call cugraph.nvJaccard\n", - "jdf = cugraph.jaccard(G)\n", - "jdf.head(5)" + "### Create the Graph object" ] }, { @@ -331,9 +100,9 @@ "metadata": {}, "outputs": [], "source": [ - "# Which two vertices are the most similar?\n", - "\n", - "print_most_similar_jaccard(jdf)\n" + "# Create a cugraph.Graph object from the karate dataset. Download the karate\n", + "# dataset if not already present on disk.\n", + "G = karate.get_graph(download=True)" ] }, { @@ -341,9 +110,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The Most similar should be 33 and 34.\n", - "Vertex 33 has 12 neighbors, vertex 34 has 17 neighbors. They share 10 neighbors in common:\n", - "$jaccard = 10 / (10 + (12 -10) + (17-10)) = 10 / 19 = 0.526$" + "### Run `jaccard`" ] }, { @@ -352,24 +119,9 @@ "metadata": {}, "outputs": [], "source": [ - "### let's look at all similarities over a threshold\n", - "print_jaccard_threshold(jdf, 0.4)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Since it is a small graph we can print all scores, notice that only vertices that are neighbors are being compared\n", - "#\n", - "# Before printing, let's get rid of the duplicates (x compared to y is the same as y compared to x). We will do that\n", - "# by performing a query. Then let's sort the data by score\n", - "\n", - "jdf_s = jdf.query('first < second').sort_values(by='jaccard_coeff', ascending=False)\n", - "\n", - "print_jaccard_threshold(jdf_s, 0.0)" + "# Compute Jaccard coefficients for all pairs of vertices that are part of the\n", + "# two-hop neighborhood for each vertex.\n", + "jaccard_coeffs = cugraph.jaccard(G)" ] }, { @@ -377,8 +129,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "---\n", - "# Expanding vertex pairs similarity scoring to 2-hop vertex pair" + "### Analyze the results" ] }, { @@ -387,8 +138,11 @@ "metadata": {}, "outputs": [], "source": [ - "# get all two-hop vertex pairs\n", - "p = G.get_two_hop_neighbors()" + "# Remove redundancies (remove (b, a) if (a, b) is present) and pairs consisting\n", + "# of the same vertices (a, a) from the results, then sort from most similar to\n", + "# least.\n", + "jaccard_coeffs = jaccard_coeffs.query(\"first < second\")\n", + "jaccard_coeffs = jaccard_coeffs.sort_values(\"jaccard_coeff\", ascending=False)" ] }, { @@ -397,26 +151,8 @@ "metadata": {}, "outputs": [], "source": [ - "# Let's look at the Jaccard score\n", - "j2 = cugraph.jaccard(G, vertex_pair=p)\n", - "j2.query('first == 14')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print_most_similar_jaccard(j2)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" + "# Show the top-20 most similar vertices.\n", + "jaccard_coeffs.head(20)" ] }, { @@ -424,7 +160,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Weighted Jaccard" + "We can see that several pairs have a coefficient of 1.0, meaning they have\n", + "the same set of neighbors. This can be easily verified in the plot above." ] }, { @@ -432,7 +169,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For graph weights, we are going to use the PageRank scores. If you are unfamillar with PageRank please see the notebook on PageRank" + "We have to specify vertices in a DataFrame to see their similarity if they\n", + "are not part of the same two-hop neighborhood." ] }, { @@ -441,18 +179,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Call PageRank on the graph to get weights to use:\n", - "pr_df = cugraph.pagerank(G)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# take a peek at the PageRank values\n", - "pr_df.head()" + "cugraph.jaccard(G, cudf.DataFrame([(16, 33)]))" ] }, { @@ -460,27 +187,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Now compute the Weighted Jaccard " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pr_df.rename(columns={'pagerank': 'weight'}, inplace=True)\n", - "# Call weighted Jaccard using the PageRank scores as weights:\n", - "wdf = cugraph.jaccard_w(G, pr_df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print_most_similar_jaccard(wdf)" + "As expected, the coefficient is 0.0 because vertices 16 and 33 do not share any\n", + "neighbors." ] }, { @@ -491,7 +199,7 @@ "---\n", "### It's that easy with cuGraph\n", "\n", - "Copyright (c) 2019-2023, NVIDIA CORPORATION.\n", + "Copyright (c) 2019-2024, NVIDIA CORPORATION.\n", "\n", "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\n", "\n", @@ -502,7 +210,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.9.13 ('cugraph_dev')", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -516,7 +224,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.10.13" }, "vscode": { "interpreter": { diff --git a/notebooks/img/karate_similarity.png b/notebooks/img/karate_similarity.png index d8a67e7733cff7e02790cd32a08055cf51c08623..94df87b69ac895ca80aeddb5e00c87bae4dfbee6 100644 GIT binary patch literal 76678 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�T5#&hQOpw^Y!F-;Ek(u%ni^=5`Lg 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 literal 145416 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 F{s&dO5!nC$ diff --git a/python/cugraph/cugraph/__init__.py b/python/cugraph/cugraph/__init__.py index f635d215696..ba7e23df800 100644 --- a/python/cugraph/cugraph/__init__.py +++ b/python/cugraph/cugraph/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2023, NVIDIA CORPORATION. +# Copyright (c) 2019-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 @@ -80,9 +80,6 @@ overlap_coefficient, sorensen, sorensen_coefficient, - jaccard_w, - overlap_w, - sorensen_w, ) from cugraph.traversal import ( @@ -100,9 +97,6 @@ from cugraph.utilities import utils -from cugraph.experimental import strong_connected_component -from cugraph.experimental import find_bicliques - from cugraph.linear_assignment import hungarian, dense_hungarian from cugraph.layout import force_atlas2 diff --git a/python/cugraph/cugraph/dask/link_prediction/jaccard.py b/python/cugraph/cugraph/dask/link_prediction/jaccard.py index 5362c7a9e1e..3b8edc8daa5 100644 --- a/python/cugraph/cugraph/dask/link_prediction/jaccard.py +++ b/python/cugraph/cugraph/dask/link_prediction/jaccard.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. @@ -66,38 +66,13 @@ def jaccard(input_graph, vertex_pair=None, use_weight=False): of their intersection divided by the volume of their union. In the context of graphs, the neighborhood of a vertex is seen as a set. The Jaccard similarity weight of each edge represents the strength of connection - between vertices based on the relative similarity of their neighbors. If - first is specified but second is not, or vice versa, an exception will be - thrown. - - NOTE: If the vertex_pair parameter is not specified then the behavior - of cugraph.jaccard is different from the behavior of - networkx.jaccard_coefficient. + between vertices based on the relative similarity of their neighbors. cugraph.dask.jaccard, in the absence of a specified vertex pair list, will compute the two_hop_neighbors of the entire graph to construct a vertex pair list and will return the jaccard coefficient for those vertex pairs. This is not advisable as the vertex_pairs can grow exponentially with respect to the - size of the datasets - - networkx.jaccard_coefficient, in the absence of a specified vertex - pair list, will return an upper triangular dense matrix, excluding - the diagonal as well as vertex pairs that are directly connected - by an edge in the graph, of jaccard coefficients. Technically, networkx - returns a lazy iterator across this upper triangular matrix where - the actual jaccard coefficient is computed when the iterator is - dereferenced. Computing a dense matrix of results is not feasible - if the number of vertices in the graph is large (100,000 vertices - would result in 4.9 billion values in that iterator). - - If your graph is small enough (or you have enough memory and patience) - you can get the interesting (non-zero) values that are part of the networkx - solution by doing the following: - - But please remember that cugraph will fill the dataframe with the entire - solution you request, so you'll need enough memory to store the 2-hop - neighborhood dataframe. - + size of the datasets. Parameters ---------- diff --git a/python/cugraph/cugraph/experimental/__init__.py b/python/cugraph/cugraph/experimental/__init__.py index 7e8fd666972..b0d1f4f1e90 100644 --- a/python/cugraph/cugraph/experimental/__init__.py +++ b/python/cugraph/cugraph/experimental/__init__.py @@ -11,59 +11,41 @@ # See the License for the specific language governing permissions and # limitations under the License. -from cugraph.utilities.api_tools import experimental_warning_wrapper -from cugraph.utilities.api_tools import deprecated_warning_wrapper -from cugraph.utilities.api_tools import promoted_experimental_warning_wrapper +from pylibcugraph.utilities.api_tools import ( + experimental_warning_wrapper, + promoted_experimental_warning_wrapper, +) + +# Passing in the namespace name of this module to the *_wrapper functions +# allows them to bypass the expensive inspect.stack() lookup. +_ns_name = __name__ from cugraph.structure.property_graph import EXPERIMENTAL__PropertyGraph -PropertyGraph = experimental_warning_wrapper(EXPERIMENTAL__PropertyGraph) +PropertyGraph = experimental_warning_wrapper(EXPERIMENTAL__PropertyGraph, _ns_name) from cugraph.structure.property_graph import EXPERIMENTAL__PropertySelection -PropertySelection = experimental_warning_wrapper(EXPERIMENTAL__PropertySelection) +PropertySelection = experimental_warning_wrapper( + EXPERIMENTAL__PropertySelection, _ns_name +) from cugraph.dask.structure.mg_property_graph import EXPERIMENTAL__MGPropertyGraph -MGPropertyGraph = experimental_warning_wrapper(EXPERIMENTAL__MGPropertyGraph) +MGPropertyGraph = experimental_warning_wrapper(EXPERIMENTAL__MGPropertyGraph, _ns_name) from cugraph.dask.structure.mg_property_graph import EXPERIMENTAL__MGPropertySelection -MGPropertySelection = experimental_warning_wrapper(EXPERIMENTAL__MGPropertySelection) - -# FIXME: Remove experimental.triangle_count next release -from cugraph.community.triangle_count import triangle_count - -triangle_count = promoted_experimental_warning_wrapper(triangle_count) +MGPropertySelection = experimental_warning_wrapper( + EXPERIMENTAL__MGPropertySelection, _ns_name +) from cugraph.experimental.components.scc import EXPERIMENTAL__strong_connected_component strong_connected_component = experimental_warning_wrapper( - EXPERIMENTAL__strong_connected_component -) - -from cugraph.experimental.structure.bicliques import EXPERIMENTAL__find_bicliques - -find_bicliques = deprecated_warning_wrapper( - experimental_warning_wrapper(EXPERIMENTAL__find_bicliques) + EXPERIMENTAL__strong_connected_component, _ns_name ) from cugraph.gnn.data_loading import BulkSampler -BulkSampler = promoted_experimental_warning_wrapper(BulkSampler) - - -from cugraph.link_prediction.jaccard import jaccard, jaccard_coefficient - -jaccard = promoted_experimental_warning_wrapper(jaccard) -jaccard_coefficient = promoted_experimental_warning_wrapper(jaccard_coefficient) - -from cugraph.link_prediction.sorensen import sorensen, sorensen_coefficient - -sorensen = promoted_experimental_warning_wrapper(sorensen) -sorensen_coefficient = promoted_experimental_warning_wrapper(sorensen_coefficient) - -from cugraph.link_prediction.overlap import overlap, overlap_coefficient - -overlap = promoted_experimental_warning_wrapper(overlap) -overlap_coefficient = promoted_experimental_warning_wrapper(overlap_coefficient) +BulkSampler = promoted_experimental_warning_wrapper(BulkSampler, _ns_name) diff --git a/python/cugraph/cugraph/experimental/gnn/__init__.py b/python/cugraph/cugraph/experimental/gnn/__init__.py index 9c366a2ee28..558a4c9d1e0 100644 --- a/python/cugraph/cugraph/experimental/gnn/__init__.py +++ b/python/cugraph/cugraph/experimental/gnn/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023, NVIDIA CORPORATION. +# Copyright (c) 2023-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 @@ -12,6 +12,10 @@ # limitations under the License. from cugraph.gnn.data_loading import BulkSampler -from cugraph.utilities.api_tools import promoted_experimental_warning_wrapper +from pylibcugraph.utilities.api_tools import promoted_experimental_warning_wrapper -BulkSampler = promoted_experimental_warning_wrapper(BulkSampler) +# Passing in the namespace name of this module to the *_wrapper functions +# allows them to bypass the expensive inspect.stack() lookup. +_ns_name = __name__ + +BulkSampler = promoted_experimental_warning_wrapper(BulkSampler, _ns_name) diff --git a/python/cugraph/cugraph/link_prediction/__init__.py b/python/cugraph/cugraph/link_prediction/__init__.py index a8517ee7c0f..38c8b9a2d3b 100644 --- a/python/cugraph/cugraph/link_prediction/__init__.py +++ b/python/cugraph/cugraph/link_prediction/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2023, NVIDIA CORPORATION. +# Copyright (c) 2019-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 @@ -11,26 +11,9 @@ # See the License for the specific language governing permissions and # limitations under the License. - -from cugraph.utilities.api_tools import deprecated_warning_wrapper from cugraph.link_prediction.jaccard import jaccard from cugraph.link_prediction.jaccard import jaccard_coefficient - from cugraph.link_prediction.sorensen import sorensen from cugraph.link_prediction.sorensen import sorensen_coefficient - from cugraph.link_prediction.overlap import overlap from cugraph.link_prediction.overlap import overlap_coefficient - -# To be deprecated -from cugraph.link_prediction.wjaccard import jaccard_w - -jaccard_w = deprecated_warning_wrapper(jaccard_w) - -from cugraph.link_prediction.woverlap import overlap_w - -overlap_w = deprecated_warning_wrapper(overlap_w) - -from cugraph.link_prediction.wsorensen import sorensen_w - -sorensen_w = deprecated_warning_wrapper(sorensen_w) diff --git a/python/cugraph/cugraph/link_prediction/jaccard.py b/python/cugraph/cugraph/link_prediction/jaccard.py index 27bfa58e6b0..f114b4a6d03 100644 --- a/python/cugraph/cugraph/link_prediction/jaccard.py +++ b/python/cugraph/cugraph/link_prediction/jaccard.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2023, NVIDIA CORPORATION. +# Copyright (c) 2019-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 @@ -56,7 +56,6 @@ def ensure_valid_dtype(input_graph, vertex_pair): def jaccard( input_graph: Graph, vertex_pair: cudf.DataFrame = None, - do_expensive_check: bool = False, # deprecated use_weight: bool = False, ): """ @@ -66,43 +65,13 @@ def jaccard( of their intersection divided by the volume of their union. In the context of graphs, the neighborhood of a vertex is seen as a set. The Jaccard similarity weight of each edge represents the strength of connection - between vertices based on the relative similarity of their neighbors. If - first is specified but second is not, or vice versa, an exception will be - thrown. - - NOTE: If the vertex_pair parameter is not specified then the behavior - of cugraph.jaccard is different from the behavior of - networkx.jaccard_coefficient. + between vertices based on the relative similarity of their neighbors. cugraph.jaccard, in the absence of a specified vertex pair list, will compute the two_hop_neighbors of the entire graph to construct a vertex pair list and will return the jaccard coefficient for those vertex pairs. This is not advisable as the vertex_pairs can grow exponentially with respect to the - size of the datasets - - networkx.jaccard_coefficient, in the absence of a specified vertex - pair list, will return an upper triangular dense matrix, excluding - the diagonal as well as vertex pairs that are directly connected - by an edge in the graph, of jaccard coefficients. Technically, networkx - returns a lazy iterator across this upper triangular matrix where - the actual jaccard coefficient is computed when the iterator is - dereferenced. Computing a dense matrix of results is not feasible - if the number of vertices in the graph is large (100,000 vertices - would result in 4.9 billion values in that iterator). - - If your graph is small enough (or you have enough memory and patience) - you can get the interesting (non-zero) values that are part of the networkx - solution by doing the following: - - >>> from cugraph.datasets import karate - >>> input_graph = karate.get_graph(download=True, ignore_weights=True) - >>> pairs = input_graph.get_two_hop_neighbors() - >>> df = cugraph.jaccard(input_graph, pairs) - - But please remember that cugraph will fill the dataframe with the entire - solution you request, so you'll need enough memory to store the 2-hop - neighborhood dataframe. - + size of the datasets. Parameters ---------- @@ -121,21 +90,11 @@ def jaccard( current implementation computes the jaccard coefficient for all adjacent vertices in the graph. - do_expensive_check : bool, optional (default=False) - Deprecated. - - This option added a check to ensure integer vertex IDs are sequential - values from 0 to V-1. That check is now redundant because cugraph - unconditionally renumbers and un-renumbers integer vertex IDs for - optimal performance, therefore this option is deprecated and will be - removed in a future version. - use_weight : bool, optional (default=False) Flag to indicate whether to compute weighted jaccard (if use_weight==True) or un-weighted jaccard (if use_weight==False). 'input_graph' must be weighted if 'use_weight=True'. - Returns ------- df : cudf.DataFrame @@ -161,13 +120,6 @@ def jaccard( >>> df = jaccard(input_graph) """ - if do_expensive_check: - warnings.warn( - "do_expensive_check is deprecated since vertex IDs are no longer " - "required to be consecutively numbered", - FutureWarning, - ) - if input_graph.is_directed(): raise ValueError("Input must be an undirected Graph.") @@ -220,7 +172,6 @@ def jaccard( def jaccard_coefficient( G: Union[Graph, "networkx.Graph"], ebunch: Union[cudf.DataFrame, Iterable[Union[int, str, float]]] = None, - do_expensive_check: bool = False, # deprecated ): """ For NetworkX Compatability. See `jaccard` @@ -244,14 +195,6 @@ def jaccard_coefficient( pairs. Otherwise, the current implementation computes the overlap coefficient for all adjacent vertices in the graph. - do_expensive_check : bool, optional (default=False) - Deprecated. - This option added a check to ensure integer vertex IDs are sequential - values from 0 to V-1. That check is now redundant because cugraph - unconditionally renumbers and un-renumbers integer vertex IDs for - optimal performance, therefore this option is deprecated and will be - removed in a future version. - Returns ------- df : cudf.DataFrame @@ -277,13 +220,6 @@ def jaccard_coefficient( >>> df = jaccard_coefficient(G) """ - if do_expensive_check: - warnings.warn( - "do_expensive_check is deprecated since vertex IDs are no longer " - "required to be consecutively numbered", - FutureWarning, - ) - vertex_pair = None G, isNx = ensure_cugraph_obj_for_nx(G) diff --git a/python/cugraph/cugraph/link_prediction/wjaccard.py b/python/cugraph/cugraph/link_prediction/wjaccard.py deleted file mode 100644 index ec538bbc0ed..00000000000 --- a/python/cugraph/cugraph/link_prediction/wjaccard.py +++ /dev/null @@ -1,139 +0,0 @@ -# Copyright (c) 2019-2023, 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. - -from cugraph.link_prediction import jaccard -import cudf -import warnings - -from cugraph.structure import Graph -from cugraph.utilities.utils import import_optional - -# FIXME: the networkx.Graph type used in type annotations is specified -# using a string literal to avoid depending on and importing networkx. -# Instead, networkx is imported optionally, which may cause a problem -# for a type checker if run in an environment where networkx is not installed. -networkx = import_optional("networkx") - - -# FIXME: Move this function to the utility module so that it can be -# shared by other algos -def ensure_valid_dtype(input_graph, vertex_pair): - - vertex_dtype = input_graph.edgelist.edgelist_df.dtypes[0] - vertex_pair_dtypes = vertex_pair.dtypes - - if vertex_pair_dtypes[0] != vertex_dtype or vertex_pair_dtypes[1] != vertex_dtype: - warning_msg = ( - "Jaccard requires 'vertex_pair' to match the graph's 'vertex' type. " - f"input graph's vertex type is: {vertex_dtype} and got " - f"'vertex_pair' of type: {vertex_pair_dtypes}." - ) - warnings.warn(warning_msg, UserWarning) - vertex_pair = vertex_pair.astype(vertex_dtype) - - return vertex_pair - - -def jaccard_w( - input_graph: Graph, - weights: cudf.DataFrame = None, # deprecated - vertex_pair: cudf.DataFrame = None, - do_expensive_check: bool = False, # deprecated -): - """ - Compute the weighted Jaccard similarity between each pair of vertices - connected by an edge, or between arbitrary pairs of vertices specified by - the user. Jaccard similarity is defined between two sets as the ratio of - the volume of their intersection divided by the volume of their union. In - the context of graphs, the neighborhood of a vertex is seen as a set. The - Jaccard similarity weight of each edge represents the strength of - connection between vertices based on the relative similarity of their - neighbors. If first is specified but second is not, or vice versa, an - exception will be thrown. - - NOTE: This algorithm doesn't currently support datasets with vertices that - are not (re)numebred vertices from 0 to V-1 where V is the total number of - vertices as this creates isolated vertices. - - Parameters - ---------- - input_graph : cugraph.Graph - cuGraph Graph instance , should contain the connectivity information - as an edge list (edge weights are not used for this algorithm). The - adjacency list will be computed if not already present. - - weights : cudf.DataFrame - Specifies the weights to be used for each vertex. - Vertex should be represented by multiple columns for multi-column - vertices. - - weights['vertex'] : cudf.Series - Contains the vertex identifiers - weights['weight'] : cudf.Series - Contains the weights of vertices - - vertex_pair : cudf.DataFrame, optional (default=None) - A GPU dataframe consisting of two columns representing pairs of - vertices. If provided, the jaccard coefficient is computed for the - given vertex pairs, else, it is computed for all vertex pairs. - - do_expensive_check : bool, optional (default=False) - Deprecated. - This option added a check to ensure integer vertex IDs are sequential - values from 0 to V-1. That check is now redundant because cugraph - unconditionally renumbers and un-renumbers integer vertex IDs for - optimal performance, therefore this option is deprecated and will be - removed in a future version. - - Returns - ------- - df : cudf.DataFrame - GPU data frame of size E (the default) or the size of the given pairs - (first, second) containing the Jaccard weights. The ordering is - relative to the adjacency list, or that given by the specified vertex - pairs. - - df['first'] : cudf.Series - The first vertex ID of each pair. - df['second'] : cudf.Series - The second vertex ID of each pair. - df['jaccard_coeff'] : cudf.Series - The computed weighted Jaccard coefficient between the first and the - second vertex ID. - - Examples - -------- - >>> import random - >>> from cugraph.datasets import karate - >>> G = karate.get_graph(download=True) - >>> # Create a dataframe containing the vertices with their - >>> # corresponding weight - >>> weights = cudf.DataFrame() - >>> # Sample 10 random vertices from the graph and drop duplicates if - >>> # there are any to avoid duplicates vertices with different weight - >>> # value in the 'weights' dataframe - >>> weights['vertex'] = G.nodes().sample(n=10).drop_duplicates() - >>> # Reset the indices and drop the index column - >>> weights.reset_index(inplace=True, drop=True) - >>> # Create a weight column with random weights - >>> weights['weight'] = [random.random() for w in range( - ... len(weights['vertex']))] - >>> df = cugraph.jaccard_w(G, weights) - - """ - warning_msg = ( - "jaccard_w is deprecated. To compute weighted jaccard, please use " - "jaccard(input_graph, vertex_pair=False, use_weight=True)" - ) - warnings.warn(warning_msg, FutureWarning) - return jaccard(input_graph, vertex_pair, do_expensive_check, use_weight=True) diff --git a/python/cugraph/cugraph/link_prediction/woverlap.py b/python/cugraph/cugraph/link_prediction/woverlap.py deleted file mode 100644 index 5f43ad0670b..00000000000 --- a/python/cugraph/cugraph/link_prediction/woverlap.py +++ /dev/null @@ -1,122 +0,0 @@ -# Copyright (c) 2019-2023, 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. - -from cugraph.link_prediction import overlap -import cudf -import warnings - -from cugraph.structure import Graph -from cugraph.utilities.utils import import_optional - -# FIXME: the networkx.Graph type used in type annotations is specified -# using a string literal to avoid depending on and importing networkx. -# Instead, networkx is imported optionally, which may cause a problem -# for a type checker if run in an environment where networkx is not installed. -networkx = import_optional("networkx") - - -def overlap_w( - input_graph: Graph, - weights: cudf.DataFrame = None, # deprecated - vertex_pair: cudf.DataFrame = None, - do_expensive_check: bool = False, # deprecated -): - """ - Compute the weighted Overlap Coefficient between each pair of vertices - connected by an edge, or between arbitrary pairs of vertices specified by - the user. Overlap Coefficient is defined between two sets as the ratio of - the volume of their intersection divided by the smaller of their volumes. - In the context of graphs, the neighborhood of a vertex is seen as a set. - The Overlap Coefficient weight of each edge represents the strength of - connection between vertices based on the relative similarity of their - neighbors. If first is specified but second is not, or vice versa, an - exception will be thrown. - - NOTE: This algorithm doesn't currently support datasets with vertices that - are not (re)numebred vertices from 0 to V-1 where V is the total number of - vertices as this creates isolated vertices. - - Parameters - ---------- - input_graph : cugraph.Graph - cuGraph Graph instance, should contain the connectivity information - as an edge list (edge weights are not used for this algorithm). The - adjacency list will be computed if not already present. - - weights : cudf.DataFrame - Specifies the weights to be used for each vertex. - Vertex should be represented by multiple columns for multi-column - vertices. - - weights['vertex'] : cudf.Series - Contains the vertex identifiers - - weights['weight'] : cudf.Series - Contains the weights of vertices - - vertex_pair : cudf.DataFrame, optional (default=None) - A GPU dataframe consisting of two columns representing pairs of - vertices. If provided, the overlap coefficient is computed for the - given vertex pairs, else, it is computed for all vertex pairs. - - do_expensive_check : bool, optional (default=False) - Deprecated. - This option added a check to ensure integer vertex IDs are sequential - values from 0 to V-1. That check is now redundant because cugraph - unconditionally renumbers and un-renumbers integer vertex IDs for - optimal performance, therefore this option is deprecated and will be - removed in a future version. - - Returns - ------- - df : cudf.DataFrame - GPU data frame of size E (the default) or the size of the given pairs - (first, second) containing the overlap coefficients. The ordering is - relative to the adjacency list, or that given by the specified vertex - pairs. - - df['first'] : cudf.Series - The first vertex ID of each pair. - - df['second'] : cudf.Series - The second vertex ID of each pair. - - df['overlap_coeff'] : cudf.Series - The computed weighted Overlap coefficient between the first and the - second vertex ID. - - Examples - -------- - >>> import random - >>> from cugraph.datasets import karate - >>> G = karate.get_graph(download=True) - >>> # Create a dataframe containing the vertices with their - >>> # corresponding weight - >>> weights = cudf.DataFrame() - >>> # Sample 10 random vertices from the graph and drop duplicates if - >>> # there are any to avoid duplicates vertices with different weight - >>> # value in the 'weights' dataframe - >>> weights['vertex'] = G.nodes().sample(n=10).drop_duplicates() - >>> # Reset the indices and drop the index column - >>> weights.reset_index(inplace=True, drop=True) - >>> # Create a weight column with random weights - >>> weights['weight'] = [random.random() for w in range( - ... len(weights['vertex']))] - >>> df = cugraph.overlap_w(G, weights) - """ - warning_msg = ( - " overlap_w is deprecated. To compute weighted overlap, please use " - "overlap(input_graph, vertex_pair=False, use_weight=True)" - ) - warnings.warn(warning_msg, FutureWarning) - return overlap(input_graph, vertex_pair, do_expensive_check, use_weight=True) diff --git a/python/cugraph/cugraph/link_prediction/wsorensen.py b/python/cugraph/cugraph/link_prediction/wsorensen.py deleted file mode 100644 index ff502b36837..00000000000 --- a/python/cugraph/cugraph/link_prediction/wsorensen.py +++ /dev/null @@ -1,118 +0,0 @@ -# Copyright (c) 2021-2023, 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. - -from cugraph.link_prediction import sorensen -import cudf -import warnings - -from cugraph.structure import Graph -from cugraph.utilities.utils import import_optional - -# FIXME: the networkx.Graph type used in type annotations is specified -# using a string literal to avoid depending on and importing networkx. -# Instead, networkx is imported optionally, which may cause a problem -# for a type checker if run in an environment where networkx is not installed. -networkx = import_optional("networkx") - - -def sorensen_w( - input_graph: Graph, - weights: cudf.DataFrame = None, # deprecated - vertex_pair: cudf.DataFrame = None, - do_expensive_check: bool = False, # deprecated -): - """ - Compute the weighted Sorensen similarity between each pair of vertices - connected by an edge, or between arbitrary pairs of vertices specified by - the user. Sorensen coefficient is defined between two sets as the ratio of - twice the volume of their intersection divided by the volume of each set. - - NOTE: This algorithm doesn't currently support datasets with vertices that - are not (re)numebred vertices from 0 to V-1 where V is the total number of - vertices as this creates isolated vertices. - - Parameters - ---------- - input_graph : cugraph.Graph - cuGraph Graph instance, should contain the connectivity information - as an edge list (edge weights are not used for this algorithm). The - adjacency list will be computed if not already present. - - weights : cudf.DataFrame - Specifies the weights to be used for each vertex. - Vertex should be represented by multiple columns for multi-column - vertices. - - weights['vertex'] : cudf.Series - Contains the vertex identifiers - - weights['weight'] : cudf.Series - Contains the weights of vertices - - vertex_pair : cudf.DataFrame, optional (default=None) - A GPU dataframe consisting of two columns representing pairs of - vertices. If provided, the sorensen coefficient is computed for the - given vertex pairs, else, it is computed for all vertex pairs. - - do_expensive_check : bool, optional (default=False) - Deprecated. - This option added a check to ensure integer vertex IDs are sequential - values from 0 to V-1. That check is now redundant because cugraph - unconditionally renumbers and un-renumbers integer vertex IDs for - optimal performance, therefore this option is deprecated and will be - removed in a future version. - - Returns - ------- - df : cudf.DataFrame - GPU data frame of size E (the default) or the size of the given pairs - (first, second) containing the Sorensen weights. The ordering is - relative to the adjacency list, or that given by the specified vertex - pairs. - - df['first'] : cudf.Series - The first vertex ID of each pair. - - df['second'] : cudf.Series - The second vertex ID of each pair. - - df['sorensen_coeff'] : cudf.Series - The computed weighted Sorensen coefficient between the first and the - second vertex ID. - - Examples - -------- - >>> import random - >>> from cugraph.datasets import karate - >>> G = karate.get_graph(download=True) - >>> # Create a dataframe containing the vertices with their - >>> # corresponding weight - >>> weights = cudf.DataFrame() - >>> # Sample 10 random vertices from the graph and drop duplicates if - >>> # there are any to avoid duplicates vertices with different weight - >>> # value in the 'weights' dataframe - >>> weights['vertex'] = G.nodes().sample(n=10).drop_duplicates() - >>> # Reset the indices and drop the index column - >>> weights.reset_index(inplace=True, drop=True) - >>> # Create a weight column with random weights - >>> weights['weight'] = [random.random() for w in range( - ... len(weights['vertex']))] - >>> df = cugraph.sorensen_w(G, weights) - - """ - warning_msg = ( - "sorensen_w is deprecated. To compute weighted sorensen, please use " - "sorensen(input_graph, vertex_pair=False, use_weight=True)" - ) - warnings.warn(warning_msg, FutureWarning) - return sorensen(input_graph, vertex_pair, use_weight=True) diff --git a/python/cugraph/cugraph/tests/community/test_louvain.py b/python/cugraph/cugraph/tests/community/test_louvain.py index 5441998fb46..44b403b2b7c 100644 --- a/python/cugraph/cugraph/tests/community/test_louvain.py +++ b/python/cugraph/cugraph/tests/community/test_louvain.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2023, NVIDIA CORPORATION. +# Copyright (c) 2019-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 @@ -13,7 +13,6 @@ import gc -import time import pytest import networkx as nx @@ -48,11 +47,7 @@ def cugraph_call(graph_file, edgevals=False, directed=False): G = graph_file.get_graph( create_using=cugraph.Graph(directed=directed), ignore_weights=not edgevals ) - # cugraph Louvain Call - t1 = time.time() parts, mod = cugraph.louvain(G) - t2 = time.time() - t1 - print("Cugraph Time : " + str(t2)) return parts, mod @@ -62,13 +57,8 @@ def networkx_call(M): Gnx = nx.from_pandas_edgelist( M, source="0", target="1", edge_attr="weight", create_using=nx.Graph() ) - # Networkx louvain Call - print("Solving... ") - t1 = time.time() parts = community.best_partition(Gnx) - t2 = time.time() - t1 - print("Networkx Time : " + str(t2)) return parts diff --git a/python/cugraph/cugraph/tests/community/test_triangle_count.py b/python/cugraph/cugraph/tests/community/test_triangle_count.py index a4d267719ba..449df32b52a 100644 --- a/python/cugraph/cugraph/tests/community/test_triangle_count.py +++ b/python/cugraph/cugraph/tests/community/test_triangle_count.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2023, NVIDIA CORPORATION. +# Copyright (c) 2019-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 @@ -163,11 +163,3 @@ def test_triangles_directed_graph(): with pytest.raises(ValueError): cugraph.triangle_count(G) - - -# FIXME: Remove this test once experimental.triangle count is removed -@pytest.mark.sg -def test_experimental_triangle_count(input_combo): - G = input_combo["G"] - with pytest.warns(Warning): - cugraph.experimental.triangle_count(G) diff --git a/python/cugraph/cugraph/tests/link_prediction/test_jaccard.py b/python/cugraph/cugraph/tests/link_prediction/test_jaccard.py index 7ce7d263eda..3691ad5a8c9 100644 --- a/python/cugraph/cugraph/tests/link_prediction/test_jaccard.py +++ b/python/cugraph/cugraph/tests/link_prediction/test_jaccard.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 @@ -23,7 +23,6 @@ from cugraph.datasets import netscience from cugraph.testing import utils, UNDIRECTED_DATASETS from cudf.testing import assert_series_equal -from cudf.testing.testing import assert_frame_equal SRC_COL = "0" DST_COL = "1" @@ -177,35 +176,20 @@ def test_jaccard(read_csv, gpubenchmark, use_weight): cu_src, cu_dst, cu_coeff = cugraph_call( gpubenchmark, graph_file, input_df=M_cu, use_weight=use_weight ) - if not use_weight: - nx_src, nx_dst, nx_coeff = networkx_call(M) - # Calculating mismatch - err = 0 - tol = 1.0e-06 + nx_src, nx_dst, nx_coeff = networkx_call(M) - assert len(cu_coeff) == len(nx_coeff) - for i in range(len(cu_coeff)): - if abs(cu_coeff[i] - nx_coeff[i]) > tol * 1.1: - err += 1 + # Calculating mismatch + err = 0 + tol = 1.0e-06 - print("Mismatches: %d" % err) - assert err == 0 - else: - G = graph_file.get_graph() - res_w_jaccard = cugraph.jaccard_w(G, vertex_pair=M_cu[[SRC_COL, DST_COL]]) - res_w_jaccard = res_w_jaccard.sort_values( - [VERTEX_PAIR_FIRST_COL, VERTEX_PAIR_SECOND_COL] - ).reset_index(drop=True) - res_jaccard = cudf.DataFrame() - res_jaccard[VERTEX_PAIR_FIRST_COL] = cu_src - res_jaccard[VERTEX_PAIR_SECOND_COL] = cu_dst - res_jaccard[JACCARD_COEFF_COL] = cu_coeff - assert_frame_equal( - res_w_jaccard, res_jaccard, check_dtype=False, check_like=True - ) + assert len(cu_coeff) == len(nx_coeff) + for i in range(len(cu_coeff)): + if abs(cu_coeff[i] - nx_coeff[i]) > tol * 1.1: + err += 1 - # FIXME: compare weighted jaccard results against resultset api + print("Mismatches: %d" % err) + assert err == 0 @pytest.mark.sg diff --git a/python/cugraph/cugraph/tests/link_prediction/test_overlap.py b/python/cugraph/cugraph/tests/link_prediction/test_overlap.py index e24deaa61ac..11ef0047b63 100644 --- a/python/cugraph/cugraph/tests/link_prediction/test_overlap.py +++ b/python/cugraph/cugraph/tests/link_prediction/test_overlap.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2023, NVIDIA CORPORATION. +# Copyright (c) 2019-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 @@ -21,7 +21,6 @@ import cugraph from cugraph.testing import utils, UNDIRECTED_DATASETS from cudf.testing import assert_series_equal -from cudf.testing.testing import assert_frame_equal SRC_COL = "0" DST_COL = "1" @@ -63,13 +62,10 @@ def cugraph_call(benchmark_callable, graph_file, pairs, use_weight=False): create_using=cugraph.Graph(directed=False), ignore_weights=not use_weight ) # cugraph Overlap Call - df = benchmark_callable(cugraph.overlap, G, pairs) + df = benchmark_callable(cugraph.overlap, G, pairs, use_weight=use_weight) df = df.sort_values(by=[VERTEX_PAIR_FIRST_COL, VERTEX_PAIR_SECOND_COL]).reset_index( drop=True ) - if use_weight: - res_w_overlap = cugraph.overlap_w(G, vertex_pair=pairs) - assert_frame_equal(res_w_overlap, df, check_dtype=False, check_like=True) return df[OVERLAP_COEFF_COL].to_numpy() diff --git a/python/cugraph/cugraph/tests/link_prediction/test_sorensen.py b/python/cugraph/cugraph/tests/link_prediction/test_sorensen.py index 6b4074fce30..8806f135302 100644 --- a/python/cugraph/cugraph/tests/link_prediction/test_sorensen.py +++ b/python/cugraph/cugraph/tests/link_prediction/test_sorensen.py @@ -1,4 +1,4 @@ -# Copyright (c) 2021-2023, NVIDIA CORPORATION. +# 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 @@ -21,7 +21,6 @@ from cugraph.testing import utils, UNDIRECTED_DATASETS from cugraph.datasets import netscience from cudf.testing import assert_series_equal -from cudf.testing.testing import assert_frame_equal SRC_COL = "0" DST_COL = "1" @@ -58,37 +57,29 @@ def compare_sorensen_two_hop(G, Gnx, use_weight=False): # print(f'G = {G.edgelist.edgelist_df}') - df = cugraph.sorensen(G, pairs) + df = cugraph.sorensen(G, pairs, use_weight=use_weight) df = df.sort_values(by=[VERTEX_PAIR_FIRST_COL, VERTEX_PAIR_SECOND_COL]).reset_index( drop=True ) - if not use_weight: - nx_pairs = list(pairs.to_records(index=False)) + nx_pairs = list(pairs.to_records(index=False)) - # print(f'nx_pairs = {len(nx_pairs)}') + # print(f'nx_pairs = {len(nx_pairs)}') - preds = nx.jaccard_coefficient(Gnx, nx_pairs) + preds = nx.jaccard_coefficient(Gnx, nx_pairs) - # FIXME: Use known correct values of Sorensen for few graphs, - # hardcode it and compare to Cugraph Sorensen to get a more robust test + # FIXME: Use known correct values of Sorensen for few graphs, + # hardcode it and compare to Cugraph Sorensen to get a more robust test - # Conversion from Networkx Jaccard to Sorensen - # No networkX equivalent + # Conversion from Networkx Jaccard to Sorensen + # No networkX equivalent - nx_coeff = list(map(lambda x: (2 * x[2]) / (1 + x[2]), preds)) + nx_coeff = list(map(lambda x: (2 * x[2]) / (1 + x[2]), preds)) - assert len(nx_coeff) == len(df) - for i in range(len(df)): - diff = abs(nx_coeff[i] - df[SORENSEN_COEFF_COL].iloc[i]) - assert diff < 1.0e-6 - else: - # FIXME: compare results against resultset api - res_w_sorensen = cugraph.sorensen_w(G, vertex_pair=pairs) - res_w_sorensen = res_w_sorensen.sort_values( - [VERTEX_PAIR_FIRST_COL, VERTEX_PAIR_SECOND_COL] - ).reset_index(drop=True) - assert_frame_equal(res_w_sorensen, df, check_dtype=False, check_like=True) + assert len(nx_coeff) == len(df) + for i in range(len(df)): + diff = abs(nx_coeff[i] - df[SORENSEN_COEFF_COL].iloc[i]) + assert diff < 1.0e-6 def cugraph_call(benchmark_callable, graph_file, input_df=None, use_weight=False): diff --git a/python/cugraph/cugraph/utilities/api_tools.py b/python/cugraph/cugraph/utilities/api_tools.py deleted file mode 100644 index 195a5885818..00000000000 --- a/python/cugraph/cugraph/utilities/api_tools.py +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright (c) 2022, 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. - -import pylibcugraph.utilities.api_tools as api_tools - -experimental_prefix = "EXPERIMENTAL" - - -def experimental_warning_wrapper(obj): - return api_tools.experimental_warning_wrapper(obj) - - -def promoted_experimental_warning_wrapper(obj): - return api_tools.promoted_experimental_warning_wrapper(obj) - - -def deprecated_warning_wrapper(obj): - return api_tools.deprecated_warning_wrapper(obj) diff --git a/python/pylibcugraph/pylibcugraph/__init__.py b/python/pylibcugraph/pylibcugraph/__init__.py index 1d02498ea30..ab518e24cae 100644 --- a/python/pylibcugraph/pylibcugraph/__init__.py +++ b/python/pylibcugraph/pylibcugraph/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2021-2023, NVIDIA CORPORATION. +# 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 @@ -15,8 +15,6 @@ strongly_connected_components, ) -from pylibcugraph import experimental - from pylibcugraph.graphs import SGGraph, MGGraph from pylibcugraph.resource_handle import ResourceHandle diff --git a/python/pylibcugraph/pylibcugraph/experimental/__init__.py b/python/pylibcugraph/pylibcugraph/experimental/__init__.py deleted file mode 100644 index 6194ace5956..00000000000 --- a/python/pylibcugraph/pylibcugraph/experimental/__init__.py +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright (c) 2022-2023, 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. - -""" -The "experimental" package contains packages, functions, classes, etc. that -are ready for use but do not have their API signatures or implementation -finalized yet. This allows users to provide early feedback while still -permitting bigger design changes to take place. - -ALL APIS IN EXPERIMENTAL ARE SUBJECT TO CHANGE OR REMOVAL. - -Calling experimental objects will raise a PendingDeprecationWarning warning. - -If an object is "promoted" to the public API, the experimental namespace will -continue to also have that object present for at least another release. A -different warning will be output in that case, indicating that the experimental -API has been promoted and will no longer be importable from experimental much -longer. -""" - -from pylibcugraph.utilities.api_tools import ( - experimental_warning_wrapper, - promoted_experimental_warning_wrapper, -) - -# experimental_warning_wrapper() wraps the object in a function that provides -# the appropriate warning about using experimental code. - -# promoted_experimental_warning_wrapper() is used instead when an object is present -# in both the experimental namespace and its final, public namespace. - -# The convention of naming functions with the "EXPERIMENTAL__" prefix -# discourages users from directly importing experimental objects that don't have -# the appropriate warnings, such as what the wrapper and the "experimental" -# namespace name provides. - -from pylibcugraph.graphs import SGGraph - -SGGraph = promoted_experimental_warning_wrapper(SGGraph) - -from pylibcugraph.graphs import MGGraph - -MGGraph = promoted_experimental_warning_wrapper(MGGraph) - -from pylibcugraph.resource_handle import ResourceHandle - -ResourceHandle = promoted_experimental_warning_wrapper(ResourceHandle) - -from pylibcugraph.graph_properties import GraphProperties - -GraphProperties = promoted_experimental_warning_wrapper(GraphProperties) - -from pylibcugraph.pagerank import pagerank - -pagerank = promoted_experimental_warning_wrapper(pagerank) - -from pylibcugraph.sssp import sssp - -sssp = promoted_experimental_warning_wrapper(sssp) - -from pylibcugraph.hits import hits - -hits = promoted_experimental_warning_wrapper(hits) - -from pylibcugraph.node2vec import node2vec - - -# from pylibcugraph.jaccard_coefficients import EXPERIMENTAL__jaccard_coefficients - -# jaccard_coefficients = experimental_warning_wrapper(EXPERIMENTAL__jaccard_coefficients) - -# from pylibcugraph.overlap_coefficients import EXPERIMENTAL__overlap_coefficients - -# overlap_coefficients = experimental_warning_wrapper(EXPERIMENTAL__overlap_coefficients) - -# from pylibcugraph.sorensen_coefficients import EXPERIMENTAL__sorensen_coefficients - -# sorensen_coefficients = experimental_warning_wrapper( -# EXPERIMENTAL__sorensen_coefficients -# ) diff --git a/python/pylibcugraph/pylibcugraph/utilities/api_tools.py b/python/pylibcugraph/pylibcugraph/utilities/api_tools.py index b0b1e9b893e..94b51cea974 100644 --- a/python/pylibcugraph/pylibcugraph/utilities/api_tools.py +++ b/python/pylibcugraph/pylibcugraph/utilities/api_tools.py @@ -1,4 +1,4 @@ -# Copyright (c) 2022, 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 @@ -19,7 +19,7 @@ experimental_prefix = "EXPERIMENTAL" -def experimental_warning_wrapper(obj): +def experimental_warning_wrapper(obj, obj_namespace_name=None): """ Wrap obj in a function or class that prints a warning about it being "experimental" (ie. it is in the public API but subject to change or @@ -31,6 +31,13 @@ def experimental_warning_wrapper(obj): public API so it can remain hidden while it is still experimental, but have a public name within the experimental namespace so it can be easily discovered and used. + + obj_namespace_name can be passed in to make the warning message + clearer. For example, if the obj is the function sssp and is accessed as + part of a package like "pylibcugraph.experimental.sssp", obj_namespace_name + should be "pylibcugraph.experimental". If obj_namespace_name is not + passed, the namespace will be found using inspect.stack(), which can be + expensive. """ obj_type = type(obj) if not callable(obj): @@ -40,16 +47,17 @@ def experimental_warning_wrapper(obj): obj_name = obj_name.lstrip(experimental_prefix) obj_name = obj_name.lstrip("__") - # Assume the caller of this function is the module containing the - # experimental obj and try to get its namespace name. Default to no - # namespace name if it could not be found. - call_stack = inspect.stack() - calling_frame = call_stack[1].frame - ns_name = calling_frame.f_locals.get("__name__") - dot = "." if ns_name is not None else "" + if obj_namespace_name is None: + # Assume the caller of this function is the module containing the + # experimental obj and try to get its namespace name. Default to no + # namespace name if it could not be found. + call_stack = inspect.stack() + calling_frame = call_stack[1].frame + obj_namespace_name = calling_frame.f_locals.get("__name__") + dot = "." if obj_namespace_name is not None else "" warning_msg = ( - f"{ns_name}{dot}{obj_name} is experimental and will " + f"{obj_namespace_name}{dot}{obj_name} is experimental and may " "change or be removed in a future release." ) @@ -73,7 +81,7 @@ def __init__(self, *args, **kwargs): else: self = obj(*args, **kwargs) - WarningWrapperClass.__module__ = ns_name + WarningWrapperClass.__module__ = obj_namespace_name WarningWrapperClass.__qualname__ = obj_name WarningWrapperClass.__name__ = obj_name WarningWrapperClass.__doc__ = obj.__doc__ @@ -88,7 +96,7 @@ def warning_wrapper_function(*args, **kwargs): warnings.warn(warning_msg, PendingDeprecationWarning) return obj(*args, **kwargs) - warning_wrapper_function.__module__ = ns_name + warning_wrapper_function.__module__ = obj_namespace_name warning_wrapper_function.__qualname__ = obj_name warning_wrapper_function.__name__ = obj_name warning_wrapper_function.__doc__ = obj.__doc__ @@ -96,7 +104,7 @@ def warning_wrapper_function(*args, **kwargs): return warning_wrapper_function -def promoted_experimental_warning_wrapper(obj): +def promoted_experimental_warning_wrapper(obj, obj_namespace_name=None): """ Wrap obj in a function of class that prints a warning about it being close to being removed, prior to calling obj and returning its value. @@ -106,6 +114,13 @@ def promoted_experimental_warning_wrapper(obj): same object. This wrapper is applied to the one with the "private" name, urging the user to instead use the one in the public API, which does not have the experimental namespace. + + obj_namespace_name can be passed in to make the warning message + clearer. For example, if the obj is the function sssp and is accessed as + part of a package like "pylibcugraph.experimental.sssp", obj_namespace_name + should be "pylibcugraph.experimental". If obj_namespace_name is not + passed, the namespace will be found using inspect.stack(), which can be + expensive. """ obj_type = type(obj) if not callable(obj): @@ -115,13 +130,17 @@ def promoted_experimental_warning_wrapper(obj): obj_name = obj_name.lstrip(experimental_prefix) obj_name = obj_name.lstrip("__") - call_stack = inspect.stack() - calling_frame = call_stack[1].frame - ns_name = calling_frame.f_locals.get("__name__") - dot = "." if ns_name is not None else "" + if obj_namespace_name is None: + # Assume the caller of this function is the module containing the + # experimental obj and try to get its namespace name. Default to no + # namespace name if it could not be found. + call_stack = inspect.stack() + calling_frame = call_stack[1].frame + obj_namespace_name = calling_frame.f_locals.get("__name__") + dot = "." if obj_namespace_name is not None else "" warning_msg = ( - f"{ns_name}{dot}{obj_name} has been promoted out of " + f"{obj_namespace_name}{dot}{obj_name} has been promoted out of " "experimental. Use the non-experimental version instead, " "as this one will be removed in a future release." ) @@ -139,7 +158,7 @@ def __init__(self, *args, **kwargs): else: self = obj(*args, **kwargs) - WarningWrapperClass.__module__ = ns_name + WarningWrapperClass.__module__ = obj_namespace_name WarningWrapperClass.__qualname__ = obj_name WarningWrapperClass.__name__ = obj_name @@ -150,33 +169,43 @@ def warning_wrapper_function(*args, **kwargs): warnings.warn(warning_msg, DeprecationWarning) return obj(*args, **kwargs) - warning_wrapper_function.__module__ = ns_name + warning_wrapper_function.__module__ = obj_namespace_name warning_wrapper_function.__qualname__ = obj_name warning_wrapper_function.__name__ = obj_name return warning_wrapper_function -def deprecated_warning_wrapper(obj): +def deprecated_warning_wrapper(obj, obj_namespace_name=None): """ Wrap obj in a function or class that prints a warning about it being deprecated (ie. it is in the public API but will be removed or replaced by a refactored version), prior to calling obj and returning its value. + + obj_namespace_name can be passed in to make the warning message + clearer. For example, if the obj is the function sssp and is accessed as + part of a package like "pylibcugraph.experimental.sssp", obj_namespace_name + should be "pylibcugraph.experimental". If obj_namespace_name is not + passed, the namespace will be found using inspect.stack(), which can be + expensive. """ obj_type = type(obj) if not callable(obj): raise TypeError("obj must be a class or a function type, got " f"{obj_type}") obj_name = obj.__name__ - call_stack = inspect.stack() - calling_frame = call_stack[1].frame - ns_name = calling_frame.f_locals.get("__name__") - dot = "." if ns_name is not None else "" - + if obj_namespace_name is None: + # Assume the caller of this function is the module containing the + # deprecated obj and try to get its namespace name. Default to no + # namespace name if it could not be found. + call_stack = inspect.stack() + calling_frame = call_stack[1].frame + obj_namespace_name = calling_frame.f_locals.get("__name__") + + dot = "." if obj_namespace_name is not None else "" warning_msg = ( - f"{ns_name}{dot}{obj_name} has been deprecated and will " - "be removed next release. If an experimental version " - "exists, it may replace this version in a future release." + f"{obj_namespace_name}{dot}{obj_name} has been deprecated and will " + "be removed in a future release." ) if obj_type is type: @@ -192,7 +221,7 @@ def __init__(self, *args, **kwargs): else: self = obj(*args, **kwargs) - WarningWrapperClass.__module__ = ns_name + WarningWrapperClass.__module__ = obj_namespace_name WarningWrapperClass.__qualname__ = obj_name WarningWrapperClass.__name__ = obj_name @@ -203,7 +232,7 @@ def warning_wrapper_function(*args, **kwargs): warnings.warn(warning_msg, DeprecationWarning) return obj(*args, **kwargs) - warning_wrapper_function.__module__ = ns_name + warning_wrapper_function.__module__ = obj_namespace_name warning_wrapper_function.__qualname__ = obj_name warning_wrapper_function.__name__ = obj_name