pydgc


Namepydgc JSON
Version 1.0.2 PyPI version JSON
download
home_pagehttps://github.com/Marigoldwu/PyDGC
SummaryPyDGC: A Deep Graph Clustering Benchmark
upload_time2025-07-27 12:01:55
maintainerNone
docs_urlNone
authorBenyu Wu
requires_python>=3.8
licenseNone
keywords deep graph clustering deep clustering pytorch pyg
VCS
bugtrack_url
requirements matplotlib numpy ogb PyYAML rich scikit_learn scipy seaborn setuptools torch torch_cluster torch_geometric torch_sparse torch_scatter umap_learn yacs
Travis-CI No Travis.
coveralls test coverage No coveralls.
            

<div align="center">
<img src="https://raw.githubusercontent.com/Marigoldwu/PyDGC/master/assets/logo.png" border="0" width=600px/>
</div>
<div align="center">
  <a href="#PyDGC">Overview</a> |
  <a href="#DGCBench">DGCBench</a> |
  <a href="#Installation">Installation</a> |
  <a href="#Tutorial">Tutorial</a> |
  <a href="https://pydgc.readthedocs.io/latest/">Docs</a> |
  <a href="#Citation">Citation</a> 
  <a href="#Visualization">Visualization</a>
</div>

# PyDGC

**PyDGC**, a flexible and extensible Python library  for deep graph clustering (DGC), is compatible with frameworks such as PyG and OGB. It supports the easy integration of new models and datasets, facilitating the rapid development, reproduction, and fair comparison of DGC methods.

## News
- 🔥*2025.07*: API documentation is released.
- 🔥*2025.07*: PyDGC is now available on PyPI.
- *2025.05*: Release source code of PyDGC.

## What is DGC?

Deep graph clustering, which aims to reveal the underlying graph structure and divide the nodes into different groups, has attracted intensive attention in recent years. 

More details can be found in the [survey](https://arxiv.org/abs/2211.12875) paper. Please click [here](./articles) to view the comprehensive archive of papers.

Timeline of representative models.

<div align="center">
<img src="https://raw.githubusercontent.com/Marigoldwu/PyDGC/master/assets/Roadmap.png" border="0" width=800px/>
</div>

## DGCBench

**DGCBench** encompasses 12 diverse datasets with different characteristics and 12 state-of-the-art methods from all major paradigms. By integrating them into a standardized pipeline, we ensure fair, reproducible, and comprehensive evaluations across multiple dimensions. 

 ## Features

- Integration of multiple deep graph clustering models. [Supported Models](#Supported-Models)
- Support for various graph datasets from PyG and OGB. [Supported Datasets](#Supported-Datasets)
- Model evaluation and visualization capabilities.
- Standardized Pipeline.

### Overview of Pipeline

<div align="center">
<img src="https://raw.githubusercontent.com/Marigoldwu/PyDGC/master/assets/Pipelines.png" border="0" width=800px/>
</div>

# Installation

It is recommended to use conda to create a virtual python environment.

  ```shell
  conda create --name DGCbench python=3.8
  conda activate DGCbench
  ```

It is recommended to install GPU or CPU version of PyTorch according to the device in advance, version >=2.0.1.

- (Plan 1) Install with Pip

  ```shell
  pip install pydgc
  ```

- (Plan 2) Installation for local development

  ```shell
  git clone https://github.com/Marigoldwu/PyDGC.git
  cd PyDGC
  pip install -e .
  ```

# Tutorial

## Reproduce built-in models

Take GAE as an example. You can run the following command to reproduce the results of GAE on CORA dataset.

Create a folder `dgc` to store the results.

```shell
mkdir dgc
cd dgc
mkdir gae
cd gae
```

Copy `config.yaml` and `run.py` of GAE from our github repository to the current folder.

```shell
wget https://raw.githubusercontent.com/Marigoldwu/PyDGC/master/examples/pipelines/gae/config.yaml
wget https://raw.githubusercontent.com/Marigoldwu/PyDGC/master/examples/pipelines/gae/run.py
```

Run the pipeline.

```shell
python run.py
```

You can also specify arguments in the command line:

```shell
python run.py --dataset_name CORA -eval_each --rounds 1
```

> Note:
> - `--dataset_name` is the name of the dataset.
> - `--rounds` is the number of times to run the pipeline.
> - `-eval_each` is the flag to evaluate the model after each epoch.

Other optional arguments:

```shell
--cfg_file_path YourPath  # path of corresponding configurations file
--flag FlagContent  # Descriptions
--drop_edge float  # probability of dropping edges
--drop_feature float  # probability of dropping features
--add_edge float  # probability of adding edges
--add_noise float  # standard deviation of Gaussian Noise
-pretrain  # only run the pretraining stage in the model
```

## Develop your own DGC model

```python
from pydgc.models import DGCModel

class MyModel(DGCModel):
    def __init__(self, logger, cfg):
        super(MyModel).__init__(logger, cfg)
        your_model = ...  # Your model
        
        self.loss_curve = []
        self.nmi_curve = []
        self.best_embedding = None
        self.best_predicted_labels = None
        self.best_results = {'ACC': -1}
    
    def forward(self, data):
        ...  # forward process
        return something
    # If needed
    def loss(self, *args, **kwargs):
    # If needed
    def pretrain(self, data, cfg, flag):
    
    def train_model(self, data, cfg, flag):
    
    def get_embedding(self, data):
    
    def clustering(self, data):
        embedding = self.get_embedding(data)
        # clustering
        return embedding, labels_, clustering_centers
    
    def evaluate(self, data):
        embedding, predicted_labels, clustering_centers = self.clustering(data)
        ground_truth = data.y.numpy()
        metric = DGCMetric(ground_truth, predicted_labels.numpy(), embedding, data.edge_index)
        results = metric.evaluate_one_epoch(self.logger, self.cfg.evaluate)
        return embedding, predicted_labels, results

```

## Develop your own DGC pipeline

```python
from pydgc.pipelines import BasePipeline
from pydgc.utils import perturb_data
import MyModel  # import your own model

class MyPipeline(BasePipeline):
    def __init__(self, args):
        super(MyPipeline).__init__(args)
    
    def augmentation(self):
        self.data = perturb_data(self.data, self.cfg.dataset.augmentation)
        # other augmentations if needed
        
    def build_model(self):
        model = MyModel(self.logger, self.cfg)
        self.logger.model_info(model)
        return model
```

# Supported Models

| No.  | Model     | Paper | Source Code |
| :----: | :---------: | :-----: | :-----------: |
| 1    | GAE       |[Variational Graph Auto-Encoders](https://arxiv.org/abs/1611.07308)|[code](https://github.com/tkipf/gae)|
| 2    | GAE_SSC   | - | - |
| 3    | DAEGC     |[Attributed graph clustering: A deep attentional embedding approach](https://arxiv.org/pdf/1906.06532)|[code](https://github.com/Tiger101010/DAEGC)|
| 4    | SDCN      |[Structural Deep Clustering Network](https://arxiv.org/pdf/2002.01633)|[code](https://github.com/bdy9527/SDCN)|
| 5    | DFCN      |[Deep Fusion Clustering Network](https://ojs.aaai.org/index.php/AAAI/article/view/17198/17005)|[code](https://github.com/WxTu/DFCN)|
| 6    | DCRN      |[Deep Graph Clustering via Dual Correlation Reduction](https://aaai.org/papers/07603-deep-graph-clustering-via-dual-correlation-reduction/)|[code](https://github.com/yueliu1999/DCRN)|
| 7    | AGC-DRR   |[Attributed Graph Clustering with Dual Redundancy Reduction](https://www.ijcai.org/proceedings/2022/0418.pdf)|[code](https://github.com/gongleii/AGC-DRR)|
| 8    | DGCluster |[DGCLUSTER: A Neural Framework for Attributed Graph Clustering via Modularity Maximization](https://ojs.aaai.org/index.php/AAAI/article/view/28983)|[code](https://github.com/pyrobits/DGCluster)|
| 9    | HSAN      |[Hard Sample Aware Network for Contrastive Deep Graph Clustering](https://arxiv.org/abs/2212.08665)|[code](https://github.com/yueliu1999/HSAN)|
| 10   | CCGC      |[Cluster-guided Contrastive Graph Clustering Network](https://arxiv.org/abs/2301.01098)|[code](https://github.com/xihongyang1999/CCGC)|
| 11   | MAGI      |[Revisiting Modularity Maximization for Graph Clustering: A Contrastive Learning Perspective](https://dl.acm.org/doi/abs/10.1145/3637528.3671967)|[code](https://github.com/EdisonLeeeee/MAGI)|
| 12   | NS4GC     |[Reliable Node Similarity Matrix Guided Contrastive Graph Clustering](https://arxiv.org/pdf/2408.03765?)|[code](https://github.com/Cloudy1225/NS4GC)|

# Supported Datasets

| No.  | Dataset      | #Samples | #Features | #Edges | #Classes | Homo. Ratio |
| :----: | :------------: | --------: | ---------: | ------: | --------: | -----------: |
| 1    | Wiki         |2,405|4,973|17,981|17|0.71|
| 2    | Cora         |2,708|1,433|5,429|7|0.81|
| 3    | ACM          |3,025|1,870|13,128|3|0.82|
| 4    | Citeseer     |3,327|3,703|9,104|6|0.74|
| 5    | DBLP         |4,057|334|3,528|4|0.80|
| 6    | PubMed       |19,717|500|88,648|3|0.80|
| 7    | Ogbn-arXiv   |169,343|128|2,315,598|40|0.65|
| 8    | USPS(3NN)|9,298|256|27,894|10|0.98|
| 9    | HHAR(3NN)|10,299|561|30,897|6|0.95|
| 10   | BlogCatalog  |5,196|8,189|343,486|6|0.40|
| 11   | Flickr       |7,575|12,047|479,476|9|0.24|
| 12   | Roman-empire |22,662|300|65,854|18|0.05|

> The 12 datasets above are benchmark datasets introduced in our paper. More Datasets will be introduced.

# Citation

# Visualization
<div align="center">
<img src="https://raw.githubusercontent.com/Marigoldwu/PyDGC/master/assets/Cora.png" border="0"/>
</div>

<div align="center">
<img src="https://raw.githubusercontent.com/Marigoldwu/PyDGC/master/assets/ACM.png" border="0"/>
</div>

# Related Repositories

ADGC: [Awesome-Deep-Graph-Clustering](https://github.com/yueliu1999/Awesome-Deep-Graph-Clustering)

Older version of this repository: [A-Unified-Framework-for-Attribute-Graph-Clustering](https://github.com/Marigoldwu/PyDGC/releases/tag/v0.0.1)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/Marigoldwu/PyDGC",
    "name": "pydgc",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "Deep Graph Clustering, Deep Clustering, PyTorch, PyG",
    "author": "Benyu Wu",
    "author_email": "bywu109@163.com",
    "download_url": "https://files.pythonhosted.org/packages/80/a6/e15fa53bb93931fb9e1a2968686f1f06cf96886aaeb2bb1b631311fa4a66/pydgc-1.0.2.tar.gz",
    "platform": null,
    "description": "\n\n<div align=\"center\">\n<img src=\"https://raw.githubusercontent.com/Marigoldwu/PyDGC/master/assets/logo.png\" border=\"0\" width=600px/>\n</div>\n<div align=\"center\">\n  <a href=\"#PyDGC\">Overview</a> |\n  <a href=\"#DGCBench\">DGCBench</a> |\n  <a href=\"#Installation\">Installation</a> |\n  <a href=\"#Tutorial\">Tutorial</a> |\n  <a href=\"https://pydgc.readthedocs.io/latest/\">Docs</a> |\n  <a href=\"#Citation\">Citation</a> \n  <a href=\"#Visualization\">Visualization</a>\n</div>\n\n# PyDGC\n\n**PyDGC**, a flexible and extensible Python library  for deep graph clustering (DGC), is compatible with frameworks such as PyG and OGB. It supports the easy integration of new models and datasets, facilitating the rapid development, reproduction, and fair comparison of DGC methods.\n\n## News\n- \ud83d\udd25*2025.07*: API documentation is released.\n- \ud83d\udd25*2025.07*: PyDGC is now available on PyPI.\n- *2025.05*: Release source code of PyDGC.\n\n## What is DGC?\n\nDeep graph clustering, which aims to reveal the underlying graph structure and divide the nodes into different groups, has attracted intensive attention in recent years. \n\nMore details can be found in the [survey](https://arxiv.org/abs/2211.12875) paper. Please click [here](./articles) to view the comprehensive archive of papers.\n\nTimeline of representative models.\n\n<div align=\"center\">\n<img src=\"https://raw.githubusercontent.com/Marigoldwu/PyDGC/master/assets/Roadmap.png\" border=\"0\" width=800px/>\n</div>\n\n## DGCBench\n\n**DGCBench** encompasses 12 diverse datasets with different characteristics and 12 state-of-the-art methods from all major paradigms. By integrating them into a standardized pipeline, we ensure fair, reproducible, and comprehensive evaluations across multiple dimensions. \n\n ## Features\n\n- Integration of multiple deep graph clustering models. [Supported Models](#Supported-Models)\n- Support for various graph datasets from PyG and OGB. [Supported Datasets](#Supported-Datasets)\n- Model evaluation and visualization capabilities.\n- Standardized Pipeline.\n\n### Overview of Pipeline\n\n<div align=\"center\">\n<img src=\"https://raw.githubusercontent.com/Marigoldwu/PyDGC/master/assets/Pipelines.png\" border=\"0\" width=800px/>\n</div>\n\n# Installation\n\nIt is recommended to use conda to create a virtual python environment.\n\n  ```shell\n  conda create --name DGCbench python=3.8\n  conda activate DGCbench\n  ```\n\nIt is recommended to install GPU or CPU version of PyTorch according to the device in advance, version >=2.0.1.\n\n- (Plan 1) Install with Pip\n\n  ```shell\n  pip install pydgc\n  ```\n\n- (Plan 2) Installation for local development\n\n  ```shell\n  git clone https://github.com/Marigoldwu/PyDGC.git\n  cd PyDGC\n  pip install -e .\n  ```\n\n# Tutorial\n\n## Reproduce built-in models\n\nTake GAE as an example. You can run the following command to reproduce the results of GAE on CORA dataset.\n\nCreate a folder `dgc` to store the results.\n\n```shell\nmkdir dgc\ncd dgc\nmkdir gae\ncd gae\n```\n\nCopy `config.yaml` and `run.py` of GAE from our github repository to the current folder.\n\n```shell\nwget https://raw.githubusercontent.com/Marigoldwu/PyDGC/master/examples/pipelines/gae/config.yaml\nwget https://raw.githubusercontent.com/Marigoldwu/PyDGC/master/examples/pipelines/gae/run.py\n```\n\nRun the pipeline.\n\n```shell\npython run.py\n```\n\nYou can also specify arguments in the command line:\n\n```shell\npython run.py --dataset_name CORA -eval_each --rounds 1\n```\n\n> Note:\n> - `--dataset_name` is the name of the dataset.\n> - `--rounds` is the number of times to run the pipeline.\n> - `-eval_each` is the flag to evaluate the model after each epoch.\n\nOther optional arguments:\n\n```shell\n--cfg_file_path YourPath  # path of corresponding configurations file\n--flag FlagContent  # Descriptions\n--drop_edge float  # probability of dropping edges\n--drop_feature float  # probability of dropping features\n--add_edge float  # probability of adding edges\n--add_noise float  # standard deviation of Gaussian Noise\n-pretrain  # only run the pretraining stage in the model\n```\n\n## Develop your own DGC model\n\n```python\nfrom pydgc.models import DGCModel\n\nclass MyModel(DGCModel):\n    def __init__(self, logger, cfg):\n        super(MyModel).__init__(logger, cfg)\n        your_model = ...  # Your model\n        \n        self.loss_curve = []\n        self.nmi_curve = []\n        self.best_embedding = None\n        self.best_predicted_labels = None\n        self.best_results = {'ACC': -1}\n    \n    def forward(self, data):\n        ...  # forward process\n        return something\n    # If needed\n    def loss(self, *args, **kwargs):\n    # If needed\n    def pretrain(self, data, cfg, flag):\n    \n    def train_model(self, data, cfg, flag):\n    \n    def get_embedding(self, data):\n    \n    def clustering(self, data):\n        embedding = self.get_embedding(data)\n        # clustering\n        return embedding, labels_, clustering_centers\n    \n    def evaluate(self, data):\n        embedding, predicted_labels, clustering_centers = self.clustering(data)\n        ground_truth = data.y.numpy()\n        metric = DGCMetric(ground_truth, predicted_labels.numpy(), embedding, data.edge_index)\n        results = metric.evaluate_one_epoch(self.logger, self.cfg.evaluate)\n        return embedding, predicted_labels, results\n\n```\n\n## Develop your own DGC pipeline\n\n```python\nfrom pydgc.pipelines import BasePipeline\nfrom pydgc.utils import perturb_data\nimport MyModel  # import your own model\n\nclass MyPipeline(BasePipeline):\n    def __init__(self, args):\n        super(MyPipeline).__init__(args)\n    \n    def augmentation(self):\n        self.data = perturb_data(self.data, self.cfg.dataset.augmentation)\n        # other augmentations if needed\n        \n    def build_model(self):\n        model = MyModel(self.logger, self.cfg)\n        self.logger.model_info(model)\n        return model\n```\n\n# Supported Models\n\n| No.  | Model     | Paper | Source Code |\n| :----: | :---------: | :-----: | :-----------: |\n| 1    | GAE       |[Variational Graph Auto-Encoders](https://arxiv.org/abs/1611.07308)|[code](https://github.com/tkipf/gae)|\n| 2    | GAE_SSC   | - | - |\n| 3    | DAEGC     |[Attributed graph clustering: A deep attentional embedding approach](https://arxiv.org/pdf/1906.06532)|[code](https://github.com/Tiger101010/DAEGC)|\n| 4    | SDCN      |[Structural Deep Clustering Network](https://arxiv.org/pdf/2002.01633)|[code](https://github.com/bdy9527/SDCN)|\n| 5    | DFCN      |[Deep Fusion Clustering Network](https://ojs.aaai.org/index.php/AAAI/article/view/17198/17005)|[code](https://github.com/WxTu/DFCN)|\n| 6    | DCRN      |[Deep Graph Clustering via Dual Correlation Reduction](https://aaai.org/papers/07603-deep-graph-clustering-via-dual-correlation-reduction/)|[code](https://github.com/yueliu1999/DCRN)|\n| 7    | AGC-DRR   |[Attributed Graph Clustering with Dual Redundancy Reduction](https://www.ijcai.org/proceedings/2022/0418.pdf)|[code](https://github.com/gongleii/AGC-DRR)|\n| 8    | DGCluster |[DGCLUSTER: A Neural Framework for Attributed Graph Clustering via Modularity Maximization](https://ojs.aaai.org/index.php/AAAI/article/view/28983)|[code](https://github.com/pyrobits/DGCluster)|\n| 9    | HSAN      |[Hard Sample Aware Network for Contrastive Deep Graph Clustering](https://arxiv.org/abs/2212.08665)|[code](https://github.com/yueliu1999/HSAN)|\n| 10   | CCGC      |[Cluster-guided Contrastive Graph Clustering Network](https://arxiv.org/abs/2301.01098)|[code](https://github.com/xihongyang1999/CCGC)|\n| 11   | MAGI      |[Revisiting Modularity Maximization for Graph Clustering: A Contrastive Learning Perspective](https://dl.acm.org/doi/abs/10.1145/3637528.3671967)|[code](https://github.com/EdisonLeeeee/MAGI)|\n| 12   | NS4GC     |[Reliable Node Similarity Matrix Guided Contrastive Graph Clustering](https://arxiv.org/pdf/2408.03765?)|[code](https://github.com/Cloudy1225/NS4GC)|\n\n# Supported Datasets\n\n| No.  | Dataset      | #Samples | #Features | #Edges | #Classes | Homo. Ratio |\n| :----: | :------------: | --------: | ---------: | ------: | --------: | -----------: |\n| 1    | Wiki         |2,405|4,973|17,981|17|0.71|\n| 2    | Cora         |2,708|1,433|5,429|7|0.81|\n| 3    | ACM          |3,025|1,870|13,128|3|0.82|\n| 4    | Citeseer     |3,327|3,703|9,104|6|0.74|\n| 5    | DBLP         |4,057|334|3,528|4|0.80|\n| 6    | PubMed       |19,717|500|88,648|3|0.80|\n| 7    | Ogbn-arXiv   |169,343|128|2,315,598|40|0.65|\n| 8    | USPS(3NN)|9,298|256|27,894|10|0.98|\n| 9    | HHAR(3NN)|10,299|561|30,897|6|0.95|\n| 10   | BlogCatalog  |5,196|8,189|343,486|6|0.40|\n| 11   | Flickr       |7,575|12,047|479,476|9|0.24|\n| 12   | Roman-empire |22,662|300|65,854|18|0.05|\n\n> The 12 datasets above are benchmark datasets introduced in our paper. More Datasets will be introduced.\n\n# Citation\n\n# Visualization\n<div align=\"center\">\n<img src=\"https://raw.githubusercontent.com/Marigoldwu/PyDGC/master/assets/Cora.png\" border=\"0\"/>\n</div>\n\n<div align=\"center\">\n<img src=\"https://raw.githubusercontent.com/Marigoldwu/PyDGC/master/assets/ACM.png\" border=\"0\"/>\n</div>\n\n# Related Repositories\n\nADGC: [Awesome-Deep-Graph-Clustering](https://github.com/yueliu1999/Awesome-Deep-Graph-Clustering)\n\nOlder version of this repository: [A-Unified-Framework-for-Attribute-Graph-Clustering](https://github.com/Marigoldwu/PyDGC/releases/tag/v0.0.1)\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "PyDGC: A Deep Graph Clustering Benchmark",
    "version": "1.0.2",
    "project_urls": {
        "Bug Tracker": "https://github.com/Marigoldwu/PyDGC/issues",
        "Homepage": "https://github.com/Marigoldwu/PyDGC"
    },
    "split_keywords": [
        "deep graph clustering",
        " deep clustering",
        " pytorch",
        " pyg"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "87ca0a33720fde3abb1951b3f8aff8fca101368d9a659c9e6ad1444c3b045645",
                "md5": "b06393458d1d981129d0bf7e4f181a45",
                "sha256": "80568d074165e4cd6112f0ff1f1e7c85695b22019bf241247409ceb50d43424c"
            },
            "downloads": -1,
            "filename": "pydgc-1.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "b06393458d1d981129d0bf7e4f181a45",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 94382,
            "upload_time": "2025-07-27T12:01:53",
            "upload_time_iso_8601": "2025-07-27T12:01:53.725768Z",
            "url": "https://files.pythonhosted.org/packages/87/ca/0a33720fde3abb1951b3f8aff8fca101368d9a659c9e6ad1444c3b045645/pydgc-1.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "80a6e15fa53bb93931fb9e1a2968686f1f06cf96886aaeb2bb1b631311fa4a66",
                "md5": "87c6c82fd30c685553c2fc1e7c9e0ddc",
                "sha256": "d9145d6d06313639eb04a42f6f0c4e6c4b08a99711cbf9da93675697380412dd"
            },
            "downloads": -1,
            "filename": "pydgc-1.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "87c6c82fd30c685553c2fc1e7c9e0ddc",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 65625,
            "upload_time": "2025-07-27T12:01:55",
            "upload_time_iso_8601": "2025-07-27T12:01:55.851922Z",
            "url": "https://files.pythonhosted.org/packages/80/a6/e15fa53bb93931fb9e1a2968686f1f06cf96886aaeb2bb1b631311fa4a66/pydgc-1.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-27 12:01:55",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Marigoldwu",
    "github_project": "PyDGC",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "matplotlib",
            "specs": [
                [
                    ">=",
                    "3.7.5"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    ">=",
                    "1.24.1"
                ]
            ]
        },
        {
            "name": "ogb",
            "specs": [
                [
                    ">=",
                    "1.3.6"
                ]
            ]
        },
        {
            "name": "PyYAML",
            "specs": [
                [
                    ">=",
                    "6.0.1"
                ]
            ]
        },
        {
            "name": "rich",
            "specs": [
                [
                    ">=",
                    "14.0.0"
                ]
            ]
        },
        {
            "name": "scikit_learn",
            "specs": [
                [
                    ">=",
                    "1.3.2"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": [
                [
                    ">=",
                    "1.9.1"
                ]
            ]
        },
        {
            "name": "seaborn",
            "specs": [
                [
                    ">=",
                    "0.13.2"
                ]
            ]
        },
        {
            "name": "setuptools",
            "specs": [
                [
                    ">=",
                    "68.2.2"
                ]
            ]
        },
        {
            "name": "torch",
            "specs": [
                [
                    ">=",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "torch_cluster",
            "specs": [
                [
                    ">=",
                    "1.6.2"
                ]
            ]
        },
        {
            "name": "torch_geometric",
            "specs": [
                [
                    ">=",
                    "2.5.1"
                ]
            ]
        },
        {
            "name": "torch_sparse",
            "specs": [
                [
                    ">=",
                    "0.6.18"
                ]
            ]
        },
        {
            "name": "torch_scatter",
            "specs": [
                [
                    ">=",
                    "2.1.2"
                ]
            ]
        },
        {
            "name": "umap_learn",
            "specs": [
                [
                    ">=",
                    "0.5.7"
                ]
            ]
        },
        {
            "name": "yacs",
            "specs": [
                [
                    ">=",
                    "0.1.8"
                ]
            ]
        }
    ],
    "lcname": "pydgc"
}
        
Elapsed time: 1.15826s