Full Code of pyg-team/pytorch_geometric for AI

master 2eadeee0495f cached
1487 files
6.8 MB
1.9M tokens
8209 symbols
1 requests
Download .txt
Showing preview only (7,429K chars total). Download the full file or copy to clipboard to get everything.
Repository: pyg-team/pytorch_geometric
Branch: master
Commit: 2eadeee0495f
Files: 1487
Total size: 6.8 MB

Directory structure:
gitextract_yj2ugid6/

├── .github/
│   ├── CODEOWNERS
│   ├── CONTRIBUTING.md
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug-report.yml
│   │   ├── config.yml
│   │   ├── documentation.yml
│   │   ├── feature-request.yml
│   │   ├── installation.yml
│   │   └── refactor.yml
│   ├── actions/
│   │   └── setup/
│   │       └── action.yml
│   ├── dependabot.yml
│   ├── labeler.yml
│   └── workflows/
│       ├── _testing.yml
│       ├── auto-merge.yml
│       ├── building_nightly.yml
│       ├── changelog.yml
│       ├── documentation.yml
│       ├── examples.yml
│       ├── labeler.yml
│       ├── linting.yml
│       ├── testing.yml
│       └── testing_rag.yml
├── .gitignore
├── .pre-commit-config.yaml
├── CHANGELOG.md
├── CITATION.cff
├── LICENSE
├── README.md
├── benchmark/
│   ├── README.md
│   ├── citation/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── appnp.py
│   │   ├── arma.py
│   │   ├── cheb.py
│   │   ├── datasets.py
│   │   ├── gat.py
│   │   ├── gcn.py
│   │   ├── inference.sh
│   │   ├── run.sh
│   │   ├── sgc.py
│   │   ├── statistics.py
│   │   └── train_eval.py
│   ├── inference/
│   │   ├── README.md
│   │   └── inference_benchmark.py
│   ├── kernel/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── asap.py
│   │   ├── datasets.py
│   │   ├── diff_pool.py
│   │   ├── edge_pool.py
│   │   ├── gcn.py
│   │   ├── gin.py
│   │   ├── global_attention.py
│   │   ├── graclus.py
│   │   ├── graph_sage.py
│   │   ├── main.py
│   │   ├── main_performance.py
│   │   ├── sag_pool.py
│   │   ├── set2set.py
│   │   ├── sort_pool.py
│   │   ├── statistics.py
│   │   ├── top_k.py
│   │   └── train_eval.py
│   ├── loader/
│   │   └── neighbor_loader.py
│   ├── multi_gpu/
│   │   └── training/
│   │       ├── README.md
│   │       ├── common.py
│   │       ├── training_benchmark_cuda.py
│   │       └── training_benchmark_xpu.py
│   ├── points/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── datasets.py
│   │   ├── edge_cnn.py
│   │   ├── mpnn.py
│   │   ├── point_cnn.py
│   │   ├── point_net.py
│   │   ├── spline_cnn.py
│   │   ├── statistics.py
│   │   └── train_eval.py
│   ├── runtime/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── dgl/
│   │   │   ├── gat.py
│   │   │   ├── gcn.py
│   │   │   ├── hidden.py
│   │   │   ├── main.py
│   │   │   ├── rgcn.py
│   │   │   └── train.py
│   │   ├── gat.py
│   │   ├── gcn.py
│   │   ├── main.py
│   │   ├── rgcn.py
│   │   └── train.py
│   ├── setup.py
│   ├── training/
│   │   ├── README.md
│   │   └── training_benchmark.py
│   └── utils/
│       ├── __init__.py
│       ├── hetero_gat.py
│       ├── hetero_sage.py
│       └── utils.py
├── codecov.yml
├── docker/
│   ├── Dockerfile
│   ├── Dockerfile.xpu
│   ├── README.md
│   └── singularity
├── docs/
│   ├── Makefile
│   ├── README.md
│   ├── requirements.txt
│   └── source/
│       ├── .gitignore
│       ├── _figures/
│       │   ├── .gitignore
│       │   ├── build.sh
│       │   ├── graph.tex
│       │   ├── hg_example.tex
│       │   ├── to_hetero.tex
│       │   └── to_hetero_with_bases.tex
│       ├── _static/
│       │   └── js/
│       │       └── version_alert.js
│       ├── _templates/
│       │   └── autosummary/
│       │       ├── class.rst
│       │       ├── inherited_class.rst
│       │       ├── metrics.rst
│       │       ├── nn.rst
│       │       └── only_class.rst
│       ├── advanced/
│       │   ├── batching.rst
│       │   ├── compile.rst
│       │   ├── cpu_affinity.rst
│       │   ├── graphgym.rst
│       │   ├── hgam.rst
│       │   ├── jit.rst
│       │   ├── remote.rst
│       │   └── sparse_tensor.rst
│       ├── cheatsheet/
│       │   ├── data_cheatsheet.rst
│       │   └── gnn_cheatsheet.rst
│       ├── conf.py
│       ├── external/
│       │   └── resources.rst
│       ├── get_started/
│       │   ├── colabs.rst
│       │   └── introduction.rst
│       ├── index.rst
│       ├── install/
│       │   ├── installation.rst
│       │   └── quick-start.html
│       ├── modules/
│       │   ├── contrib.rst
│       │   ├── data.rst
│       │   ├── datasets.rst
│       │   ├── distributed.rst
│       │   ├── explain.rst
│       │   ├── graphgym.rst
│       │   ├── llm.rst
│       │   ├── loader.rst
│       │   ├── metrics.rst
│       │   ├── nn.rst
│       │   ├── profile.rst
│       │   ├── root.rst
│       │   ├── sampler.rst
│       │   ├── transforms.rst
│       │   └── utils.rst
│       ├── notes/
│       │   ├── batching.rst
│       │   ├── cheatsheet.rst
│       │   ├── colabs.rst
│       │   ├── create_dataset.rst
│       │   ├── create_gnn.rst
│       │   ├── data_cheatsheet.rst
│       │   ├── explain.rst
│       │   ├── graphgym.rst
│       │   ├── heterogeneous.rst
│       │   ├── installation.rst
│       │   ├── introduction.rst
│       │   ├── jit.rst
│       │   ├── load_csv.rst
│       │   ├── remote.rst
│       │   ├── resources.rst
│       │   └── sparse_tensor.rst
│       └── tutorial/
│           ├── application.rst
│           ├── compile.rst
│           ├── create_dataset.rst
│           ├── create_gnn.rst
│           ├── dataset.rst
│           ├── dataset_splitting.rst
│           ├── distributed.rst
│           ├── distributed_pyg.rst
│           ├── explain.rst
│           ├── gnn_design.rst
│           ├── graph_transformer.rst
│           ├── heterogeneous.rst
│           ├── load_csv.rst
│           ├── multi_gpu_vanilla.rst
│           ├── multi_node_multi_gpu_vanilla.rst
│           ├── neighbor_loader.rst
│           ├── point_cloud.rst
│           └── shallow_node_embeddings.rst
├── examples/
│   ├── README.md
│   ├── agnn.py
│   ├── ar_link_pred.py
│   ├── argva_node_clustering.py
│   ├── arma.py
│   ├── attentive_fp.py
│   ├── autoencoder.py
│   ├── cluster_gcn_ppi.py
│   ├── cluster_gcn_reddit.py
│   ├── colors_topk_pool.py
│   ├── compile/
│   │   ├── gcn.py
│   │   └── gin.py
│   ├── contrib/
│   │   ├── README.md
│   │   ├── pgm_explainer_graph_classification.py
│   │   ├── pgm_explainer_node_classification.py
│   │   ├── rbcd_attack.py
│   │   └── rbcd_attack_poisoning.py
│   ├── cora.py
│   ├── correct_and_smooth.py
│   ├── cpp/
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── main.cpp
│   │   └── save_model.py
│   ├── datapipe.py
│   ├── dgcnn_classification.py
│   ├── dgcnn_segmentation.py
│   ├── dir_gnn.py
│   ├── distributed/
│   │   ├── README.md
│   │   ├── graphlearn_for_pytorch/
│   │   │   ├── README.md
│   │   │   ├── dist_train_sage_sup_config.yml
│   │   │   ├── dist_train_sage_supervised.py
│   │   │   ├── launch.py
│   │   │   └── partition_ogbn_dataset.py
│   │   ├── kuzu/
│   │   │   ├── README.md
│   │   │   └── papers_100M/
│   │   │       ├── README.md
│   │   │       ├── prepare_data.py
│   │   │       └── train.py
│   │   └── pyg/
│   │       └── README.md
│   ├── dna.py
│   ├── egc.py
│   ├── equilibrium_median.py
│   ├── explain/
│   │   ├── README.md
│   │   ├── captum_explainer.py
│   │   ├── captum_explainer_hetero_link.py
│   │   ├── gnn_explainer.py
│   │   ├── gnn_explainer_ba_shapes.py
│   │   ├── gnn_explainer_link_pred.py
│   │   └── graphmask_explainer.py
│   ├── faust.py
│   ├── film.py
│   ├── gat.py
│   ├── gcn.py
│   ├── gcn2_cora.py
│   ├── gcn2_ppi.py
│   ├── geniepath.py
│   ├── glnn.py
│   ├── gpse.py
│   ├── graph_gps.py
│   ├── graph_sage_unsup.py
│   ├── graph_sage_unsup_ppi.py
│   ├── graph_saint.py
│   ├── graph_unet.py
│   ├── hetero/
│   │   ├── README.md
│   │   ├── bipartite_sage.py
│   │   ├── bipartite_sage_unsup.py
│   │   ├── dmgi_unsup.py
│   │   ├── han_imdb.py
│   │   ├── hetero_conv_dblp.py
│   │   ├── hetero_link_pred.py
│   │   ├── hgt_dblp.py
│   │   ├── hierarchical_sage.py
│   │   ├── load_csv.py
│   │   ├── metapath2vec.py
│   │   ├── recommender_system.py
│   │   ├── temporal_link_pred.py
│   │   └── to_hetero_mag.py
│   ├── hierarchical_sampling.py
│   ├── infomax_inductive.py
│   ├── infomax_transductive.py
│   ├── jit/
│   │   ├── README.md
│   │   ├── film.py
│   │   ├── gat.py
│   │   ├── gcn.py
│   │   └── gin.py
│   ├── kge_fb15k_237.py
│   ├── label_prop.py
│   ├── lcm_aggr_2nd_min.py
│   ├── lightgcn.py
│   ├── link_pred.py
│   ├── linkx.py
│   ├── llm/
│   │   ├── README.md
│   │   ├── g_retriever.py
│   │   ├── git_mol.py
│   │   ├── glem.py
│   │   ├── molecule_gpt.py
│   │   ├── protein_mpnn.py
│   │   └── txt2kg_rag.py
│   ├── lpformer.py
│   ├── mem_pool.py
│   ├── mixhop.py
│   ├── mnist_graclus.py
│   ├── mnist_nn_conv.py
│   ├── mnist_voxel_grid.py
│   ├── multi_gpu/
│   │   ├── README.md
│   │   ├── distributed_batching.py
│   │   ├── distributed_sampling.py
│   │   ├── distributed_sampling_multinode.py
│   │   ├── distributed_sampling_multinode.sbatch
│   │   ├── distributed_sampling_xpu.py
│   │   ├── mag240m_graphsage.py
│   │   ├── model_parallel.py
│   │   ├── papers100m_gcn.py
│   │   ├── papers100m_gcn_multinode.py
│   │   ├── pcqm4m_ogb.py
│   │   └── taobao.py
│   ├── mutag_gin.py
│   ├── node2vec.py
│   ├── ogbn_proteins_deepgcn.py
│   ├── ogbn_train.py
│   ├── ogc.py
│   ├── pmlp.py
│   ├── pna.py
│   ├── point_transformer_classification.py
│   ├── point_transformer_segmentation.py
│   ├── pointnet2_classification.py
│   ├── pointnet2_segmentation.py
│   ├── ppi.py
│   ├── proteins_diff_pool.py
│   ├── proteins_dmon_pool.py
│   ├── proteins_gmt.py
│   ├── proteins_mincut_pool.py
│   ├── proteins_topk_pool.py
│   ├── pytorch_ignite/
│   │   ├── README.md
│   │   └── gin.py
│   ├── pytorch_lightning/
│   │   ├── README.md
│   │   ├── gin.py
│   │   ├── graph_sage.py
│   │   └── relational_gnn.py
│   ├── qm9_nn_conv.py
│   ├── qm9_pretrained_dimenet.py
│   ├── qm9_pretrained_schnet.py
│   ├── quiver/
│   │   ├── README.md
│   │   ├── multi_gpu_quiver.py
│   │   └── single_gpu_quiver.py
│   ├── randlanet_classification.py
│   ├── randlanet_segmentation.py
│   ├── rdl.py
│   ├── rect.py
│   ├── reddit.py
│   ├── renet.py
│   ├── rev_gnn.py
│   ├── rgat.py
│   ├── rgcn.py
│   ├── rgcn_link_pred.py
│   ├── seal_link_pred.py
│   ├── sgc.py
│   ├── shadow.py
│   ├── sign.py
│   ├── signed_gcn.py
│   ├── super_gat.py
│   ├── tagcn.py
│   ├── tensorboard_logging.py
│   ├── tgn.py
│   ├── triangles_sag_pool.py
│   ├── unimp_arxiv.py
│   ├── upfd.py
│   └── wl_kernel.py
├── graphgym/
│   ├── agg_batch.py
│   ├── configs/
│   │   ├── example.yaml
│   │   └── pyg/
│   │       ├── example_graph.yaml
│   │       ├── example_link.yaml
│   │       └── example_node.yaml
│   ├── configs_gen.py
│   ├── custom_graphgym/
│   │   ├── __init__.py
│   │   ├── act/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── config/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── encoder/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── head/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── layer/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── loader/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── loss/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── network/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── optimizer/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── pooling/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── stage/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── train/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   └── transform/
│   │       └── __init__.py
│   ├── grids/
│   │   ├── example.txt
│   │   └── pyg/
│   │       └── example.txt
│   ├── main.py
│   ├── parallel.sh
│   ├── run_batch.sh
│   ├── run_single.sh
│   └── sample/
│       ├── dimensions.txt
│       └── dimensionsatt.txt
├── pyproject.toml
├── readthedocs.yml
├── test/
│   ├── conftest.py
│   ├── contrib/
│   │   ├── explain/
│   │   │   └── test_pgm_explainer.py
│   │   └── nn/
│   │       └── models/
│   │           └── test_rbcd_attack.py
│   ├── data/
│   │   ├── lightning/
│   │   │   └── test_datamodule.py
│   │   ├── test_batch.py
│   │   ├── test_data.py
│   │   ├── test_database.py
│   │   ├── test_datapipes.py
│   │   ├── test_dataset.py
│   │   ├── test_dataset_summary.py
│   │   ├── test_feature_store.py
│   │   ├── test_graph_store.py
│   │   ├── test_hetero_data.py
│   │   ├── test_hypergraph_data.py
│   │   ├── test_inherit.py
│   │   ├── test_on_disk_dataset.py
│   │   ├── test_remote_backend_utils.py
│   │   ├── test_storage.py
│   │   ├── test_temporal.py
│   │   └── test_view.py
│   ├── datasets/
│   │   ├── graph_generator/
│   │   │   ├── test_ba_graph.py
│   │   │   ├── test_er_graph.py
│   │   │   ├── test_grid_graph.py
│   │   │   └── test_tree_graph.py
│   │   ├── motif_generator/
│   │   │   ├── test_custom_motif.py
│   │   │   ├── test_cycle_motif.py
│   │   │   ├── test_grid_motif.py
│   │   │   └── test_house_motif.py
│   │   ├── test_ba_shapes.py
│   │   ├── test_bzr.py
│   │   ├── test_elliptic.py
│   │   ├── test_enzymes.py
│   │   ├── test_explainer_dataset.py
│   │   ├── test_fake.py
│   │   ├── test_git_mol_dataset.py
│   │   ├── test_imdb_binary.py
│   │   ├── test_infection_dataset.py
│   │   ├── test_karate.py
│   │   ├── test_medshapenet.py
│   │   ├── test_molecule_gpt_dataset.py
│   │   ├── test_mutag.py
│   │   ├── test_planetoid.py
│   │   ├── test_protein_mpnn_dataset.py
│   │   ├── test_snap_dataset.py
│   │   ├── test_suite_sparse.py
│   │   ├── test_tag_dataset.py
│   │   ├── test_teeth3ds.py
│   │   └── test_web_qsp_dataset.py
│   ├── distributed/
│   │   ├── test_dist_link_neighbor_loader.py
│   │   ├── test_dist_link_neighbor_sampler.py
│   │   ├── test_dist_neighbor_loader.py
│   │   ├── test_dist_neighbor_sampler.py
│   │   ├── test_dist_utils.py
│   │   ├── test_local_feature_store.py
│   │   ├── test_local_graph_store.py
│   │   ├── test_partition.py
│   │   └── test_rpc.py
│   ├── explain/
│   │   ├── algorithm/
│   │   │   ├── test_attention_explainer.py
│   │   │   ├── test_captum.py
│   │   │   ├── test_captum_explainer.py
│   │   │   ├── test_captum_hetero.py
│   │   │   ├── test_explain_algorithm_utils.py
│   │   │   ├── test_gnn_explainer.py
│   │   │   ├── test_graphmask_explainer.py
│   │   │   └── test_pg_explainer.py
│   │   ├── conftest.py
│   │   ├── metric/
│   │   │   ├── test_basic_metric.py
│   │   │   ├── test_faithfulness.py
│   │   │   └── test_fidelity.py
│   │   ├── test_explain_config.py
│   │   ├── test_explainer.py
│   │   ├── test_explanation.py
│   │   ├── test_hetero_explainer.py
│   │   └── test_hetero_explanation.py
│   ├── graphgym/
│   │   ├── example_node.yml
│   │   ├── test_config.py
│   │   ├── test_graphgym.py
│   │   ├── test_logger.py
│   │   └── test_register.py
│   ├── io/
│   │   ├── example1.off
│   │   ├── example2.off
│   │   ├── test_fs.py
│   │   └── test_off.py
│   ├── llm/
│   │   ├── conftest.py
│   │   ├── models/
│   │   │   ├── test_g_retriever.py
│   │   │   ├── test_git_mol.py
│   │   │   ├── test_glem.py
│   │   │   ├── test_llm.py
│   │   │   ├── test_llm_judge.py
│   │   │   ├── test_molecule_gpt.py
│   │   │   ├── test_protein_mpnn.py
│   │   │   ├── test_sentence_transformer.py
│   │   │   ├── test_txt2kg.py
│   │   │   └── test_vision_transformer.py
│   │   ├── test_large_graph_indexer.py
│   │   ├── test_rag_loader.py
│   │   └── utils/
│   │       ├── test_rag_backend_utils.py
│   │       ├── test_rag_feature_store.py
│   │       ├── test_rag_graph_store.py
│   │       └── test_vectorrag.py
│   ├── loader/
│   │   ├── test_cache.py
│   │   ├── test_cluster.py
│   │   ├── test_dataloader.py
│   │   ├── test_dynamic_batch_sampler.py
│   │   ├── test_graph_saint.py
│   │   ├── test_hgt_loader.py
│   │   ├── test_ibmb_loader.py
│   │   ├── test_imbalanced_sampler.py
│   │   ├── test_link_neighbor_loader.py
│   │   ├── test_mixin.py
│   │   ├── test_neighbor_loader.py
│   │   ├── test_neighbor_sampler.py
│   │   ├── test_prefetch.py
│   │   ├── test_random_node_loader.py
│   │   ├── test_shadow.py
│   │   ├── test_temporal_dataloader.py
│   │   ├── test_utils.py
│   │   └── test_zip_loader.py
│   ├── metrics/
│   │   └── test_link_pred_metric.py
│   ├── my_config.yaml
│   ├── nn/
│   │   ├── aggr/
│   │   │   ├── test_aggr_utils.py
│   │   │   ├── test_attention.py
│   │   │   ├── test_basic.py
│   │   │   ├── test_deep_sets.py
│   │   │   ├── test_equilibrium.py
│   │   │   ├── test_fused.py
│   │   │   ├── test_gmt.py
│   │   │   ├── test_gru.py
│   │   │   ├── test_lcm.py
│   │   │   ├── test_lstm.py
│   │   │   ├── test_mlp_aggr.py
│   │   │   ├── test_multi.py
│   │   │   ├── test_patch_transformer.py
│   │   │   ├── test_quantile.py
│   │   │   ├── test_scaler.py
│   │   │   ├── test_set2set.py
│   │   │   ├── test_set_transformer.py
│   │   │   ├── test_sort.py
│   │   │   └── test_variance_preserving.py
│   │   ├── attention/
│   │   │   ├── test_performer_attention.py
│   │   │   ├── test_polynormer_attention.py
│   │   │   └── test_qformer.py
│   │   ├── conv/
│   │   │   ├── cugraph/
│   │   │   │   ├── test_cugraph_gat_conv.py
│   │   │   │   ├── test_cugraph_rgcn_conv.py
│   │   │   │   └── test_cugraph_sage_conv.py
│   │   │   ├── test_agnn_conv.py
│   │   │   ├── test_antisymmetric_conv.py
│   │   │   ├── test_appnp.py
│   │   │   ├── test_arma_conv.py
│   │   │   ├── test_cg_conv.py
│   │   │   ├── test_cheb_conv.py
│   │   │   ├── test_cluster_gcn_conv.py
│   │   │   ├── test_create_gnn.py
│   │   │   ├── test_dir_gnn_conv.py
│   │   │   ├── test_dna_conv.py
│   │   │   ├── test_edge_conv.py
│   │   │   ├── test_eg_conv.py
│   │   │   ├── test_fa_conv.py
│   │   │   ├── test_feast_conv.py
│   │   │   ├── test_film_conv.py
│   │   │   ├── test_fused_gat_conv.py
│   │   │   ├── test_gat_conv.py
│   │   │   ├── test_gated_graph_conv.py
│   │   │   ├── test_gatv2_conv.py
│   │   │   ├── test_gcn2_conv.py
│   │   │   ├── test_gcn_conv.py
│   │   │   ├── test_gen_conv.py
│   │   │   ├── test_general_conv.py
│   │   │   ├── test_gin_conv.py
│   │   │   ├── test_gmm_conv.py
│   │   │   ├── test_gps_conv.py
│   │   │   ├── test_graph_conv.py
│   │   │   ├── test_gravnet_conv.py
│   │   │   ├── test_han_conv.py
│   │   │   ├── test_heat_conv.py
│   │   │   ├── test_hetero_conv.py
│   │   │   ├── test_hgt_conv.py
│   │   │   ├── test_hypergraph_conv.py
│   │   │   ├── test_le_conv.py
│   │   │   ├── test_lg_conv.py
│   │   │   ├── test_meshcnn_conv.py
│   │   │   ├── test_message_passing.py
│   │   │   ├── test_mf_conv.py
│   │   │   ├── test_mixhop_conv.py
│   │   │   ├── test_nn_conv.py
│   │   │   ├── test_pan_conv.py
│   │   │   ├── test_pdn_conv.py
│   │   │   ├── test_pna_conv.py
│   │   │   ├── test_point_conv.py
│   │   │   ├── test_point_gnn_conv.py
│   │   │   ├── test_point_transformer_conv.py
│   │   │   ├── test_ppf_conv.py
│   │   │   ├── test_res_gated_graph_conv.py
│   │   │   ├── test_rgat_conv.py
│   │   │   ├── test_rgcn_conv.py
│   │   │   ├── test_sage_conv.py
│   │   │   ├── test_sg_conv.py
│   │   │   ├── test_signed_conv.py
│   │   │   ├── test_simple_conv.py
│   │   │   ├── test_spline_conv.py
│   │   │   ├── test_ssg_conv.py
│   │   │   ├── test_static_graph.py
│   │   │   ├── test_supergat_conv.py
│   │   │   ├── test_tag_conv.py
│   │   │   ├── test_transformer_conv.py
│   │   │   ├── test_wl_conv.py
│   │   │   ├── test_wl_conv_continuous.py
│   │   │   ├── test_x_conv.py
│   │   │   └── utils/
│   │   │       └── test_gnn_cheatsheet.py
│   │   ├── dense/
│   │   │   ├── test_dense_gat_conv.py
│   │   │   ├── test_dense_gcn_conv.py
│   │   │   ├── test_dense_gin_conv.py
│   │   │   ├── test_dense_graph_conv.py
│   │   │   ├── test_dense_sage_conv.py
│   │   │   ├── test_diff_pool.py
│   │   │   ├── test_dmon_pool.py
│   │   │   ├── test_linear.py
│   │   │   └── test_mincut_pool.py
│   │   ├── functional/
│   │   │   ├── test_bro.py
│   │   │   └── test_gini.py
│   │   ├── kge/
│   │   │   ├── test_complex.py
│   │   │   ├── test_distmult.py
│   │   │   ├── test_rotate.py
│   │   │   └── test_transe.py
│   │   ├── models/
│   │   │   ├── test_attentive_fp.py
│   │   │   ├── test_attract_repel.py
│   │   │   ├── test_autoencoder.py
│   │   │   ├── test_basic_gnn.py
│   │   │   ├── test_correct_and_smooth.py
│   │   │   ├── test_deep_graph_infomax.py
│   │   │   ├── test_deepgcn.py
│   │   │   ├── test_dimenet.py
│   │   │   ├── test_gnnff.py
│   │   │   ├── test_gpse.py
│   │   │   ├── test_graph_mixer.py
│   │   │   ├── test_graph_unet.py
│   │   │   ├── test_jumping_knowledge.py
│   │   │   ├── test_label_prop.py
│   │   │   ├── test_lightgcn.py
│   │   │   ├── test_linkx.py
│   │   │   ├── test_lpformer.py
│   │   │   ├── test_mask_label.py
│   │   │   ├── test_meta.py
│   │   │   ├── test_metapath2vec.py
│   │   │   ├── test_mlp.py
│   │   │   ├── test_neural_fingerprint.py
│   │   │   ├── test_node2vec.py
│   │   │   ├── test_pmlp.py
│   │   │   ├── test_polynormer.py
│   │   │   ├── test_re_net.py
│   │   │   ├── test_rect.py
│   │   │   ├── test_rev_gnn.py
│   │   │   ├── test_schnet.py
│   │   │   ├── test_sgformer.py
│   │   │   ├── test_signed_gcn.py
│   │   │   ├── test_tgn.py
│   │   │   └── test_visnet.py
│   │   ├── norm/
│   │   │   ├── test_batch_norm.py
│   │   │   ├── test_diff_group_norm.py
│   │   │   ├── test_graph_norm.py
│   │   │   ├── test_graph_size_norm.py
│   │   │   ├── test_instance_norm.py
│   │   │   ├── test_layer_norm.py
│   │   │   ├── test_mean_subtraction_norm.py
│   │   │   ├── test_msg_norm.py
│   │   │   └── test_pair_norm.py
│   │   ├── pool/
│   │   │   ├── connect/
│   │   │   │   └── test_filter_edges.py
│   │   │   ├── select/
│   │   │   │   └── test_select_topk.py
│   │   │   ├── test_approx_knn.py
│   │   │   ├── test_asap.py
│   │   │   ├── test_avg_pool.py
│   │   │   ├── test_cluster_pool.py
│   │   │   ├── test_consecutive.py
│   │   │   ├── test_decimation.py
│   │   │   ├── test_edge_pool.py
│   │   │   ├── test_glob.py
│   │   │   ├── test_graclus.py
│   │   │   ├── test_knn.py
│   │   │   ├── test_max_pool.py
│   │   │   ├── test_mem_pool.py
│   │   │   ├── test_pan_pool.py
│   │   │   ├── test_pool.py
│   │   │   ├── test_sag_pool.py
│   │   │   ├── test_topk_pool.py
│   │   │   └── test_voxel_grid.py
│   │   ├── test_compile_basic.py
│   │   ├── test_compile_conv.py
│   │   ├── test_compile_dynamic.py
│   │   ├── test_data_parallel.py
│   │   ├── test_encoding.py
│   │   ├── test_fvcore.py
│   │   ├── test_fx.py
│   │   ├── test_inits.py
│   │   ├── test_model_hub.py
│   │   ├── test_model_summary.py
│   │   ├── test_module_dict.py
│   │   ├── test_parameter_dict.py
│   │   ├── test_reshape.py
│   │   ├── test_resolver.py
│   │   ├── test_sequential.py
│   │   ├── test_to_fixed_size_transformer.py
│   │   ├── test_to_hetero_module.py
│   │   ├── test_to_hetero_transformer.py
│   │   ├── test_to_hetero_with_bases_transformer.py
│   │   └── unpool/
│   │       └── test_knn_interpolate.py
│   ├── profile/
│   │   ├── test_benchmark.py
│   │   ├── test_nvtx.py
│   │   ├── test_profile.py
│   │   ├── test_profile_utils.py
│   │   └── test_profiler.py
│   ├── sampler/
│   │   ├── test_sampler_base.py
│   │   └── test_sampler_neighbor_sampler.py
│   ├── test_config_mixin.py
│   ├── test_config_store.py
│   ├── test_debug.py
│   ├── test_edge_index.py
│   ├── test_experimental.py
│   ├── test_hash_tensor.py
│   ├── test_home.py
│   ├── test_index.py
│   ├── test_inspector.py
│   ├── test_isinstance.py
│   ├── test_onnx.py
│   ├── test_seed.py
│   ├── test_typing.py
│   ├── test_warnings.py
│   ├── testing/
│   │   └── test_decorators.py
│   ├── transforms/
│   │   ├── test_add_gpse.py
│   │   ├── test_add_metapaths.py
│   │   ├── test_add_positional_encoding.py
│   │   ├── test_add_remaining_self_loops.py
│   │   ├── test_add_self_loops.py
│   │   ├── test_cartesian.py
│   │   ├── test_center.py
│   │   ├── test_compose.py
│   │   ├── test_constant.py
│   │   ├── test_delaunay.py
│   │   ├── test_distance.py
│   │   ├── test_face_to_edge.py
│   │   ├── test_feature_propagation.py
│   │   ├── test_fixed_points.py
│   │   ├── test_gcn_norm.py
│   │   ├── test_gdc.py
│   │   ├── test_generate_mesh_normals.py
│   │   ├── test_grid_sampling.py
│   │   ├── test_half_hop.py
│   │   ├── test_knn_graph.py
│   │   ├── test_laplacian_lambda_max.py
│   │   ├── test_largest_connected_components.py
│   │   ├── test_line_graph.py
│   │   ├── test_linear_transformation.py
│   │   ├── test_local_cartesian.py
│   │   ├── test_local_degree_profile.py
│   │   ├── test_mask_transform.py
│   │   ├── test_node_property_split.py
│   │   ├── test_normalize_features.py
│   │   ├── test_normalize_rotation.py
│   │   ├── test_normalize_scale.py
│   │   ├── test_one_hot_degree.py
│   │   ├── test_pad.py
│   │   ├── test_point_pair_features.py
│   │   ├── test_polar.py
│   │   ├── test_radius_graph.py
│   │   ├── test_random_flip.py
│   │   ├── test_random_jitter.py
│   │   ├── test_random_link_split.py
│   │   ├── test_random_node_split.py
│   │   ├── test_random_rotate.py
│   │   ├── test_random_scale.py
│   │   ├── test_random_shear.py
│   │   ├── test_remove_duplicated_edges.py
│   │   ├── test_remove_isolated_nodes.py
│   │   ├── test_remove_self_loops.py
│   │   ├── test_remove_training_classes.py
│   │   ├── test_rooted_subgraph.py
│   │   ├── test_sample_points.py
│   │   ├── test_sign.py
│   │   ├── test_spherical.py
│   │   ├── test_svd_feature_reduction.py
│   │   ├── test_target_indegree.py
│   │   ├── test_to_dense.py
│   │   ├── test_to_device.py
│   │   ├── test_to_sparse_tensor.py
│   │   ├── test_to_superpixels.py
│   │   ├── test_to_undirected.py
│   │   ├── test_two_hop.py
│   │   └── test_virtual_node.py
│   ├── utils/
│   │   ├── conftest.py
│   │   ├── test_assortativity.py
│   │   ├── test_augmentation.py
│   │   ├── test_coalesce.py
│   │   ├── test_convert.py
│   │   ├── test_cross_entropy.py
│   │   ├── test_degree.py
│   │   ├── test_dropout.py
│   │   ├── test_embedding.py
│   │   ├── test_functions.py
│   │   ├── test_geodesic.py
│   │   ├── test_grid.py
│   │   ├── test_hetero.py
│   │   ├── test_homophily.py
│   │   ├── test_index_sort.py
│   │   ├── test_isolated.py
│   │   ├── test_laplacian.py
│   │   ├── test_lexsort.py
│   │   ├── test_loop.py
│   │   ├── test_map.py
│   │   ├── test_mask.py
│   │   ├── test_mesh_laplacian.py
│   │   ├── test_negative_sampling.py
│   │   ├── test_nested.py
│   │   ├── test_noise_scheduler.py
│   │   ├── test_normalize_edge_index.py
│   │   ├── test_normalized_cut.py
│   │   ├── test_num_nodes.py
│   │   ├── test_one_hot.py
│   │   ├── test_ppr.py
│   │   ├── test_random.py
│   │   ├── test_repeat.py
│   │   ├── test_scatter.py
│   │   ├── test_segment.py
│   │   ├── test_select.py
│   │   ├── test_smiles.py
│   │   ├── test_softmax.py
│   │   ├── test_sort_edge_index.py
│   │   ├── test_sparse.py
│   │   ├── test_spmm.py
│   │   ├── test_subgraph.py
│   │   ├── test_to_dense_adj.py
│   │   ├── test_to_dense_batch.py
│   │   ├── test_total_influence.py
│   │   ├── test_train_test_split_edges.py
│   │   ├── test_tree_decomposition.py
│   │   ├── test_trim_to_layer.py
│   │   ├── test_unbatch.py
│   │   └── test_undirected.py
│   └── visualization/
│       ├── test_graph_visualization.py
│       └── test_influence.py
└── torch_geometric/
    ├── __init__.py
    ├── _compile.py
    ├── _onnx.py
    ├── backend.py
    ├── config_mixin.py
    ├── config_store.py
    ├── contrib/
    │   ├── __init__.py
    │   ├── datasets/
    │   │   └── __init__.py
    │   ├── explain/
    │   │   ├── __init__.py
    │   │   └── pgm_explainer.py
    │   ├── nn/
    │   │   ├── __init__.py
    │   │   ├── conv/
    │   │   │   └── __init__.py
    │   │   └── models/
    │   │       ├── __init__.py
    │   │       └── rbcd_attack.py
    │   └── transforms/
    │       └── __init__.py
    ├── data/
    │   ├── __init__.py
    │   ├── batch.py
    │   ├── collate.py
    │   ├── data.py
    │   ├── database.py
    │   ├── datapipes.py
    │   ├── dataset.py
    │   ├── download.py
    │   ├── extract.py
    │   ├── feature_store.py
    │   ├── graph_store.py
    │   ├── hetero_data.py
    │   ├── hypergraph_data.py
    │   ├── in_memory_dataset.py
    │   ├── lightning/
    │   │   ├── __init__.py
    │   │   └── datamodule.py
    │   ├── makedirs.py
    │   ├── on_disk_dataset.py
    │   ├── remote_backend_utils.py
    │   ├── separate.py
    │   ├── storage.py
    │   ├── summary.py
    │   ├── temporal.py
    │   └── view.py
    ├── datasets/
    │   ├── __init__.py
    │   ├── actor.py
    │   ├── airfrans.py
    │   ├── airports.py
    │   ├── amazon.py
    │   ├── amazon_book.py
    │   ├── amazon_products.py
    │   ├── aminer.py
    │   ├── aqsol.py
    │   ├── attributed_graph_dataset.py
    │   ├── ba2motif_dataset.py
    │   ├── ba_multi_shapes.py
    │   ├── ba_shapes.py
    │   ├── bitcoin_otc.py
    │   ├── brca_tgca.py
    │   ├── citation_full.py
    │   ├── city.py
    │   ├── coauthor.py
    │   ├── coma.py
    │   ├── cornell.py
    │   ├── dblp.py
    │   ├── dbp15k.py
    │   ├── deezer_europe.py
    │   ├── dgraph.py
    │   ├── dynamic_faust.py
    │   ├── elliptic.py
    │   ├── elliptic_temporal.py
    │   ├── email_eu_core.py
    │   ├── entities.py
    │   ├── explainer_dataset.py
    │   ├── facebook.py
    │   ├── fake.py
    │   ├── faust.py
    │   ├── flickr.py
    │   ├── freebase.py
    │   ├── gdelt.py
    │   ├── gdelt_lite.py
    │   ├── ged_dataset.py
    │   ├── gemsec.py
    │   ├── geometry.py
    │   ├── git_mol_dataset.py
    │   ├── github.py
    │   ├── gnn_benchmark_dataset.py
    │   ├── graph_generator/
    │   │   ├── __init__.py
    │   │   ├── ba_graph.py
    │   │   ├── base.py
    │   │   ├── er_graph.py
    │   │   ├── grid_graph.py
    │   │   └── tree_graph.py
    │   ├── heterophilous_graph_dataset.py
    │   ├── hgb_dataset.py
    │   ├── hm.py
    │   ├── hydro_net.py
    │   ├── icews.py
    │   ├── igmc_dataset.py
    │   ├── imdb.py
    │   ├── infection_dataset.py
    │   ├── instruct_mol_dataset.py
    │   ├── jodie.py
    │   ├── karate.py
    │   ├── last_fm.py
    │   ├── lastfm_asia.py
    │   ├── linkx_dataset.py
    │   ├── lrgb.py
    │   ├── malnet_tiny.py
    │   ├── md17.py
    │   ├── medshapenet.py
    │   ├── mixhop_synthetic_dataset.py
    │   ├── mnist_superpixels.py
    │   ├── modelnet.py
    │   ├── molecule_gpt_dataset.py
    │   ├── molecule_net.py
    │   ├── motif_generator/
    │   │   ├── __init__.py
    │   │   ├── base.py
    │   │   ├── custom.py
    │   │   ├── cycle.py
    │   │   ├── grid.py
    │   │   └── house.py
    │   ├── movie_lens.py
    │   ├── movie_lens_100k.py
    │   ├── movie_lens_1m.py
    │   ├── myket.py
    │   ├── nell.py
    │   ├── neurograph.py
    │   ├── ogb_mag.py
    │   ├── omdb.py
    │   ├── opf.py
    │   ├── ose_gvcs.py
    │   ├── particle.py
    │   ├── pascal.py
    │   ├── pascal_pf.py
    │   ├── pcpnet_dataset.py
    │   ├── pcqm4m.py
    │   ├── planetoid.py
    │   ├── polblogs.py
    │   ├── ppi.py
    │   ├── protein_mpnn_dataset.py
    │   ├── qm7.py
    │   ├── qm9.py
    │   ├── rcdd.py
    │   ├── reddit.py
    │   ├── reddit2.py
    │   ├── rel_link_pred_dataset.py
    │   ├── s3dis.py
    │   ├── sbm_dataset.py
    │   ├── shapenet.py
    │   ├── shrec2016.py
    │   ├── snap_dataset.py
    │   ├── suite_sparse.py
    │   ├── tag_dataset.py
    │   ├── taobao.py
    │   ├── teeth3ds.py
    │   ├── tosca.py
    │   ├── tu_dataset.py
    │   ├── twitch.py
    │   ├── upfd.py
    │   ├── utils/
    │   │   ├── __init__.py
    │   │   └── cheatsheet.py
    │   ├── web_qsp_dataset.py
    │   ├── webkb.py
    │   ├── wikics.py
    │   ├── wikidata.py
    │   ├── wikipedia_network.py
    │   ├── willow_object_class.py
    │   ├── word_net.py
    │   ├── yelp.py
    │   └── zinc.py
    ├── debug.py
    ├── deprecation.py
    ├── device.py
    ├── distributed/
    │   ├── __init__.py
    │   ├── dist_context.py
    │   ├── dist_link_neighbor_loader.py
    │   ├── dist_loader.py
    │   ├── dist_neighbor_loader.py
    │   ├── dist_neighbor_sampler.py
    │   ├── event_loop.py
    │   ├── local_feature_store.py
    │   ├── local_graph_store.py
    │   ├── partition.py
    │   ├── rpc.py
    │   └── utils.py
    ├── edge_index.py
    ├── experimental.py
    ├── explain/
    │   ├── __init__.py
    │   ├── algorithm/
    │   │   ├── __init__.py
    │   │   ├── attention_explainer.py
    │   │   ├── base.py
    │   │   ├── captum.py
    │   │   ├── captum_explainer.py
    │   │   ├── dummy_explainer.py
    │   │   ├── gnn_explainer.py
    │   │   ├── graphmask_explainer.py
    │   │   ├── pg_explainer.py
    │   │   └── utils.py
    │   ├── config.py
    │   ├── explainer.py
    │   ├── explanation.py
    │   └── metric/
    │       ├── __init__.py
    │       ├── basic.py
    │       ├── faithfulness.py
    │       └── fidelity.py
    ├── graphgym/
    │   ├── __init__.py
    │   ├── benchmark.py
    │   ├── checkpoint.py
    │   ├── cmd_args.py
    │   ├── config.py
    │   ├── contrib/
    │   │   ├── __init__.py
    │   │   ├── act/
    │   │   │   └── __init__.py
    │   │   ├── config/
    │   │   │   └── __init__.py
    │   │   ├── encoder/
    │   │   │   └── __init__.py
    │   │   ├── head/
    │   │   │   └── __init__.py
    │   │   ├── layer/
    │   │   │   ├── __init__.py
    │   │   │   └── generalconv.py
    │   │   ├── loader/
    │   │   │   └── __init__.py
    │   │   ├── loss/
    │   │   │   └── __init__.py
    │   │   ├── network/
    │   │   │   └── __init__.py
    │   │   ├── optimizer/
    │   │   │   └── __init__.py
    │   │   ├── pooling/
    │   │   │   └── __init__.py
    │   │   ├── stage/
    │   │   │   └── __init__.py
    │   │   ├── train/
    │   │   │   └── __init__.py
    │   │   └── transform/
    │   │       └── __init__.py
    │   ├── imports.py
    │   ├── init.py
    │   ├── loader.py
    │   ├── logger.py
    │   ├── loss.py
    │   ├── model_builder.py
    │   ├── models/
    │   │   ├── __init__.py
    │   │   ├── act.py
    │   │   ├── encoder.py
    │   │   ├── gnn.py
    │   │   ├── head.py
    │   │   ├── layer.py
    │   │   ├── pooling.py
    │   │   └── transform.py
    │   ├── optim.py
    │   ├── register.py
    │   ├── train.py
    │   └── utils/
    │       ├── LICENSE
    │       ├── __init__.py
    │       ├── agg_runs.py
    │       ├── comp_budget.py
    │       ├── device.py
    │       ├── epoch.py
    │       ├── io.py
    │       ├── plot.py
    │       └── tools.py
    ├── hash_tensor.py
    ├── home.py
    ├── index.py
    ├── inspector.py
    ├── io/
    │   ├── __init__.py
    │   ├── fs.py
    │   ├── npz.py
    │   ├── obj.py
    │   ├── off.py
    │   ├── planetoid.py
    │   ├── ply.py
    │   ├── sdf.py
    │   ├── tu.py
    │   └── txt_array.py
    ├── isinstance.py
    ├── lazy_loader.py
    ├── llm/
    │   ├── __init__.py
    │   ├── large_graph_indexer.py
    │   ├── models/
    │   │   ├── __init__.py
    │   │   ├── g_retriever.py
    │   │   ├── git_mol.py
    │   │   ├── glem.py
    │   │   ├── llm.py
    │   │   ├── llm_judge.py
    │   │   ├── molecule_gpt.py
    │   │   ├── protein_mpnn.py
    │   │   ├── sentence_transformer.py
    │   │   ├── txt2kg.py
    │   │   └── vision_transformer.py
    │   ├── rag_loader.py
    │   └── utils/
    │       ├── __init__.py
    │       ├── backend_utils.py
    │       ├── feature_store.py
    │       ├── graph_store.py
    │       └── vectorrag.py
    ├── loader/
    │   ├── __init__.py
    │   ├── base.py
    │   ├── cache.py
    │   ├── cluster.py
    │   ├── data_list_loader.py
    │   ├── dataloader.py
    │   ├── dense_data_loader.py
    │   ├── dynamic_batch_sampler.py
    │   ├── graph_saint.py
    │   ├── hgt_loader.py
    │   ├── ibmb_loader.py
    │   ├── imbalanced_sampler.py
    │   ├── link_loader.py
    │   ├── link_neighbor_loader.py
    │   ├── mixin.py
    │   ├── neighbor_loader.py
    │   ├── neighbor_sampler.py
    │   ├── node_loader.py
    │   ├── prefetch.py
    │   ├── random_node_loader.py
    │   ├── shadow.py
    │   ├── temporal_dataloader.py
    │   ├── utils.py
    │   └── zip_loader.py
    ├── logging.py
    ├── metrics/
    │   ├── __init__.py
    │   └── link_pred.py
    ├── nn/
    │   ├── __init__.py
    │   ├── aggr/
    │   │   ├── __init__.py
    │   │   ├── attention.py
    │   │   ├── base.py
    │   │   ├── basic.py
    │   │   ├── deep_sets.py
    │   │   ├── equilibrium.py
    │   │   ├── fused.py
    │   │   ├── gmt.py
    │   │   ├── gru.py
    │   │   ├── lcm.py
    │   │   ├── lstm.py
    │   │   ├── mlp.py
    │   │   ├── multi.py
    │   │   ├── patch_transformer.py
    │   │   ├── quantile.py
    │   │   ├── scaler.py
    │   │   ├── set2set.py
    │   │   ├── set_transformer.py
    │   │   ├── sort.py
    │   │   ├── utils.py
    │   │   └── variance_preserving.py
    │   ├── attention/
    │   │   ├── __init__.py
    │   │   ├── performer.py
    │   │   ├── polynormer.py
    │   │   ├── qformer.py
    │   │   └── sgformer.py
    │   ├── conv/
    │   │   ├── __init__.py
    │   │   ├── agnn_conv.py
    │   │   ├── antisymmetric_conv.py
    │   │   ├── appnp.py
    │   │   ├── arma_conv.py
    │   │   ├── cg_conv.py
    │   │   ├── cheb_conv.py
    │   │   ├── cluster_gcn_conv.py
    │   │   ├── collect.jinja
    │   │   ├── cugraph/
    │   │   │   ├── __init__.py
    │   │   │   ├── base.py
    │   │   │   ├── gat_conv.py
    │   │   │   ├── rgcn_conv.py
    │   │   │   └── sage_conv.py
    │   │   ├── dir_gnn_conv.py
    │   │   ├── dna_conv.py
    │   │   ├── edge_conv.py
    │   │   ├── edge_updater.jinja
    │   │   ├── eg_conv.py
    │   │   ├── fa_conv.py
    │   │   ├── feast_conv.py
    │   │   ├── film_conv.py
    │   │   ├── fused_gat_conv.py
    │   │   ├── gat_conv.py
    │   │   ├── gated_graph_conv.py
    │   │   ├── gatv2_conv.py
    │   │   ├── gcn2_conv.py
    │   │   ├── gcn_conv.py
    │   │   ├── gen_conv.py
    │   │   ├── general_conv.py
    │   │   ├── gin_conv.py
    │   │   ├── gmm_conv.py
    │   │   ├── gps_conv.py
    │   │   ├── graph_conv.py
    │   │   ├── gravnet_conv.py
    │   │   ├── han_conv.py
    │   │   ├── heat_conv.py
    │   │   ├── hetero_conv.py
    │   │   ├── hgt_conv.py
    │   │   ├── hypergraph_conv.py
    │   │   ├── le_conv.py
    │   │   ├── lg_conv.py
    │   │   ├── meshcnn_conv.py
    │   │   ├── message_passing.py
    │   │   ├── mf_conv.py
    │   │   ├── mixhop_conv.py
    │   │   ├── nn_conv.py
    │   │   ├── pan_conv.py
    │   │   ├── pdn_conv.py
    │   │   ├── pna_conv.py
    │   │   ├── point_conv.py
    │   │   ├── point_gnn_conv.py
    │   │   ├── point_transformer_conv.py
    │   │   ├── ppf_conv.py
    │   │   ├── propagate.jinja
    │   │   ├── res_gated_graph_conv.py
    │   │   ├── rgat_conv.py
    │   │   ├── rgcn_conv.py
    │   │   ├── sage_conv.py
    │   │   ├── sg_conv.py
    │   │   ├── signed_conv.py
    │   │   ├── simple_conv.py
    │   │   ├── spline_conv.py
    │   │   ├── ssg_conv.py
    │   │   ├── supergat_conv.py
    │   │   ├── tag_conv.py
    │   │   ├── transformer_conv.py
    │   │   ├── utils/
    │   │   │   ├── __init__.py
    │   │   │   └── cheatsheet.py
    │   │   ├── wl_conv.py
    │   │   ├── wl_conv_continuous.py
    │   │   └── x_conv.py
    │   ├── data_parallel.py
    │   ├── dense/
    │   │   ├── __init__.py
    │   │   ├── dense_gat_conv.py
    │   │   ├── dense_gcn_conv.py
    │   │   ├── dense_gin_conv.py
    │   │   ├── dense_graph_conv.py
    │   │   ├── dense_sage_conv.py
    │   │   ├── diff_pool.py
    │   │   ├── dmon_pool.py
    │   │   ├── linear.py
    │   │   └── mincut_pool.py
    │   ├── encoding.py
    │   ├── functional/
    │   │   ├── __init__.py
    │   │   ├── bro.py
    │   │   └── gini.py
    │   ├── fx.py
    │   ├── glob.py
    │   ├── inits.py
    │   ├── kge/
    │   │   ├── __init__.py
    │   │   ├── base.py
    │   │   ├── complex.py
    │   │   ├── distmult.py
    │   │   ├── loader.py
    │   │   ├── rotate.py
    │   │   └── transe.py
    │   ├── lr_scheduler.py
    │   ├── model_hub.py
    │   ├── models/
    │   │   ├── __init__.py
    │   │   ├── attentive_fp.py
    │   │   ├── attract_repel.py
    │   │   ├── autoencoder.py
    │   │   ├── basic_gnn.py
    │   │   ├── captum.py
    │   │   ├── correct_and_smooth.py
    │   │   ├── deep_graph_infomax.py
    │   │   ├── deepgcn.py
    │   │   ├── dimenet.py
    │   │   ├── dimenet_utils.py
    │   │   ├── gnnff.py
    │   │   ├── gpse.py
    │   │   ├── graph_mixer.py
    │   │   ├── graph_unet.py
    │   │   ├── jumping_knowledge.py
    │   │   ├── label_prop.py
    │   │   ├── lightgcn.py
    │   │   ├── linkx.py
    │   │   ├── lpformer.py
    │   │   ├── mask_label.py
    │   │   ├── meta.py
    │   │   ├── metapath2vec.py
    │   │   ├── mlp.py
    │   │   ├── neural_fingerprint.py
    │   │   ├── node2vec.py
    │   │   ├── pmlp.py
    │   │   ├── polynormer.py
    │   │   ├── re_net.py
    │   │   ├── rect.py
    │   │   ├── rev_gnn.py
    │   │   ├── schnet.py
    │   │   ├── sgformer.py
    │   │   ├── signed_gcn.py
    │   │   ├── tgn.py
    │   │   └── visnet.py
    │   ├── module_dict.py
    │   ├── norm/
    │   │   ├── __init__.py
    │   │   ├── batch_norm.py
    │   │   ├── diff_group_norm.py
    │   │   ├── graph_norm.py
    │   │   ├── graph_size_norm.py
    │   │   ├── instance_norm.py
    │   │   ├── layer_norm.py
    │   │   ├── mean_subtraction_norm.py
    │   │   ├── msg_norm.py
    │   │   └── pair_norm.py
    │   ├── parameter_dict.py
    │   ├── pool/
    │   │   ├── __init__.py
    │   │   ├── approx_knn.py
    │   │   ├── asap.py
    │   │   ├── avg_pool.py
    │   │   ├── cluster_pool.py
    │   │   ├── connect/
    │   │   │   ├── __init__.py
    │   │   │   ├── base.py
    │   │   │   └── filter_edges.py
    │   │   ├── consecutive.py
    │   │   ├── decimation.py
    │   │   ├── edge_pool.py
    │   │   ├── glob.py
    │   │   ├── graclus.py
    │   │   ├── knn.py
    │   │   ├── max_pool.py
    │   │   ├── mem_pool.py
    │   │   ├── pan_pool.py
    │   │   ├── pool.py
    │   │   ├── sag_pool.py
    │   │   ├── select/
    │   │   │   ├── __init__.py
    │   │   │   ├── base.py
    │   │   │   └── topk.py
    │   │   ├── topk_pool.py
    │   │   └── voxel_grid.py
    │   ├── reshape.py
    │   ├── resolver.py
    │   ├── sequential.jinja
    │   ├── sequential.py
    │   ├── summary.py
    │   ├── to_fixed_size_transformer.py
    │   ├── to_hetero_module.py
    │   ├── to_hetero_transformer.py
    │   ├── to_hetero_with_bases_transformer.py
    │   └── unpool/
    │       ├── __init__.py
    │       └── knn_interpolate.py
    ├── profile/
    │   ├── __init__.py
    │   ├── benchmark.py
    │   ├── nvtx.py
    │   ├── profile.py
    │   ├── profiler.py
    │   └── utils.py
    ├── resolver.py
    ├── sampler/
    │   ├── __init__.py
    │   ├── base.py
    │   ├── hgt_sampler.py
    │   ├── neighbor_sampler.py
    │   └── utils.py
    ├── seed.py
    ├── template.py
    ├── testing/
    │   ├── __init__.py
    │   ├── asserts.py
    │   ├── data.py
    │   ├── decorators.py
    │   ├── distributed.py
    │   ├── feature_store.py
    │   └── graph_store.py
    ├── transforms/
    │   ├── __init__.py
    │   ├── add_gpse.py
    │   ├── add_metapaths.py
    │   ├── add_positional_encoding.py
    │   ├── add_remaining_self_loops.py
    │   ├── add_self_loops.py
    │   ├── base_transform.py
    │   ├── cartesian.py
    │   ├── center.py
    │   ├── compose.py
    │   ├── constant.py
    │   ├── delaunay.py
    │   ├── distance.py
    │   ├── face_to_edge.py
    │   ├── feature_propagation.py
    │   ├── fixed_points.py
    │   ├── gcn_norm.py
    │   ├── gdc.py
    │   ├── generate_mesh_normals.py
    │   ├── grid_sampling.py
    │   ├── half_hop.py
    │   ├── knn_graph.py
    │   ├── laplacian_lambda_max.py
    │   ├── largest_connected_components.py
    │   ├── line_graph.py
    │   ├── linear_transformation.py
    │   ├── local_cartesian.py
    │   ├── local_degree_profile.py
    │   ├── mask.py
    │   ├── node_property_split.py
    │   ├── normalize_features.py
    │   ├── normalize_rotation.py
    │   ├── normalize_scale.py
    │   ├── one_hot_degree.py
    │   ├── pad.py
    │   ├── point_pair_features.py
    │   ├── polar.py
    │   ├── radius_graph.py
    │   ├── random_flip.py
    │   ├── random_jitter.py
    │   ├── random_link_split.py
    │   ├── random_node_split.py
    │   ├── random_rotate.py
    │   ├── random_scale.py
    │   ├── random_shear.py
    │   ├── remove_duplicated_edges.py
    │   ├── remove_isolated_nodes.py
    │   ├── remove_self_loops.py
    │   ├── remove_training_classes.py
    │   ├── rooted_subgraph.py
    │   ├── sample_points.py
    │   ├── sign.py
    │   ├── spherical.py
    │   ├── svd_feature_reduction.py
    │   ├── target_indegree.py
    │   ├── to_dense.py
    │   ├── to_device.py
    │   ├── to_sparse_tensor.py
    │   ├── to_superpixels.py
    │   ├── to_undirected.py
    │   ├── two_hop.py
    │   └── virtual_node.py
    ├── typing.py
    ├── utils/
    │   ├── __init__.py
    │   ├── _assortativity.py
    │   ├── _coalesce.py
    │   ├── _degree.py
    │   ├── _grid.py
    │   ├── _homophily.py
    │   ├── _index_sort.py
    │   ├── _lexsort.py
    │   ├── _negative_sampling.py
    │   ├── _normalize_edge_index.py
    │   ├── _normalized_cut.py
    │   ├── _one_hot.py
    │   ├── _scatter.py
    │   ├── _segment.py
    │   ├── _select.py
    │   ├── _softmax.py
    │   ├── _sort_edge_index.py
    │   ├── _spmm.py
    │   ├── _subgraph.py
    │   ├── _to_dense_adj.py
    │   ├── _to_dense_batch.py
    │   ├── _train_test_split_edges.py
    │   ├── _tree_decomposition.py
    │   ├── _trim_to_layer.py
    │   ├── _unbatch.py
    │   ├── augmentation.py
    │   ├── convert.py
    │   ├── cross_entropy.py
    │   ├── dropout.py
    │   ├── embedding.py
    │   ├── functions.py
    │   ├── geodesic.py
    │   ├── hetero.py
    │   ├── influence.py
    │   ├── isolated.py
    │   ├── laplacian.py
    │   ├── loop.py
    │   ├── map.py
    │   ├── mask.py
    │   ├── mesh_laplacian.py
    │   ├── mixin.py
    │   ├── nested.py
    │   ├── noise_scheduler.py
    │   ├── num_nodes.py
    │   ├── ppr.py
    │   ├── random.py
    │   ├── repeat.py
    │   ├── smiles.py
    │   ├── sparse.py
    │   └── undirected.py
    ├── visualization/
    │   ├── __init__.py
    │   ├── graph.py
    │   └── influence.py
    └── warnings.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/CODEOWNERS
================================================
# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners

* @rusty1s @akihironitta

*.py @rusty1s @wsad1 @akihironitta

/.github/ @rusty1s @akihironitta

/.github/CODEOWNERS @rusty1s

/torch_geometric/data/ @rusty1s @mananshah99 @akihironitta

/torch_geometric/loader/ @rusty1s @mananshah99 @akihironitta

/torch_geometric/sampler/ @rusty1s @mananshah99 @akihironitta

/docs/ @rusty1s @akihironitta

/torch_geometric/nn/conv/cugraph @tingyu66

/examples/llm @puririshi98

/torch_geometric/llm @puririshi98


================================================
FILE: .github/CONTRIBUTING.md
================================================
# Contributing to PyG

If you are interested in contributing to PyG, your contributions will likely fall into one of the following two categories:

1. You want to implement a new feature:
   - In general, we accept any features as long as they fit the scope of this package. If you are unsure about this or need help on the design/implementation of your feature, post about it in an issue.
1. You want to fix a bug:
   - Feel free to send a Pull Request (PR) any time you encounter a bug. Please provide a clear and concise description of what the bug was. If you are unsure about if this is a bug at all or how to fix, post about it in an issue.

Once you finish implementing a feature or bug-fix, please send a PR to https://github.com/pyg-team/pytorch_geometric.
Your PR will be merged after one or more rounds of reviews by the [pyg-team](https://github.com/pyg-team).
If your PR isn't merged anytime soon (*e.g.,* due to its large size, complexity or unavailability of reviewers), try moving your contribution to the [`torch_geometric.contrib`](https://pytorch-geometric.readthedocs.io/en/latest/modules/contrib.html) package.
[`torch_geometric.contrib`](https://pytorch-geometric.readthedocs.io/en/latest/modules/contrib.html) has less rigourous review requirements and might lead to your PR getting merged faster.

## Developing PyG

To develop PyG on your machine, here are some tips:

1. Ensure that you are running on one of the two latest PyTorch releases (*e.g.*, `2.8.0`):

   ```python
   import torch
   print(torch.__version__)
   ```

1. *(Optional)* Follow the [installation instructions](https://github.com/pyg-team/pytorch_geometric#installation) to install `pyg-lib`, `torch-scatter`, `torch-sparse`, and `torch-cluster` (if you haven't already).
   Note that this step is optional and only necessary if you develop a feature that uses one of these libraries.

   ```bash
   pip install pyg-lib torch-scatter torch-sparse torch-cluster -f https://data.pyg.org/whl/torch-${TORCH}+${CUDA}.html
   ```

   where `${TORCH}` should be replaced by your PyTorch version (*e.g.*, `2.8.0`), and `${CUDA}` should be replaced by your CUDA version (*e.g.*, `cpu`, `cu126`, `cu128`, or `cu129`).

1. Uninstall all existing PyG installations.
   It is advised to run this command repeatedly to confirm that installations across all locations are properly removed.

   ```bash
   pip uninstall torch-geometric
   pip uninstall torch-geometric  # run this command twice
   ```

1. Fork and clone the PyG repository:

   ```bash
   git clone https://github.com/<your_username>/pytorch_geometric
   cd pytorch_geometric
   ```

1. If you already cloned PyG from source, update it:

   ```bash
   git pull
   ```

1. Install PyG in editable mode:

   ```bash
   pip install -e ".[dev,full]"
   ```

   This mode will symlink the Python files from the current local source tree into the Python install.
   Hence, if you modify a Python file, you do not need to re-install PyG again.

1. Ensure that you have a working PyG installation by running the entire test suite with

   ```bash
   pytest
   ```

   In case an error occurs, please first check if all sub-packages ([`pyg-lib`](https://github.com/pyg-team/pyg-lib), [`torch-scatter`](https://github.com/rusty1s/pytorch_scatter), [`torch-sparse`](https://github.com/rusty1s/pytorch_sparse) and [`torch-cluster`](https://github.com/rusty1s/pytorch_cluster)) are on its latest reported version.

1. Install pre-commit hooks:

   ```bash
    pre-commit install
   ```

## Unit Testing

The PyG testing suite is located under `test/`.
Run the entire test suite with

```bash
pytest
```

or test individual files via, *e.g.*, `pytest test/utils/test_convert.py`.

## Continuous Integration

PyG uses [GitHub Actions](https://github.com/pyg-team/pytorch_geometric/actions) in combination with [CodeCov](https://codecov.io/github/pyg-team/pytorch_geometric?branch=master) for continuous integration.

Everytime you send a Pull Request, your commit will be built and checked against the PyG guidelines:

1. Ensure that your code is formatted correctly by testing against the styleguide of [`flake8`](https://github.com/PyCQA/flake8).
   We use the [`Flake8-pyproject`](https://pypi.org/project/Flake8-pyproject/) plugin for configuration:

   ```bash
   flake8 .
   ```

   If you do not want to format your code manually, we recommend to use [`yapf`](https://github.com/google/yapf).

1. Ensure that the entire test suite passes and that code coverage roughly stays the same.
   Please feel encouraged to provide a test with your submitted code.
   To test, either run

   ```bash
   pytest --cov
   ```

   or

   ```bash
   FULL_TEST=1 pytest --cov
   ```

   (which runs a set of additional but time-consuming tests) dependening on your needs.

1. Add your feature/bugfix to the [`CHANGELOG.md`](https://github.com/pyg-team/pytorch_geometric/blob/master/CHANGELOG.md?plain=1).
   If multiple PRs move towards integrating a single feature, it is advised to group them together into one bullet point.

## Building Documentation

To build the documentation:

1. [Build and install](#developing-pyg) PyG from source.
1. Install [Sphinx](https://www.sphinx-doc.org/en/master/) theme via
   ```bash
   pip install git+https://github.com/pyg-team/pyg_sphinx_theme.git
   ```
1. Generate the documentation via:
   ```bash
   cd docs
   make html
   ```

The documentation is now available to view by opening `docs/build/html/index.html`.


================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yml
================================================
name: "🐛 Bug Report"
description: "Submit a report to help us reproduce and fix the bug"
labels: bug

body:
  - type: markdown
    attributes:
      value: >
        #### Before submitting a bug, please make sure the issue hasn't been already addressed by searching through [the existing and past issues](https://github.com/pyg-team/pytorch_geometric/issues).
        #
  - type: textarea
    attributes:
      label: 🐛 Describe the bug
      description: |
        Please provide a clear and concise description of the bug.

        If relevant, add a minimal example so that we can reproduce the error by running the code. It is very important for the snippet to be as minimal as possible, so please take time to trim down any irrelevant code to help us debug efficiently. We are going to copy-paste your code and we expect to get the same result as you did: avoid any external data, and include the relevant imports:

        ```python
        # All necessary imports at the beginning
        import torch
        from torch_geometric.utils import to_undirected

        # A minimal reproducing example trimmed down to the essential parts:
        edge_index = torch.tensor([[0, 1, 2], [1, 2, 3]])
        edge_index = to_undirected(edge_index, num_nodes=1)
        assert edge_index.size(1) == 6  # We expect that the number of edges is doubled.

        # NOTE: the bug is that num_nodes < edge_index.max() + 1
        ```

        Please also paste or describe the results you observe instead of the expected results. If you observe an error, please paste the error message including the **full** traceback of the exception. It may be relevant to wrap error messages in ```` ```triple quotes blocks``` ````.
      placeholder: |
        A clear and concise description of the bug.

        ```python
        # Sample code to reproduce the problem
        ```

        ```
        The error message you got, with the full traceback.
        ```
    validations:
      required: true
  - type: textarea
    attributes:
      label: Versions
      description: |
        Please run the following and paste the output below.
        ```sh
        curl -OL https://raw.githubusercontent.com/pytorch/pytorch/main/torch/utils/collect_env.py
        # For security purposes, please check the contents of collect_env.py before running it.
        python3 collect_env.py
        ```
    validations:
      required: true


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: 🙏 Ask a Question
    url: https://github.com/pyg-team/pytorch_geometric/discussions/new
    about: Ask and answer PyG related questions
  - name: 💬 Slack
    url: https://join.slack.com/t/torchgeometricco/shared_invite/zt-p6br3yuo-BxRoe36OHHLF6jYU8xHtBA
    about: Chat with our community


================================================
FILE: .github/ISSUE_TEMPLATE/documentation.yml
================================================
name: "📚 Typos and Doc Fixes"
description: "Tell us about how we can improve our documentation"
labels: documentation

body:
  - type: textarea
    attributes:
      label: 📚 Describe the documentation issue
      description: |
        A clear and concise description of the issue.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Suggest a potential alternative/fix
      description: |
        Tell us how we could improve the documentation in this regard.


================================================
FILE: .github/ISSUE_TEMPLATE/feature-request.yml
================================================
name: "🚀 Feature Request"
description: "Propose a new PyG feature"
labels: feature

body:
  - type: textarea
    attributes:
      label: 🚀 The feature, motivation and pitch
      description: >
        A clear and concise description of the feature proposal. Please outline the motivation for the proposal. Is your feature request related to a specific problem? e.g., *"I'm working on X and would like Y to be possible"*. If this is related to another GitHub issue, please link here too.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Alternatives
      description: >
        A description of any alternative solutions or features you've considered, if any.
  - type: textarea
    attributes:
      label: Additional context
      description: >
        Add any other context or screenshots about the feature request.


================================================
FILE: .github/ISSUE_TEMPLATE/installation.yml
================================================
name: "😵 Installation"
description: "Report an installation problem"
labels: installation

body:
  - type: markdown
    attributes:
      value: >
        #### Before submitting an installation problem, please make sure the issue hasn't been already reported by searching through [the existing and past issues](https://github.com/pyg-team/pytorch_geometric/issues).
        #
  - type: textarea
    attributes:
      label: 😵 Describe the installation problem
      description: |
        Please provide a clear and concise description of the installation problem. If you have installation log files, please prvoide them here as well. It may be relevant to wrap the log files in ```` ```triple quotes blocks``` ````.
      placeholder: |
        A clear and concise description of the installation problem.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Environment
      description: |
        Please provide as much information as possible about your environment, such as your PyG (`print(torch_geometric.__version__)`) and PyTorch version (`print(torch.__version__)`), your OS (*e.g.*, Linux), and your Python version (*e.g.*, `3.13`):
      value: |
        * PyG version:
        * PyTorch version:
        * OS:
        * Python version:
        * CUDA/cuDNN version:
        * How you installed PyTorch and PyG (`conda`, `pip`, source):
        * Any other relevant information (*e.g.*, version of `torch-scatter`):


================================================
FILE: .github/ISSUE_TEMPLATE/refactor.yml
================================================
name: "🛠 Refactor"
description: "Suggest a code refactor or deprecation"
labels: refactor

body:
  - type: textarea
    attributes:
      label: 🛠 Proposed Refactor
      description: |
        A clear and concise description of the refactor proposal. Please outline the motivation for the proposal. If this is related to another GitHub issue, please link here too.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Suggest a potential alternative/fix
      description: |
        Tell us how we could improve the code in this regard.
    validations:
      required: true


================================================
FILE: .github/actions/setup/action.yml
================================================
name: Setup

inputs:
  python-version:
    required: false
    default: '3.10'
  torch-version:
    required: false
    default: '2.10.0'
  cuda-version:
    required: false
    default: cpu
  full_install:
    required: false
    default: true

runs:
  using: composite

  steps:
    - name: Install uv
      uses: astral-sh/setup-uv@v7
      with:
        python-version: ${{ inputs.python-version }}
        activate-environment: true

    - name: Set up Python ${{ inputs.python-version }}
      run: |
        uv pip install --upgrade pip setuptools
      shell: bash

    - name: Install numpy
      run: |
        uv pip install "numpy<2"
      shell: bash

    - name: Install PyTorch ${{ inputs.torch-version }}+${{ inputs.cuda-version }}
      if: ${{ inputs.torch-version != 'nightly' }}
      run: |
        uv pip install torch==${{ inputs.torch-version }} --extra-index-url https://download.pytorch.org/whl/${{ inputs.cuda-version }}
      shell: bash

    - name: Install PyTorch ${{ inputs.torch-version }}+${{ inputs.cuda-version }}
      if: ${{ inputs.torch-version == 'nightly' }}
      run: |
        uv pip install --pre torch --extra-index-url https://download.pytorch.org/whl/nightly/${{ inputs.cuda-version }}
      shell: bash

    - name: Check installation
      run: |
        uv run --no-project python -c "import torch; print('PyTorch:', torch.__version__)"
        uv run --no-project python -c "import torch; print('CUDA available:', torch.cuda.is_available())"
        uv run --no-project python -c "import torch; print('CUDA:', torch.version.cuda)"
      shell: bash

    - name: Install pyg-lib
      if: ${{ inputs.torch-version != 'nightly' }}
      run: |
        uv pip install --no-index --upgrade pyg-lib -f https://data.pyg.org/whl/nightly/torch-${{ inputs.torch-version }}+${{ inputs.cuda-version }}.html
      shell: bash

    - name: Install faiss-cpu
      if: ${{ inputs.full_install == 'true' && inputs.cuda-version == 'cpu' && runner.os == 'Linux' }}
      run: |
        uv pip install faiss-cpu==1.7.2
      shell: bash

    - name: Install faiss-gpu
      if: ${{ inputs.full_install == 'true' && inputs.cuda-version != 'cpu' && runner.os == 'Linux' }}
      run: |
        uv pip install faiss-gpu==1.7.2
      shell: bash

    - name: Install torchvision
      if: ${{ inputs.full_install == 'true' && inputs.torch-version != 'nightly' }}
      run: |
        if [ ${{ inputs.torch-version }} == '2.10.0' ]; then
          TORCHVISION_VERSION=0.25.0
        elif [ ${{ inputs.torch-version }} == '2.9.0' ]; then
          TORCHVISION_VERSION=0.24.0
        elif [ ${{ inputs.torch-version }} == '2.8.0' ]; then
          TORCHVISION_VERSION=0.23.0
        elif [ ${{ inputs.torch-version }} == '2.7.0' ]; then
          TORCHVISION_VERSION=0.22.0
        elif [ ${{ inputs.torch-version }} == '2.6.0' ]; then
          TORCHVISION_VERSION=0.21.0
        fi
        uv pip install torchvision==${TORCHVISION_VERSION} --extra-index-url https://download.pytorch.org/whl/${{ inputs.cuda-version }}
      shell: bash

    - name: Install extension packages
      if: ${{ inputs.full_install == 'true' && inputs.torch-version != 'nightly' }}
      run: |
        uv pip install scipy
        uv pip install --no-index --upgrade torch-scatter torch-sparse torch-cluster -f https://data.pyg.org/whl/torch-${{ inputs.torch-version }}+${{ inputs.cuda-version }}.html
      shell: bash


================================================
FILE: .github/dependabot.yml
================================================
# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/dependabot-options-reference
version: 2
updates:
  - package-ecosystem: "github-actions"
    directories:
      - "/"
      - "/.github/actions/setup"
    schedule:
      interval: "daily"
      time: "00:00"
    labels:
      - "ci"
      - "skip-changelog"
    pull-request-branch-name:
      separator: "-"
    open-pull-requests-limit: 10


================================================
FILE: .github/labeler.yml
================================================
installation:
  - changed-files:
      - any-glob-to-any-file: ["pyproject.toml"]

ci:
  - changed-files:
      - any-glob-to-any-file: [".github/**/*", "codecov.yaml", ".pre-commit-config.yaml"]

documentation:
  - changed-files:
      - any-glob-to-any-file: ["docs/**/*", "readthedocs.yml", "README.MD"]

example:
  - changed-files:
      - any-glob-to-any-file: "examples/**/*"

data:
  - changed-files:
      - any-glob-to-any-file: "torch_geometric/data/**/*"

dataset:
  - changed-files:
      - any-glob-to-any-file: ["torch_geometric/io/**/*", "torch_geometric/datasets/**/*"]

sampler:
  - changed-files:
      - any-glob-to-any-file: "torch_geometric/sampler/**/*"

loader:
  - changed-files:
      - any-glob-to-any-file: "torch_geometric/loader/**/*"

nn:
  - changed-files:
      - any-glob-to-any-file: "torch_geometric/nn/**/*"

explain:
  - changed-files:
      - any-glob-to-any-file: "torch_geometric/explain/**/*"

transform:
  - changed-files:
      - any-glob-to-any-file: "torch_geometric/transforms/**/*"

metrics:
  - changed-files:
      - any-glob-to-any-file: "torch_geometric/metrics/**/*"

utils:
  - changed-files:
      - any-glob-to-any-file: "torch_geometric/utils/**/*"

distributed:
  - changed-files:
      - any-glob-to-any-file: "torch_geometric/distributed/**/*"

contrib:
  - changed-files:
      - any-glob-to-any-file: "torch_geometric/contrib/**/*"

graphgym:
  - changed-files:
      - any-glob-to-any-file: ["graphgym/**/*", "torch_geometric/graphgym/**/*"]

benchmark:
  - changed-files:
      - any-glob-to-any-file: ["benchmark/**/*", "torch_geometric/profile/**/*"]


================================================
FILE: .github/workflows/_testing.yml
================================================
name: Reusable Testing

on:  # yamllint disable-line rule:truthy
  workflow_call:
    inputs:
      test-matrix:
        type: string
        required: true


defaults:
  run:
    shell: bash

jobs:
  test:
    runs-on: ${{ matrix.os }}

    strategy:
      fail-fast: false
      matrix: ${{ fromJSON(inputs.test-matrix) }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Set up packages
        uses: ./.github/actions/setup
        with:
          python-version: ${{ matrix.python-version }}
          torch-version: ${{ matrix.torch-version }}
          cuda-version: ${{ matrix.cuda-version }}

      - name: Install graphviz
        if: ${{ runner.os == 'Linux' && matrix.full_test == '1' }}
        run: |
          sudo apt-get install graphviz

      - name: Install main package (Windows)
        if: ${{ runner.os == 'Windows' }}
        run: |
          uv pip install -e ".[test]"

      - name: Install main package
        if: ${{ runner.os != 'Windows' }}
        run: |
          uv pip install -e ".[full,test]"

      - name: Check installation
        run: |
          python -c "import torch; print('PyTorch:', torch.__version__)"
          python -c "import torch; print('CUDA available:', torch.cuda.is_available())"
          python -c "import torch; print('CUDA:', torch.version.cuda)"
        shell: bash

      - name: Run tests
        timeout-minutes: 20
        run: |
          pytest -m "not rag" --cov --cov-report=xml --durations 10
        env:
          FULL_TEST: ${{ matrix.full_test }}

      - name: Upload coverage
        if: ${{ runner.os == 'Linux' }}
        uses: codecov/codecov-action@v5
        with:
          fail_ci_if_error: false


================================================
FILE: .github/workflows/auto-merge.yml
================================================
name: Auto-merge Bot PRs

on:  # yamllint disable-line rule:truthy
  pull_request_target:
    types: [opened, reopened]

permissions:
  contents: write
  pull-requests: write

jobs:
  auto-merge:
    runs-on: ubuntu-latest
    if: ${{ github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'pre-commit-ci[bot]' }}
    steps:
      - uses: actions/checkout@v6

      - name: Label bot PRs
        run: gh pr edit --add-label "ci,skip-changelog" ${{ github.event.pull_request.html_url }}
        env:
          GITHUB_TOKEN: ${{ secrets.PAT }}

      - name: Auto-approve
        uses: hmarr/auto-approve-action@v4
        with:
          github-token: ${{ secrets.PAT }}

      - name: Enable auto-merge
        run: gh pr merge --auto --squash ${{ github.event.pull_request.html_url }}
        env:
          GITHUB_TOKEN: ${{ secrets.PAT }}


================================================
FILE: .github/workflows/building_nightly.yml
================================================
name: Nightly Build

on:  # yamllint disable-line rule:truthy
  workflow_dispatch:
  schedule:
    - cron: "0 6 * * *"  # Everyday at 6:00am UTC/10:00pm PST

jobs:

  build:
    if: github.repository == 'pyg-team/pytorch_geometric'
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Set up Python
        uses: actions/setup-python@v6
        with:
          python-version: '3.10'

      - name: Set version
        run: echo "VERSION=$(sed -n "s/^__version__ = '\(.*\)'/\1/p" torch_geometric/__init__.py)" >> ${GITHUB_ENV}

      - name: Set time
        run: echo "TODAY=$(date +'%Y%m%d')" >> ${GITHUB_ENV}

      - name: Customize build version
        run: |
          sed -i "s/$VERSION/$VERSION.dev$TODAY/" torch_geometric/__init__.py
          sed -i '0,/name="torch-geometric"/s//name="pyg-nightly"/' pyproject.toml # Only change first occurence
          sed -i "s/version=\"$VERSION\"/version=\"$VERSION.dev$TODAY\"/" pyproject.toml

      - name: Build package
        run: |
          pip install build
          python -m build

      - name: Publish package
        uses: pypa/gh-action-pypi-publish@release/v1
        with:
          user: __token__
          password: ${{ secrets.PYPI_API_TOKEN }}


================================================
FILE: .github/workflows/changelog.yml
================================================
name: Changelog Enforcer

on:  # yamllint disable-line rule:truthy
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled]

jobs:

  changelog:
    runs-on: ubuntu-latest

    steps:
      - name: Enforce changelog entry
        uses: dangoslen/changelog-enforcer@v3
        with:
          skipLabels: skip-changelog


================================================
FILE: .github/workflows/documentation.yml
================================================
name: Documentation

on:  # yamllint disable-line rule:truthy
  push:
    branches:
      - master
    paths:
      - 'torch_geometric/**'
      - 'docs/**'
      - 'pyproject.toml'
      - '.github/actions/setup/action.yml'
      - '.github/workflows/documentation.yml'
  pull_request:
    paths:
      - 'torch_geometric/**'
      - 'docs/**'
      - 'pyproject.toml'
      - '.github/actions/setup/action.yml'
      - '.github/workflows/documentation.yml'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}-${{ startsWith(github.ref, 'refs/pull/') || github.run_number }}  # yamllint disable-line
  # Only cancel intermediate builds if on a PR:
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

jobs:

  make_html:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Setup packages
        uses: ./.github/actions/setup
        with:
          full_install: false

      - name: Install main package
        run: |
          uv pip install -e . nbsphinx git+https://github.com/pyg-team/pyg_sphinx_theme.git

      - name: Build documentation
        working-directory: ./docs
        run: |
          sphinx-build -M html "source" "build" -W  # Fail on warning.


================================================
FILE: .github/workflows/examples.yml
================================================
name: Examples

on:  # yamllint disable-line rule:truthy
  workflow_dispatch:
  schedule:
    - cron: "0 7 * * *"  # Everyday at 7:00am UTC/11:00pm PST

jobs:

  pytest:
    if: github.repository == 'pyg-team/pytorch_geometric'
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Setup packages
        uses: ./.github/actions/setup

      - name: Install main package
        run: |
          uv pip install ".[benchmark]"

      - name: Run GCN on Cora
        run: |
          python examples/gcn.py --wandb
        env:
          WANDB_API_KEY: ${{ secrets.WANDB_API_KEY }}

      - name: Run GAT on Cora
        run: |
          python examples/gat.py --wandb
        env:
          WANDB_API_KEY: ${{ secrets.WANDB_API_KEY }}

      - name: Run GIN on MUTAG
        run: |
          python examples/mutag_gin.py --wandb
        env:
          WANDB_API_KEY: ${{ secrets.WANDB_API_KEY }}

      - name: Run GNNExplainer
        run: |
          python examples/explain/gnn_explainer.py


================================================
FILE: .github/workflows/labeler.yml
================================================
name: PR Labeler

on:  # yamllint disable-line rule:truthy
  pull_request:

jobs:

  assign-labels:
    if: github.repository == 'pyg-team/pytorch_geometric'
    runs-on: ubuntu-latest

    permissions:
      contents: read
      pull-requests: write

    steps:
      - name: Add PR labels
        uses: actions/labeler@v6
        continue-on-error: true
        with:
          repo-token: "${{ secrets.GITHUB_TOKEN }}"
          sync-labels: true

  assign-author:
    if: github.repository == 'pyg-team/pytorch_geometric'
    runs-on: ubuntu-latest

    steps:
      - name: Add PR author
        uses: samspills/assign-pr-to-author@v1.0
        continue-on-error: true
        if: github.event_name == 'pull_request'
        with:
          repo-token: "${{ secrets.GITHUB_TOKEN }}"


================================================
FILE: .github/workflows/linting.yml
================================================
name: Linting

on:  # yamllint disable-line rule:truthy
  push:
    branches:
      - master
    paths:
      - 'torch_geometric/**'
      - 'test/**'
      - 'examples/**'
      - 'benchmark/**'
      - 'pyproject.toml'
      - '.github/actions/setup/action.yml'
      - '.github/workflows/linting.yml'
  pull_request:
    paths:
      - 'torch_geometric/**'
      - 'test/**'
      - 'examples/**'
      - 'benchmark/**'
      - 'pyproject.toml'
      - '.github/actions/setup/action.yml'
      - '.github/workflows/linting.yml'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}-${{ startsWith(github.ref, 'refs/pull/') || github.run_number }}  # yamllint disable-line
  # Only cancel intermediate builds if on a PR:
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

jobs:

  mypy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Setup packages
        uses: ./.github/actions/setup

      - name: Install main package
        run: |
          uv pip install -e ".[full,test]" mypy types-requests

      - name: Check type hints
        run: |
          mypy -v --cache-dir=/dev/null


================================================
FILE: .github/workflows/testing.yml
================================================
name: Testing

on:  # yamllint disable-line rule:truthy
  push:
    branches:
      - master
  pull_request:
  schedule:
    - cron: "0 6 * * *"  # Everyday at 6:00am UTC/10:00pm PST


concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}-${{ startsWith(github.ref, 'refs/pull/') || github.run_number }}  # yamllint disable-line
  # Only cancel intermediate builds if on a PR:
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

jobs:
  trigger:
    runs-on: ubuntu-latest
    outputs:
      triggered: ${{ steps.check.outputs.triggered }}
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 2
      - id: check
        run: |
          if [ "${{ github.event_name }}" = "schedule" ]; then
            echo "triggered=true" >> "$GITHUB_OUTPUT"
            exit 0
          fi

          if [ "${{ github.event_name }}" = "push" ]; then
            BASE=${{ github.event.before }}
          else
            BASE=${{ github.event.pull_request.base.sha }}
          fi

          PATHS=(
            'torch_geometric/'
            'test/'
            'pyproject.toml'
            'codecov.yml'
            '.github/actions/setup/action.yml'
            '.github/workflows/testing.yml'
            '.github/workflows/_testing.yml'
          )

          CHANGED=$(git diff --name-only "$BASE" HEAD)
          for path in "${PATHS[@]}"; do
            if echo "$CHANGED" | grep -q "^${path}"; then
              echo "triggered=true" >> "$GITHUB_OUTPUT"
              exit 0
            fi
          done

          echo "triggered=false" >> "$GITHUB_OUTPUT"

  pytest:
    needs: trigger
    if: ${{ needs.trigger.outputs.triggered == 'true' && github.repository == 'pyg-team/pytorch_geometric' && github.event_name != 'schedule' }}
    uses: ./.github/workflows/_testing.yml
    with:
      test-matrix: |
        { include: [
          { "os": "ubuntu-22.04", "python-version": "3.10", "torch-version": "nightly", "cuda-version": "cpu" },
          { "os": "ubuntu-22.04", "python-version": "3.10", "torch-version": "2.10.0", "cuda-version": "cpu" },
          { "os": "ubuntu-22.04", "python-version": "3.10", "torch-version": "2.9.0", "cuda-version": "cpu" },
          { "os": "ubuntu-22.04", "python-version": "3.10", "torch-version": "2.8.0", "cuda-version": "cpu" },
          { "os": "macos-14", "python-version": "3.10", "torch-version": "2.10.0", "cuda-version": "cpu" },
          { "os": "windows-2022", "python-version": "3.10", "torch-version": "2.10.0", "cuda-version": "cpu" }
        ]}

  pytest-full:
    # Only run this on nightly schedule for now.
    if: ${{ github.repository == 'pyg-team/pytorch_geometric' && github.event_name == 'schedule' }}
    uses: ./.github/workflows/_testing.yml
    with:
      test-matrix: |
        {
          "os": ["ubuntu-22.04", "macos-14", "windows-2022"],
          "python-version": ["3.10"],
          "torch-version": ["2.8.0", "2.9.0", "2.10.0", "nightly"],
          "cuda-version": ["cpu"],
          "full-test": "1"
        }

  # gpu:
  #   if: github.repository == 'pyg-team/pytorch_geometric'
  #   uses: ./.github/workflows/_testing.yml
  #   with:
  #     test-matrix: |
  #       {
  #         "os": [["self-hosted, nvidia"]],
  #         "python-version": ["3.10"],
  #         "torch-version": ["2.8.0"],
  #         "cuda-version": ["cu128"]
  #       }

  status:
    if: always() && github.event_name == 'pull_request'
    needs:
      - pytest
      - pytest-full
    runs-on: ubuntu-latest
    steps:
      - run: |
          if [ "${{ needs.pytest.result }}" = "failure" ] || \
             [ "${{ needs.pytest-full.result }}" = "failure" ] || \
             [ "${{ needs.pytest.result }}" = "cancelled" ] || \
             [ "${{ needs.pytest-full.result }}" = "cancelled" ]; then
            exit 1
          fi


================================================
FILE: .github/workflows/testing_rag.yml
================================================
name: Testing RAG

on:  # yamllint disable-line rule:truthy
  push:
    branches:
      - master
    paths:
      - 'torch_geometric/datasets/web_qsp_dataset.py'
      - 'torch_geometric/llm/**'
      - '.github/workflows/testing_rag.yml'
  pull_request:
    paths:
      - 'torch_geometric/datasets/web_qsp_dataset.py'
      - 'torch_geometric/llm/**'
      - '.github/workflows/testing_rag.yml'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}-${{ startsWith(github.ref, 'refs/pull/') || github.run_number }}  # yamllint disable-line
  # Only cancel intermediate builds if on a PR:
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

jobs:
  rag_pytest:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Setup packages
        uses: ./.github/actions/setup
        with:
          full_install: false

      - name: Install main package
        run: |
          uv pip install -e ".[test,rag]"

      - name: Run tests
        timeout-minutes: 15
        run: |
          # ignore mysterious segfault (139) if tests pass since this does not repro locally
          bash -c 'pytest -m rag --cov --cov-report=xml -v; E=$?; [[ $E == 0 || $E == 139 ]] && exit 0 || exit $E'
        shell: bash
        env:
          TOKENIZERS_PARALLELISM: "false"
          OMP_NUM_THREADS: "1"
          MKL_NUM_THREADS: "1"


================================================
FILE: .gitignore
================================================
__pycache__/
.pytest_cache/
.DS_Store
data/
build/
dist/
alpha/
runs/
wandb/
.cache/
.eggs/
lightning_logs/
outputs/
graphgym/datasets/
graphgym/results/
*.egg-info/
.ipynb_checkpoints
.coverage
.coverage.*
coverage.xml
.vscode
.idea
.venv
*.out
*.pt
*.onnx
examples/**/*.png
examples/**/*.pdf
benchmark/results/
.mypy_cache/
uv.lock

!torch_geometric/data/
!test/data/


================================================
FILE: .pre-commit-config.yaml
================================================
ci:
  # https://pre-commit.ci/#configuration
  autofix_prs: true
  autoupdate_commit_msg: '[pre-commit.ci] pre-commit suggestions'
  autoupdate_schedule: monthly

repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v6.0.0
    hooks:
      - id: no-commit-to-branch
        name: No commits to master
      - id: end-of-file-fixer
        name: End-of-file fixer
      - name: mixed-line-ending
        id: mixed-line-ending
        args: [--fix, lf]
      - id: trailing-whitespace
        name: Remove trailing whitespaces
      - id: check-toml
        name: Check toml
      - id: check-yaml
        name: Check yaml

  - repo: https://github.com/adrienverge/yamllint.git
    rev: v1.38.0
    hooks:
      - id: yamllint
        name: Lint yaml
        args: [-d, '{extends: default, rules: {line-length: disable, document-start: disable, truthy: {level: error}, braces: {max-spaces-inside: 1}}}']

  - repo: https://github.com/asottile/pyupgrade
    rev: v3.21.2
    hooks:
      - id: pyupgrade
        name: Upgrade Python syntax
        args: [--py38-plus]

  - repo: https://github.com/PyCQA/autoflake
    rev: v2.3.3
    hooks:
      - id: autoflake
        name: Remove unused imports and variables
        args: [
          --remove-all-unused-imports,
          --remove-unused-variables,
          --remove-duplicate-keys,
          --ignore-init-module-imports,
          --in-place,
        ]

  - repo: https://github.com/google/yapf
    rev: v0.43.0
    hooks:
      - id: yapf
        name: Format code
        additional_dependencies: [toml]

  - repo: https://github.com/pycqa/isort
    rev: 8.0.1
    hooks:
      - id: isort
        name: Sort imports

  - repo: https://github.com/PyCQA/flake8
    rev: 7.3.0
    hooks:
      - id: flake8
        name: Check PEP8
        additional_dependencies: [Flake8-pyproject]

  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.15.4
    hooks:
      - id: ruff
        name: Ruff formatting
        args: [--fix, --exit-non-zero-on-fix]

  - repo: https://github.com/executablebooks/mdformat
    rev: 1.0.0
    hooks:
      - id: mdformat
        name: Format Markdown
        additional_dependencies:
          - mdformat-gfm
          - mdformat-front-matters
          - mdformat-footnote

  - repo: https://github.com/sphinx-contrib/sphinx-lint
    rev: v1.0.2
    hooks:
      - id: sphinx-lint
        name: Check Sphinx


================================================
FILE: CHANGELOG.md
================================================
# Changelog

All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## [Unreleased] - YYYY-MM-DD

### Added

### Changed

- Dropped support for TorchScript in `GATConv` and `GATv2Conv` for correctness ([#10596](https://github.com/pyg-team/pytorch_geometric/pull/10596))

### Deprecated

- Deprecated support for `torch-spline-conv` in favor of `pyg-lib>=0.6.0` ([#10622](https://github.com/pyg-team/pytorch_geometric/pull/10622))

### Removed

### Fixed

- Fixed `return_attention_weights: bool` being not respected in `GATConv` and `GATv2Conv` ([#10596](https://github.com/pyg-team/pytorch_geometric/pull/10596))
- Fixed download links for politifact and gossipcop datasets of `UPFD` ([#10558](https://github.com/pyg-team/pytorch_geometric/pull/10558))

### Security

## [2.7.0] - 2025-10-14

### Added

- Added llm generated explanations to `TAGDataset` ([#9918](https://github.com/pyg-team/pytorch_geometric/pull/9918))
- Added `torch_geometric.llm` and its examples ([#10436](https://github.com/pyg-team/pytorch_geometric/pull/10436))
- Added support for negative weights in `sparse_cross_entropy` ([#10432](https://github.com/pyg-team/pytorch_geometric/pull/10432))
- Added `connected_components()` method to `Data` and `HeterData` ([#10388](https://github.com/pyg-team/pytorch_geometric/pull/10388))
- Added LPFormer Graph Transformer for Link Prediction ([#9956](https://github.com/pyg-team/pytorch_geometric/pull/9956))
- Added `BidirectionalSampler`, which samples both forwards and backwards on graph edges ([#10126](https://github.com/pyg-team/pytorch_geometric/pull/10126))
- Enable Sampling both forwards and reverse edges on `NeighborSampler` ([#10126](https://github.com/pyg-team/pytorch_geometric/pull/10126))
- Added ability to merge together `SamplerOutput` objects ([#10126](https://github.com/pyg-team/pytorch_geometric/pull/10126))
- Added ability to get global row and col ids from `SamplerOutput` ([#10200](https://github.com/pyg-team/pytorch_geometric/pull/10200))
- Added PyTorch 2.8 support ([#10403](https://github.com/pyg-team/pytorch_geometric/pull/10403))
- Added `Polynormer` model and example ([#9908](https://github.com/pyg-team/pytorch_geometric/pull/9908))
- Added `ProteinMPNN` model and example ([#10289](https://github.com/pyg-team/pytorch_geometric/pull/10289))
- Added the `Teeth3DS` dataset, an extended benchmark for intraoral 3D scan analysis ([#9833](https://github.com/pyg-team/pytorch_geometric/pull/9833))
- Added `torch.device` to `PatchTransformerAggregation` [#10342](https://github.com/pyg-team/pytorch_geometric/pull/10342)
- Added `torch.device` to normalization layers [#10341](https://github.com/pyg-team/pytorch_geometric/pull/10341)
- Added `total_influence` for quantifying long-range dependency ([#10263](https://github.com/pyg-team/pytorch_geometric/pull/10263))
- Added `MedShapeNet` Dataset ([#9823](https://github.com/pyg-team/pytorch_geometric/pull/9823))
- Added RelBench example ([#10230](https://github.com/pyg-team/pytorch_geometric/pull/10230))
- Added `CityNetwork` dataset ([#10115](https://github.com/pyg-team/pytorch_geometric/pull/10115))
- Added `visualize_graph` to HeteroExplanation ([#10207](https://github.com/pyg-team/pytorch_geometric/pull/10207))
- Added PyTorch 2.6 support ([#10170](https://github.com/pyg-team/pytorch_geometric/pull/10170))
- Added support for heterogenous graphs in `AttentionExplainer` ([#10169](https://github.com/pyg-team/pytorch_geometric/pull/10169))
- Added support for heterogenous graphs in `PGExplainer` ([#10168](https://github.com/pyg-team/pytorch_geometric/pull/10168))
- Added support for heterogenous graphs in `GNNExplainer` ([#10158](https://github.com/pyg-team/pytorch_geometric/pull/10158))
- Added Graph Positional and Structural Encoder (GPSE) and example ([#9018](https://github.com/pyg-team/pytorch_geometric/pull/9018)) ([#10118](https://github.com/pyg-team/pytorch_geometric/pull/10118))
- Added attract-repel link prediction example ([#10107](https://github.com/pyg-team/pytorch_geometric/pull/10107))
- Added `ARLinkPredictor` for implementing Attract-Repel embeddings for link prediction ([#10105](https://github.com/pyg-team/pytorch_geometric/pull/10105))
- Improving documentation for [cuGraph](https://github.com/rapidsai/cugraph) ([#10083](https://github.com/pyg-team/pytorch_geometric/pull/10083))
- Added `HashTensor` ([#10072](https://github.com/pyg-team/pytorch_geometric/pull/10072))
- Added `SGFormer` model and example ([#9904](https://github.com/pyg-team/pytorch_geometric/pull/9904))
- Added `AveragePopularity` metric for link prediction ([#10022](https://github.com/pyg-team/pytorch_geometric/pull/10022))
- Added `Personalization` metric for link prediction ([#10015](https://github.com/pyg-team/pytorch_geometric/pull/10015))
- Added `HitRatio` metric for link prediction ([#10013](https://github.com/pyg-team/pytorch_geometric/pull/10013))
- Added Data Splitting Tutorial ([#8366](https://github.com/pyg-team/pytorch_geometric/pull/8366))
- Added `Diversity` metric for link prediction ([#10009](https://github.com/pyg-team/pytorch_geometric/pull/10009))
- Added `Coverage` metric for link prediction ([#10006](https://github.com/pyg-team/pytorch_geometric/pull/10006))
- Added Graph Transformer Tutorial ([#8144](https://github.com/pyg-team/pytorch_geometric/pull/8144))
- Consolidate Cugraph examples into `ogbn_train_cugraph.py` and `ogbn_train_cugraph_multigpu.py` for `ogbn-arxiv`, `ogbn-products` and `ogbn-papers100M` ([#9953](https://github.com/pyg-team/pytorch_geometric/pull/9953))
- Added `InstructMol` dataset ([#9975](https://github.com/pyg-team/pytorch_geometric/pull/9975))
- Added support for weighted `LinkPredRecall` metric ([#9947](https://github.com/pyg-team/pytorch_geometric/pull/9947))
- Added support for weighted `LinkPredNDCG` metric ([#9945](https://github.com/pyg-team/pytorch_geometric/pull/9945))
- Added `LinkPredMetricCollection` ([#9941](https://github.com/pyg-team/pytorch_geometric/pull/9941))
- Added various `GRetriever` architecture benchmarking examples ([#9666](https://github.com/pyg-team/pytorch_geometric/pull/9666))
- Added `profiler.nvtxit` with some examples ([#9666](https://github.com/pyg-team/pytorch_geometric/pull/9666))
- Added `loader.RagQueryLoader` with Remote Backend Example ([#9666](https://github.com/pyg-team/pytorch_geometric/pull/9666))
- Added `data.LargeGraphIndexer` ([#9666](https://github.com/pyg-team/pytorch_geometric/pull/9666))
- Added `GIT-Mol` ([#9730](https://github.com/pyg-team/pytorch_geometric/pull/9730))
- Added comment in `g_retriever.py` pointing to `Neo4j` Graph DB integration demo ([#9748](https://github.com/pyg-team/pytorch_geometric/pull/9797))
- Added `MoleculeGPT` example ([#9710](https://github.com/pyg-team/pytorch_geometric/pull/9710))
- Added `nn.models.GLEM` ([#9662](https://github.com/pyg-team/pytorch_geometric/pull/9662))
- Added `TAGDataset` ([#9662](https://github.com/pyg-team/pytorch_geometric/pull/9662))
- Added support for fast `Delaunay()` triangulation via the `torch_delaunay` package ([#9748](https://github.com/pyg-team/pytorch_geometric/pull/9748))
- Added PyTorch 2.5 support ([#9779](https://github.com/pyg-team/pytorch_geometric/pull/9779), [#9779](https://github.com/pyg-team/pytorch_geometric/pull/9780))
- Support 3D tetrahedral mesh elements of shape `[4, num_faces]` in the `FaceToEdge` transformation ([#9776](https://github.com/pyg-team/pytorch_geometric/pull/9776))
- Added the `use_pcst` option to `WebQSPDataset` ([#9722](https://github.com/pyg-team/pytorch_geometric/pull/9722))
- Allowed users to pass `edge_weight` to `GraphUNet` models ([#9737](https://github.com/pyg-team/pytorch_geometric/pull/9737))
- Consolidated `examples/ogbn_{papers_100m,products_gat,products_sage}.py` into `examples/ogbn_train.py` ([#9467](https://github.com/pyg-team/pytorch_geometric/pull/9467))
- Add ComplexWebQuestions (CWQ) dataset ([#9950](https://github.com/pyg-team/pytorch_geometric/pull/9950))

### Changed

- Added `edge_attr` in `CuGraphGATConv` ([#10383](https://github.com/pyg-team/pytorch_geometric/pull/10383))
- Adapt `dgcnn_classification` example to work with `ModelNet` and `MedShapeNet` Datasets ([#9823](https://github.com/pyg-team/pytorch_geometric/pull/9823))
- Chained exceptions explicitly instead of implicitly ([#10242](https://github.com/pyg-team/pytorch_geometric/pull/10242))
- Updated cuGraph examples to use buffered sampling which keeps data in memory and is significantly faster than the deprecated buffered sampling ([#10079](https://github.com/pyg-team/pytorch_geometric/pull/10079))
- Updated Dockerfile to use latest from NVIDIA ([#9794](https://github.com/pyg-team/pytorch_geometric/pull/9794))
- Dropped Python 3.8 support ([#9696](https://github.com/pyg-team/pytorch_geometric/pull/9606))
- Added a check that confirms that custom edge types of `NumNeighbors` actually exist in the graph ([#9807](https://github.com/pyg-team/pytorch_geometric/pull/9807))
- Automatic num_params in LLM + update `GRetriever` default llm ([#9938](https://github.com/pyg-team/pytorch_geometric/pull/9938))
- Updated calls to NumPy's deprecated `np.in1d` to `np.isin` ([#10283](https://github.com/pyg-team/pytorch_geometric/pull/10283))

### Deprecated

- Deprecated `torch_geometric.distributed` ([#10411](https://github.com/pyg-team/pytorch_geometric/pull/10411))

### Fixed

- Fixed `ogbn_train_cugraph` example for distributed cuGraph ([#10439](https://github.com/pyg-team/pytorch_geometric/pull/10439))
- Added `safe_onnx_export` function with workarounds for `onnx_ir.serde.SerdeError` issues in ONNX export ([#10422](https://github.com/pyg-team/pytorch_geometric/pull/10422))
- Fixed importing PyTorch Lightning in `torch_geometric.graphgym` and `torch_geometric.data.lightning` when using `lightning` instead of `pytorch-lightning` ([#10404](https://github.com/pyg-team/pytorch_geometric/pull/10404), [#10417](https://github.com/pyg-team/pytorch_geometric/pull/10417)))
- Fixed `detach()` warnings in example scripts involving tensor conversions ([#10357](https://github.com/pyg-team/pytorch_geometric/pull/10357))
- Fixed non-tuple indexing to resolve PyTorch deprecation warning ([#10389](https://github.com/pyg-team/pytorch_geometric/pull/10389))
- Fixed conversion to/from `cuGraph` graph objects by ensuring `cudf` column names are correctly specified ([#10343](https://github.com/pyg-team/pytorch_geometric/pull/10343))
- Fixed `_recursive_config()` for `torch.nn.ModuleList` and `torch.nn.ModuleDict` ([#10124](https://github.com/pyg-team/pytorch_geometric/pull/10124), [#10129](https://github.com/pyg-team/pytorch_geometric/pull/10129))
- Fixed the `k_hop_subgraph()` method for directed graphs ([#9756](https://github.com/pyg-team/pytorch_geometric/pull/9756))
- Fixed `utils.group_cat` concatenating dimension ([#9766](https://github.com/pyg-team/pytorch_geometric/pull/9766))
- Fixed `WebQSDataset.process` raising exceptions ([#9665](https://github.com/pyg-team/pytorch_geometric/pull/9665))
- Fixed `is_node_attr()` and `is_edge_attr()` errors when `cat_dim` is a tuple ([#9895](https://github.com/pyg-team/pytorch_geometric/issues/9895))
- Avoid GRetriever instantiation when num_gnn_layers == 0 ([#10156](https://github.com/pyg-team/pytorch_geometric/pull/10156))

### Removed

- Removed `proxies` and `resume_download` arguments from `PyGModelHubMixin` ([#10521](https://github.com/pyg-team/pytorch_geometric/pull/10521)
- Dropped support for Python 3.9 ([#10461](https://github.com/pyg-team/pytorch_geometric/pull/10461))
- Dropped support for PyTorch 1.13 - 2.5 ([#00000](https://github.com/pyg-team/pytorch_geometric/pull/00000))
- Dropped support for PyTorch 1.12 ([#10248](https://github.com/pyg-team/pytorch_geometric/pull/10248))
- Dropped support for PyTorch 1.11 ([#10247](https://github.com/pyg-team/pytorch_geometric/pull/10247))

## [2.6.0] - 2024-09-13

### Added

- Added the `WebQSPDataset` dataset ([#9481](https://github.com/pyg-team/pytorch_geometric/pull/9481))
- Added the `GRetriever` model and an example ([#9480](https://github.com/pyg-team/pytorch_geometric/pull/9480), [#9167](https://github.com/pyg-team/pytorch_geometric/pull/9167))
- Added the `ClusterPooling` layer ([#9627](https://github.com/pyg-team/pytorch_geometric/pull/9627))
- Added the `LinkPredMRR` metric ([#9632](https://github.com/pyg-team/pytorch_geometric/pull/9632))
- Added PyTorch 2.4 support ([#9594](https://github.com/pyg-team/pytorch_geometric/pull/9594))
- Added `utils.normalize_edge_index` for symmetric/asymmetric normalization of graph edges ([#9554](https://github.com/pyg-team/pytorch_geometric/pull/9554))
- Added the `RemoveSelfLoops` transformation ([#9562](https://github.com/pyg-team/pytorch_geometric/pull/9562))
- Added ONNX export for `scatter` with min/max reductions ([#9587](https://github.com/pyg-team/pytorch_geometric/pull/9587))
- Added a `residual` option in `GATConv` and `GATv2Conv` ([#9515](https://github.com/pyg-team/pytorch_geometric/pull/9515))
- Added the `PatchTransformerAggregation` layer ([#9487](https://github.com/pyg-team/pytorch_geometric/pull/9487))
- Added the `nn.nlp.LLM` model ([#9462](https://github.com/pyg-team/pytorch_geometric/pull/9462))
- Added an example of training GNNs for a graph-level regression task ([#9070](https://github.com/pyg-team/pytorch_geometric/pull/9070))
- Added `utils.from_rdmol`/`utils.to_rdmol` functionality ([#9452](https://github.com/pyg-team/pytorch_geometric/pull/9452))
- Added the `OPFDataset` ([#9379](https://github.com/pyg-team/pytorch_geometric/pull/9379))
- Added the heterogeneous `HeteroJumpingKnowledge` module ([#9380](https://github.com/pyg-team/pytorch_geometric/pull/9380))
- Started work on GNN+LLM package ([#9350](https://github.com/pyg-team/pytorch_geometric/pull/9350))
- Added support for negative sampling in `LinkLoader` acccording to source and destination node weights ([#9316](https://github.com/pyg-team/pytorch_geometric/pull/9316))
- Added support for `EdgeIndex.unbind` ([#9298](https://github.com/pyg-team/pytorch_geometric/pull/9298))
- Integrate `torch_geometric.Index` into `torch_geometric.EdgeIndex` ([#9296](https://github.com/pyg-team/pytorch_geometric/pull/9296))
- Support `EdgeIndex.sparse_narrow` for non-sorted edge indices ([#9291](https://github.com/pyg-team/pytorch_geometric/pull/9291))
- Added `torch_geometric.Index` ([#9276](https://github.com/pyg-team/pytorch_geometric/pull/9276), [#9277](https://github.com/pyg-team/pytorch_geometric/pull/9277), [#9278](https://github.com/pyg-team/pytorch_geometric/pull/9278), [#9279](https://github.com/pyg-team/pytorch_geometric/pull/9279), [#9280](https://github.com/pyg-team/pytorch_geometric/pull/9280), [#9281](https://github.com/pyg-team/pytorch_geometric/pull/9281), [#9284](https://github.com/pyg-team/pytorch_geometric/pull/9284), [#9285](https://github.com/pyg-team/pytorch_geometric/pull/9285), [#9286](https://github.com/pyg-team/pytorch_geometric/pull/9286), [#9287](https://github.com/pyg-team/pytorch_geometric/pull/9287), [#9288](https://github.com/pyg-team/pytorch_geometric/pull/9288), [#9289](https://github.com/pyg-team/pytorch_geometric/pull/9289), [#9297](https://github.com/pyg-team/pytorch_geometric/pull/9297))
- Added support for PyTorch 2.3 ([#9240](https://github.com/pyg-team/pytorch_geometric/pull/9240))
- Added support for `EdgeIndex` in `message_and_aggregate` ([#9131](https://github.com/pyg-team/pytorch_geometric/pull/9131))
- Added `CornellTemporalHyperGraphDataset` ([#9090](https://github.com/pyg-team/pytorch_geometric/pull/9090))
- Added support for cuGraph data loading and `GAT` in single node Papers100m examples ([#8173](https://github.com/pyg-team/pytorch_geometric/pull/8173))
- Added the `VariancePreservingAggregation` (VPA) ([#9075](https://github.com/pyg-team/pytorch_geometric/pull/9075))
- Added option to pass custom` from_smiles` functionality to `PCQM4Mv2` and `MoleculeNet` ([#9073](https://github.com/pyg-team/pytorch_geometric/pull/9073))
- Added `group_cat` functionality ([#9029](https://github.com/pyg-team/pytorch_geometric/pull/9029))
- Added support for `EdgeIndex` in `spmm` ([#9026](https://github.com/pyg-team/pytorch_geometric/pull/9026))
- Added option to pre-allocate memory in GPU-based `ApproxKNN` ([#9046](https://github.com/pyg-team/pytorch_geometric/pull/9046))
- Added support for `EdgeIndex` in `MessagePassing` ([#9007](https://github.com/pyg-team/pytorch_geometric/pull/9007))
- Added support for `torch.compile` in combination with `EdgeIndex` ([#9007](https://github.com/pyg-team/pytorch_geometric/pull/9007))
- Added a `ogbn-mag240m` example ([#8249](https://github.com/pyg-team/pytorch_geometric/pull/8249))
- Added `EdgeIndex.sparse_resize_` functionality ([#8983](https://github.com/pyg-team/pytorch_geometric/pull/8983))
- Added approximate `faiss`-based KNN-search ([#8952](https://github.com/pyg-team/pytorch_geometric/pull/8952))
- Added documentation on environment setup on XPU device ([#9407](https://github.com/pyg-team/pytorch_geometric/pull/9407))

### Changed

- Add args to Taobao multi-GPU example and move item-item compute to dataset ([#9550](https://github.com/pyg-team/pytorch_geometric/pull/9550))
- Use `torch.load(weights_only=True)` by default ([#9618](https://github.com/pyg-team/pytorch_geometric/pull/9618))
- Adapt `cugraph` examples to its new API ([#9541](https://github.com/pyg-team/pytorch_geometric/pull/9541))
- Allow optional but untyped tensors in `MessagePassing` ([#9494](https://github.com/pyg-team/pytorch_geometric/pull/9494))
- Added support for modifying `filename` of the stored partitioned file in `ClusterLoader` ([#9448](https://github.com/pyg-team/pytorch_geometric/pull/9448))
- Support other than two-dimensional inputs in `AttentionalAggregation` ([#9433](https://github.com/pyg-team/pytorch_geometric/pull/9433))
- Improved model performance of the `examples/ogbn_papers_100m.py` script ([#9386](https://github.com/pyg-team/pytorch_geometric/pull/9386), [#9445](https://github.com/pyg-team/pytorch_geometric/pull/9445))
- Added the `fmt` arg to `Dataset.get_summary` ([#9408](https://github.com/pyg-team/pytorch_geometric/pull/9408))
- Skipped zero atom molecules in `MoleculeNet` ([#9318](https://github.com/pyg-team/pytorch_geometric/pull/9318))
- Ensure proper parallelism in `OnDiskDataset` for multi-threaded `get` calls ([#9140](https://github.com/pyg-team/pytorch_geometric/pull/9140))
- Allow `None` outputs in `FeatureStore.get_tensor()` - `KeyError` should now be raised based on the implementation in `FeatureStore._get_tensor()` ([#9102](https://github.com/pyg-team/pytorch_geometric/pull/9102))
- Allow mini-batching of uncoalesced sparse matrices ([#9099](https://github.com/pyg-team/pytorch_geometric/pull/9099))
- Improvements to multi-node `ogbn-papers100m` default hyperparameters and adding evaluation on all ranks ([#8823](https://github.com/pyg-team/pytorch_geometric/pull/8823))
- Changed distributed sampler and loader tests to correctly report failures in subprocesses to `pytest` ([#8978](https://github.com/pyg-team/pytorch_geometric/pull/8978))
- Remove filtering of node/edge types in `trim_to_layer` functionality ([#9021](https://github.com/pyg-team/pytorch_geometric/pull/9021))
- Default to `scatter` operations in `MessagePassing` in case `torch.use_deterministic_algorithms` is not set ([#9009](https://github.com/pyg-team/pytorch_geometric/pull/9009))
- Made `MessagePassing` interface thread-safe ([#9001](https://github.com/pyg-team/pytorch_geometric/pull/9001))
- Breaking Change: Added support for `EdgeIndex` in `cugraph` GNN layers ([#8938](https://github.com/pyg-team/pytorch_geometric/pull/8937))
- Added the `dim` arg to `torch.cross` calls ([#8918](https://github.com/pyg-team/pytorch_geometric/pull/8918))
- Added XPU support to basic GNN examples ([#9421](https://github.com/pyg-team/pytorch_geometric/pull/9421), [#9439](https://github.com/pyg-team/pytorch_geometric/pull/9439))

### Deprecated

### Fixed

- Fixed `VirtualNode` transform for empty edge indices ([#9605](https://github.com/pyg-team/pytorch_geometric/pull/9605))
- Fixed an issue where import order in the multi-GPU `cugraph` example could cause an `rmm` error ([#9577](https://github.com/pyg-team/pytorch_geometric/pull/9577))
- Made the output of the single-GPU `cugraph` example more readable ([#9577](https://github.com/pyg-team/pytorch_geometric/pull/9577))
- Fixed `load_state_dict` behavior with lazy parameters in `HeteroDictLinear` ([#9493](https://github.com/pyg-team/pytorch_geometric/pull/9493))
- `Sequential` can now be properly pickled ([#9369](https://github.com/pyg-team/pytorch_geometric/pull/9369))
- Fixed `pickle.load` for jittable `MessagePassing` modules ([#9368](https://github.com/pyg-team/pytorch_geometric/pull/9368))
- Fixed batching of sparse tensors saved via `data.edge_index` ([#9317](https://github.com/pyg-team/pytorch_geometric/pull/9317))
- Fixed arbitrary keyword ordering in `MessagePassing.propgate` ([#9245](https://github.com/pyg-team/pytorch_geometric/pull/9245))
- Fixed node mapping bug in `RCDD` dataset ([#9234](https://github.com/pyg-team/pytorch_geometric/pull/9234))
- Fixed incorrect treatment of `edge_label` and `edge_label_index` in `ToSparseTensor` transform ([#9199](https://github.com/pyg-team/pytorch_geometric/pull/9199))
- Fixed `EgoData` processing in `SnapDataset` in case filenames are unsorted ([#9195](https://github.com/pyg-team/pytorch_geometric/pull/9195))
- Fixed empty graph and isolated node handling in `to_dgl` ([#9188](https://github.com/pyg-team/pytorch_geometric/pull/9188))
- Fixed bug in `to_scipy_sparse_matrix` when cuda is set as default torch device ([#9146](https://github.com/pyg-team/pytorch_geometric/pull/9146))
- Fixed `MetaPath2Vec` in case the last node is isolated ([#9145](https://github.com/pyg-team/pytorch_geometric/pull/9145))
- Ensure backward compatibility in `MessagePassing` via `torch.load` ([#9105](https://github.com/pyg-team/pytorch_geometric/pull/9105))
- Prevent model compilation on custom `propagate` functions ([#9079](https://github.com/pyg-team/pytorch_geometric/pull/9079))
- Ignore `self.propagate` appearances in comments when parsing `MessagePassing` implementation ([#9044](https://github.com/pyg-team/pytorch_geometric/pull/9044))
- Fixed `OSError` on read-only file systems within `MessagePassing` ([#9032](https://github.com/pyg-team/pytorch_geometric/pull/9032))
- Fixed metaclass conflict in `Dataset` ([#8999](https://github.com/pyg-team/pytorch_geometric/pull/8999))
- Fixed import errors on `MessagePassing` modules with nested inheritance ([#8973](https://github.com/pyg-team/pytorch_geometric/pull/8973))
- Fixed bug in multi XPU training ([#9456](https://github.com/pyg-team/pytorch_geometric/pull/9456))
- Fixed TorchScript compilation error for `MessagePassing._check_input` on older torch versions ([#9564](https://github.com/pyg-team/pytorch_geometric/pull/9564))

### Removed

## [2.5.0] - 2024-02-16

### Added

- Added an example for recommender systems, including k-NN search and retrieval metrics ([#8546](https://github.com/pyg-team/pytorch_geometric/pull/8546))
- Added multi-GPU evaluation in distributed sampling example ([#8880](https://github.com/pyg-team/pytorch_geometric/pull/8880))
- Added end-to-end example for distributed CPU training ([#8713](https://github.com/pyg-team/pytorch_geometric/pull/8713))
- Added PyTorch 2.2 support ([#8857](https://github.com/pyg-team/pyg-lib/pull/8857))
- Added fallback code path for `segment` in case `torch-scatter` is not installed ([#8852](https://github.com/pyg-team/pytorch_geometric/pull/8852))
- Added support for custom node labels in `visualize_graph()` ([#8816](https://github.com/pyg-team/pytorch_geometric/pull/8816))
- Added support for graph partitioning for temporal data in `torch_geometric.distributed` ([#8718](https://github.com/pyg-team/pytorch_geometric/pull/8718), [#8815](https://github.com/pyg-team/pytorch_geometric/pull/8815), [#8874](https://github.com/pyg-team/pytorch_geometric/pull/8874))
- Added `TreeGraph` and `GridMotif` generators ([#8736](https://github.com/pyg-team/pytorch_geometric/pull/8736))
- Added two examples for edge-level temporal sampling on a heterogenous graph, with and without distributed training ([#8383](https://github.com/pyg-team/pytorch_geometric/pull/8383), [#8820](https://github.com/pyg-team/pytorch_geometric/pull/8820))
- Added the `num_graphs` option to the `StochasticBlockModelDataset` ([#8648](https://github.com/pyg-team/pytorch_geometric/pull/8648))
- Added noise scheduler utility for diffusion based graph generative models ([#8347](https://github.com/pyg-team/pytorch_geometric/pull/8347))
- Added the equivariant `ViSNet` model ([#8287](https://github.com/pyg-team/pytorch_geometric/pull/8287))
- Added temporal-related capabilities to `Data` ([#8454](https://github.com/pyg-team/pytorch_geometric/pull/8454))
- Added support for returning multi graphs in `to_networkx` ([#8575](https://github.com/pyg-team/pytorch_geometric/pull/8575))
- Added support for XPU device in `profileit` decorator ([#8532](https://github.com/pyg-team/pytorch_geometric/pull/8532))
- Added `KNNIndex` exclusion logic ([#8573](https://github.com/pyg-team/pytorch_geometric/pull/8573))
- Added warning when calling `dataset.num_classes` on regression problems ([#8550](https://github.com/pyg-team/pytorch_geometric/pull/8550))
- Added relabel node functionality to `dropout_node` ([#8524](https://github.com/pyg-team/pytorch_geometric/pull/8524))
- Added support for type checking via `mypy` ([#8254](https://github.com/pyg-team/pytorch_geometric/pull/8254))
- Added support for link-prediction retrieval metrics ([#8499](https://github.com/pyg-team/pytorch_geometric/pull/8499), [#8326](https://github.com/pyg-team/pytorch_geometric/pull/8326), [#8566](https://github.com/pyg-team/pytorch_geometric/pull/8566), [#8647](https://github.com/pyg-team/pytorch_geometric/pull/8647))
- Added METIS partitioning with CSC/CSR format selection in `ClusterData` ([#8438](https://github.com/pyg-team/pytorch_geometric/pull/8438))
- Added `is_torch_instance` to check against the original class of compiled models ([#8461](https://github.com/pyg-team/pytorch_geometric/pull/8461))
- Added dense computation for `AddRandomWalkPE` ([#8431](https://github.com/pyg-team/pytorch_geometric/pull/8431))
- Added a tutorial for point cloud processing ([#8015](https://github.com/pyg-team/pytorch_geometric/pull/8015))
- Added `fsspec` as file system backend ([#8379](https://github.com/pyg-team/pytorch_geometric/pull/8379), [#8426](https://github.com/pyg-team/pytorch_geometric/pull/8426), [#8434](https://github.com/pyg-team/pytorch_geometric/pull/8434), [#8474](https://github.com/pyg-team/pytorch_geometric/pull/8474))
- Added support for floating-point average degree numbers in `FakeDataset` and `FakeHeteroDataset` ([#8404](https://github.com/pyg-team/pytorch_geometric/pull/8404))
- Added support for device conversions of `InMemoryDataset` ([#8402](https://github.com/pyg-team/pytorch_geometric/pull/8402))
- Added support for edge-level temporal sampling in `NeighborLoader` and `LinkNeighborLoader` ([#8372](https://github.com/pyg-team/pytorch_geometric/pull/8372), [#8428](https://github.com/pyg-team/pytorch_geometric/pull/8428))
- Added support for `torch.compile` in `ModuleDict` and `ParameterDict` ([#8363](https://github.com/pyg-team/pytorch_geometric/pull/8363))
- Added `force_reload` option to `Dataset` and `InMemoryDataset` to reload datasets ([#8352](https://github.com/pyg-team/pytorch_geometric/pull/8352), [#8357](https://github.com/pyg-team/pytorch_geometric/pull/8357), [#8436](https://github.com/pyg-team/pytorch_geometric/pull/8436))
- Added support for `torch.compile` in `MultiAggregation` ([#8345](https://github.com/pyg-team/pytorch_geometric/pull/8345))
- Added support for `torch.compile` in `HeteroConv` ([#8344](https://github.com/pyg-team/pytorch_geometric/pull/8344))
- Added support for weighted `sparse_cross_entropy` ([#8340](https://github.com/pyg-team/pytorch_geometric/pull/8340))
- Added a multi GPU training benchmarks for CUDA and XPU devices ([#8288](https://github.com/pyg-team/pytorch_geometric/pull/8288), [#8382](https://github.com/pyg-team/pytorch_geometric/pull/8382), [#8386](https://github.com/pyg-team/pytorch_geometric/pull/8386))
- Support MRR computation in `KGEModel.test()` ([#8298](https://github.com/pyg-team/pytorch_geometric/pull/8298))
- Added an example for model parallelism (`examples/multi_gpu/model_parallel.py`) ([#8309](https://github.com/pyg-team/pytorch_geometric/pull/8309))
- Added a tutorial for multi-node multi-GPU training with pure PyTorch ([#8071](https://github.com/pyg-team/pytorch_geometric/pull/8071))
- Added a multinode-multigpu example on `ogbn-papers100M` ([#8070](https://github.com/pyg-team/pytorch_geometric/pull/8070))
- Added support for `to_hetero_with_bases` on static graphs ([#8247](https://github.com/pyg-team/pytorch_geometric/pull/8247))
- Added the `RCDD` dataset ([#8196](https://github.com/pyg-team/pytorch_geometric/pull/8196))
- Added distributed `GAT + ogbn-products` example targeting XPU device ([#8032](https://github.com/pyg-team/pytorch_geometric/pull/8032))
- Added the option to skip explanations of certain message passing layers via `conv.explain = False` ([#8216](https://github.com/pyg-team/pytorch_geometric/pull/8216))

### Changed

- Changed the default inference mode for `use_segment_matmul` based on benchmarking (from a heuristic-based version) ([#8615](https://github.com/pyg-team/pytorch_geometric/pull/8615))
- Return an empty tensor from `utils.group_argsort` if its input tensor is empty ([#8752](https://github.com/pyg-team/pytorch_geometric/pull/8752))
- GNN layers are now jittable by default ([#8745](https://github.com/pyg-team/pytorch_geometric/pull/8745))
- Sparse node features in `NELL` and `AttributedGraphDataset` are now represented as `torch.sparse_csr_tensor` instead of `torch_sparse.SparseTensor` ([#8679](https://github.com/pyg-team/pytorch_geometric/pull/8679))
- Accelerated mini-batching of `torch.sparse` tensors ([#8670](https://github.com/pyg-team/pytorch_geometric/pull/8670))
- Fixed RPC timeout due to worker closing in `DistLoader` with `atexit` not executed correctly in `worker_init_fn` ([#8605](https://github.com/pyg-team/pytorch_geometric/pull/8605))
- `ExplainerDataset` will now contain node labels for any motif generator ([#8519](https://github.com/pyg-team/pytorch_geometric/pull/8519))
- Made `utils.softmax` faster via `softmax_csr` ([#8399](https://github.com/pyg-team/pytorch_geometric/pull/8399))
- Made `utils.mask.mask_select` faster ([#8369](https://github.com/pyg-team/pytorch_geometric/pull/8369))
- Update `DistNeighborSampler` ([#8209](https://github.com/pyg-team/pytorch_geometric/pull/8209), [#8367](https://github.com/pyg-team/pytorch_geometric/pull/8367), [#8375](https://github.com/pyg-team/pytorch_geometric/pull/8375), ([#8624](https://github.com/pyg-team/pytorch_geometric/pull/8624), [#8722](https://github.com/pyg-team/pytorch_geometric/pull/8722))
- Update `GraphStore` and `FeatureStore` to support distributed training ([#8083](https://github.com/pyg-team/pytorch_geometric/pull/8083))
- Disallow the usage of `add_self_loops=True` in `GCNConv(normalize=False)` ([#8210](https://github.com/pyg-team/pytorch_geometric/pull/8210))
- Disable device asserts during `torch_geometric.compile` ([#8220](https://github.com/pyg-team/pytorch_geometric/pull/8220))

### Deprecated

- Deprecated `MessagePassing.jittable` ([#8781](https://github.com/pyg-team/pytorch_geometric/pull/8781))
- Deprecated the usage of `torch_geometric.compile`; Use `torch.compile` instead ([#8780](https://github.com/pyg-team/pytorch_geometric/pull/8780))
- Deprecated the `typing` argument in `MessagePassing.jittable()` ([#8731](https://github.com/pyg-team/pytorch_geometric/pull/8731))
- Deprecated `torch_geometric.data.makedirs` in favor of `os.makedirs` ([#8421](https://github.com/pyg-team/pytorch_geometric/pull/8421))
- Deprecated `DataParallel` in favor of `DistributedDataParallel` ([#8250](https://github.com/pyg-team/pytorch_geometric/pull/8250))

### Fixed

- Fixed dummy value creation of boolean tensors in `to_homogeneous()` ([#8858](https://github.com/pyg-team/pytorch_geometric/pull/8858))
- Fixed Google Drive download issues ([#8804](https://github.com/pyg-team/pytorch_geometric/pull/8804))
- Fixed a bug in which `InMemoryDataset` did not reconstruct the correct data class when a `pre_transform` has modified it ([#8692](https://github.com/pyg-team/pytorch_geometric/pull/8692))
- Fixed a bug in which transforms were not applied for `OnDiskDataset` ([#8663](https://github.com/pyg-team/pytorch_geometric/pull/8663))
- Fixed mini-batch computation in `DMoNPooing` loss function ([#8285](https://github.com/pyg-team/pytorch_geometric/pull/8285))
- Fixed `NaN` handling in `SQLDatabase` ([#8479](https://github.com/pyg-team/pytorch_geometric/pull/8479))
- Fixed `CaptumExplainer` in case no `index` is passed ([#8440](https://github.com/pyg-team/pytorch_geometric/pull/8440))
- Fixed `edge_index` construction in the `UPFD` dataset ([#8413](https://github.com/pyg-team/pytorch_geometric/pull/8413))
- Fixed TorchScript support in `AttentionalAggregation` and `DeepSetsAggregation` ([#8406](https://github.com/pyg-team/pytorch_geometric/pull/8406))
- Fixed `GraphMaskExplainer` for GNNs with more than two layers ([#8401](https://github.com/pyg-team/pytorch_geometric/pull/8401))
- Breaking Change: Properly initialize modules in `GATConv` depending on whether the input is bipartite or non-bipartite ([#8397](https://github.com/pyg-team/pytorch_geometric/pull/8397))
- Fixed `input_id` computation in `NeighborLoader` in case a `mask` is given ([#8312](https://github.com/pyg-team/pytorch_geometric/pull/8312))
- Respect current device when deep-copying `Linear` layers ([#8311](https://github.com/pyg-team/pytorch_geometric/pull/8311))
- Fixed `Data.subgraph()`/`HeteroData.subgraph()` in case `edge_index` is not defined ([#8277](https://github.com/pyg-team/pytorch_geometric/pull/8277))
- Fixed empty edge handling in `MetaPath2Vec` ([#8248](https://github.com/pyg-team/pytorch_geometric/pull/8248))
- Fixed `AttentionExplainer` usage within `AttentiveFP` ([#8244](https://github.com/pyg-team/pytorch_geometric/pull/8244))
- Fixed `load_from_state_dict` in lazy `Linear` modules ([#8242](https://github.com/pyg-team/pytorch_geometric/pull/8242))
- Fixed pre-trained `DimeNet++` performance on `QM9` ([#8239](https://github.com/pyg-team/pytorch_geometric/pull/8239))
- Fixed `GNNExplainer` usage within `AttentiveFP` ([#8216](https://github.com/pyg-team/pytorch_geometric/pull/8216))
- Fixed `to_networkx(to_undirected=True)` in case the input graph is not undirected ([#8204](https://github.com/pyg-team/pytorch_geometric/pull/8204))
- Fixed sparse-sparse matrix multiplication support on Windows in `TwoHop` and `AddRandomWalkPE` transformations ([#8197](https://github.com/pyg-team/pytorch_geometric/pull/8197), [#8225](https://github.com/pyg-team/pytorch_geometric/pull/8225))
- Fixed batching of `HeteroData` converted using `ToSparseTensor()` when `torch_sparse` is not installed ([#8356](https://github.com/pyg-team/pytorch_geometric/pull/8356))

### Removed

- Removed disabling of extension packages during `torch_geometric.compile` ([#8698](https://github.com/pyg-team/pytorch_geometric/pull/8698))

## [2.4.0] - 2023-10-12

### Added

- Add the `ogc` method as example ([#8168](https://github.com/pyg-team/pytorch_geometric/pull/8168))
- Added a tutorial on `NeighborLoader` ([#7931](https://github.com/pyg-team/pytorch_geometric/pull/7931))
- Added the option to override usage of `segment_matmul`/`grouped_matmul` via the `torch_geometric.backend.use_segment_matmul` flag ([#8148](https://github.com/pyg-team/pytorch_geometric/pull/8148))
- Added support for PyTorch 2.1.0 ([#8134](https://github.com/pyg-team/pytorch_geometric/pull/8134))
- Added the `NeuroGraphDataset` benchmark collection ([#8122](https://github.com/pyg-team/pytorch_geometric/pull/8122))
- Added support for a node-level `mask` tensor in `dense_to_sparse` ([#8117](https://github.com/pyg-team/pytorch_geometric/pull/8117))
- Added the `to_on_disk_dataset()` method to convert `InMemoryDataset` instances to `OnDiskDataset` instances ([#8116](https://github.com/pyg-team/pytorch_geometric/pull/8116))
- Added `torch-frame` support ([#8110](https://github.com/pyg-team/pytorch_geometric/pull/8110), [#8118](https://github.com/pyg-team/pytorch_geometric/pull/8118), [#8151](https://github.com/pyg-team/pytorch_geometric/pull/8151), [#8152](https://github.com/pyg-team/pytorch_geometric/pull/8152))
- Added the `DistLoader` base class ([#8079](https://github.com/pyg-team/pytorch_geometric/pull/8079))
- Added `HyperGraphData` to support hypergraphs ([#7611](https://github.com/pyg-team/pytorch_geometric/pull/7611))
- Added the `PCQM4Mv2` dataset as a reference implementation for `OnDiskDataset` ([#8102](https://github.com/pyg-team/pytorch_geometric/pull/8102))
- Added `module_headers` property to `nn.Sequential` models ([#8093](https://github.com/pyg-team/pytorch_geometric/pull/8093))
- Added `OnDiskDataset` interface with data loader support ([#8066](https://github.com/pyg-team/pytorch_geometric/pull/8066), [#8088](https://github.com/pyg-team/pytorch_geometric/pull/8088), [#8092](https://github.com/pyg-team/pytorch_geometric/pull/8092), [#8106](https://github.com/pyg-team/pytorch_geometric/pull/8106))
- Added a tutorial for `Node2Vec` and `MetaPath2Vec` usage ([#7938](https://github.com/pyg-team/pytorch_geometric/pull/7938))
- Added a tutorial for multi-GPU training with pure PyTorch ([#7894](https://github.com/pyg-team/pytorch_geometric/pull/7894))
- Added `edge_attr` support to `ResGatedGraphConv` ([#8048](https://github.com/pyg-team/pytorch_geometric/pull/8048))
- Added a `Database` interface and `SQLiteDatabase`/`RocksDatabase` implementations ([#8028](https://github.com/pyg-team/pytorch_geometric/pull/8028), [#8044](https://github.com/pyg-team/pytorch_geometric/pull/8044), [#8046](https://github.com/pyg-team/pytorch_geometric/pull/8046), [#8051](https://github.com/pyg-team/pytorch_geometric/pull/8051), [#8052](https://github.com/pyg-team/pytorch_geometric/pull/8052), [#8054](https://github.com/pyg-team/pytorch_geometric/pull/8054), [#8057](https://github.com/pyg-team/pytorch_geometric/pull/8057), [#8058](https://github.com/pyg-team/pytorch_geometric/pull/8058))
- Added support for weighted/biased sampling in `NeighborLoader`/`LinkNeighborLoader` ([#8038](https://github.com/pyg-team/pytorch_geometric/pull/8038))
- Added the `MixHopConv` layer and an corresponding example ([#8025](https://github.com/pyg-team/pytorch_geometric/pull/8025))
- Added the option to pass keyword arguments to the underlying normalization layers within `BasicGNN` and `MLP` ([#8024](https://github.com/pyg-team/pytorch_geometric/pull/8024), [#8033](https://github.com/pyg-team/pytorch_geometric/pull/8033))
- Added `IBMBNodeLoader` and `IBMBBatchLoader` data loaders ([#6230](https://github.com/pyg-team/pytorch_geometric/pull/6230))
- Added the `NeuralFingerprint` model for learning fingerprints of molecules ([#7919](https://github.com/pyg-team/pytorch_geometric/pull/7919))
- Added `SparseTensor` support to `WLConvContinuous`, `GeneralConv`, `PDNConv` and `ARMAConv` ([#8013](https://github.com/pyg-team/pytorch_geometric/pull/8013))
- Added `LCMAggregation`, an implementation of Learnable Communitive Monoids, along with an example ([#7976](https://github.com/pyg-team/pytorch_geometric/pull/7976), [#8020](https://github.com/pyg-team/pytorch_geometric/pull/8020), [#8023](https://github.com/pyg-team/pytorch_geometric/pull/8023), [#8026](https://github.com/pyg-team/pytorch_geometric/pull/8026), [#8075](https://github.com/pyg-team/pytorch_geometric/pull/8075))
- Added a warning for isolated/non-existing node types in `HeteroData.validate()` ([#7995](https://github.com/pyg-team/pytorch_geometric/pull/7995))
- Added `utils.cumsum` implementation ([#7994](https://github.com/pyg-team/pytorch_geometric/pull/7994))
- Added the `BrcaTcga` dataset ([#7905](https://github.com/pyg-team/pytorch_geometric/pull/7905))
- Added the `MyketDataset` ([#7959](https://github.com/pyg-team/pytorch_geometric/pull/7959))
- Added a multi-GPU `ogbn-papers100M` example ([#7921](https://github.com/pyg-team/pytorch_geometric/pull/7921))
- Added `group_argsort` implementation ([#7948](https://github.com/pyg-team/pytorch_geometric/pull/7948))
- Added `CachedLoader` implementation ([#7896](https://github.com/pyg-team/pytorch_geometric/pull/7896), [#7897](https://github.com/pyg-team/pytorch_geometric/pull/7897))
- Added possibility to run training benchmarks on XPU device ([#7925](https://github.com/pyg-team/pytorch_geometric/pull/7925))
- Added `utils.ppr` for personalized PageRank computation ([#7917](https://github.com/pyg-team/pytorch_geometric/pull/7917))
- Added support for XPU device in `PrefetchLoader` ([#7918](https://github.com/pyg-team/pytorch_geometric/pull/7918))
- Added support for floating-point slicing in `Dataset`, *e.g.*, `dataset[:0.9]` ([#7915](https://github.com/pyg-team/pytorch_geometric/pull/7915))
- Added nightly GPU tests ([#7895](https://github.com/pyg-team/pytorch_geometric/pull/7895))
- Added the `HalfHop` graph upsampling augmentation ([#7827](https://github.com/pyg-team/pytorch_geometric/pull/7827))
- Added the `Wikidata5M` dataset ([#7864](https://github.com/pyg-team/pytorch_geometric/pull/7864))
- Added TorchScript support inside `BasicGNN` models ([#7865](https://github.com/pyg-team/pytorch_geometric/pull/7865))
- Added a `batch_size` argument to `unbatch` functionalities ([#7851](https://github.com/pyg-team/pytorch_geometric/pull/7851))
- Added a distributed example using `graphlearn-for-pytorch` ([#7402](https://github.com/pyg-team/pytorch_geometric/pull/7402))
- Integrate `neg_sampling_ratio` into `TemporalDataLoader` ([#7644](https://github.com/pyg-team/pytorch_geometric/pull/7644))
- Added `faiss`-based `KNNINdex` classes for L2 or maximum inner product search ([#7842](https://github.com/pyg-team/pytorch_geometric/pull/7842))
- Added the `OSE_GVCS` dataset ([#7811](https://github.com/pyg-team/pytorch_geometric/pull/7811))
- Added `output_initializer` argument to `DimeNet` models ([#7774](https://github.com/pyg-team/pytorch_geometric/pull/7774), [#7780](https://github.com/pyg-team/pytorch_geometric/pull/7780))
- Added `lexsort` implementation ([#7775](https://github.com/pyg-team/pytorch_geometric/pull/7775))
- Added possibility to run inference benchmarks on XPU device ([#7705](https://github.com/pyg-team/pytorch_geometric/pull/7705))
- Added `HeteroData` support in `to_networkx` ([#7713](https://github.com/pyg-team/pytorch_geometric/pull/7713))
- Added `FlopsCount` support via `fvcore` ([#7693](https://github.com/pyg-team/pytorch_geometric/pull/7693))
- Added back support for PyTorch >= 1.11.0 ([#7656](https://github.com/pyg-team/pytorch_geometric/pull/7656))
- Added `Data.sort()` and `HeteroData.sort()` functionalities ([#7649](https://github.com/pyg-team/pytorch_geometric/pull/7649))
- Added `torch.nested_tensor` support in `Data` and `Batch` ([#7643](https://github.com/pyg-team/pytorch_geometric/pull/7643), [#7647](https://github.com/pyg-team/pytorch_geometric/pull/7647))
- Added `interval` argument to `Cartesian`, `LocalCartesian` and `Distance` transformations ([#7533](https://github.com/pyg-team/pytorch_geometric/pull/7533), [#7614](https://github.com/pyg-team/pytorch_geometric/pull/7614), [#7700](https://github.com/pyg-team/pytorch_geometric/pull/7700))
- Added a `LightGCN` example on the `AmazonBook` dataset ([7603](https://github.com/pyg-team/pytorch_geometric/pull/7603))
- Added a tutorial on hierarchical neighborhood sampling ([#7594](https://github.com/pyg-team/pytorch_geometric/pull/7594))
- Enabled different attention modes in `HypergraphConv` via the `attention_mode` argument ([#7601](https://github.com/pyg-team/pytorch_geometric/pull/7601))
- Added the `FilterEdges` graph coarsening operator ([#7361](https://github.com/pyg-team/pytorch_geometric/pull/7361))
- Added the `DirGNN` model for learning on directed graphs ([#7458](https://github.com/pyg-team/pytorch_geometric/pull/7458))
- Allow GPU tensors as input to `NodeLoader` and `LinkLoader` ([#7572](https://github.com/pyg-team/pytorch_geometric/pull/7572))
- Added an `embedding_device` option to allow for GPU inference in `BasicGNN` ([#7548](https://github.com/pyg-team/pytorch_geometric/pull/7548), [#7829](https://github.com/pyg-team/pytorch_geometric/pull/7829))
- Added `Performer` to `GPSConv` and remove `attn_dropout` argument from `GPSConv` ([#7465](https://github.com/pyg-team/pytorch_geometric/pull/7465))
- Enabled `LinkNeighborLoader` to return number of sampled nodes and edges per hop ([#7516](https://github.com/pyg-team/pytorch_geometric/pull/7516))
- Added the `HM` personalized fashion recommendation dataset ([#7515](https://github.com/pyg-team/pytorch_geometric/pull/7515))
- Added the `GraphMixer` model ([#7501](https://github.com/pyg-team/pytorch_geometric/pull/7501), [#7459](https://github.com/pyg-team/pytorch_geometric/pull/7459))
- Added the `disable_dynamic_shape` experimental flag ([#7246](https://github.com/pyg-team/pytorch_geometric/pull/7246), [#7534](https://github.com/pyg-team/pytorch_geometric/pull/7534))
- Added the `MovieLens-1M` heterogeneous dataset ([#7479](https://github.com/pyg-team/pytorch_geometric/pull/7479))
- Added a CPU-based and GPU-based `map_index` implementation ([#7493](https://github.com/pyg-team/pytorch_geometric/pull/7493), [#7764](https://github.com/pyg-team/pytorch_geometric/pull/7764) [#7765](https://github.com/pyg-team/pytorch_geometric/pull/7765))
- Added the `AmazonBook` heterogeneous dataset ([#7483](https://github.com/pyg-team/pytorch_geometric/pull/7483))
- Added hierarchical heterogeneous GraphSAGE example on OGB-MAG ([#7425](https://github.com/pyg-team/pytorch_geometric/pull/7425))
- Added the `torch_geometric.distributed` package ([#7451](https://github.com/pyg-team/pytorch_geometric/pull/7451), [#7452](https://github.com/pyg-team/pytorch_geometric/pull/7452)), [#7482](https://github.com/pyg-team/pytorch_geometric/pull/7482), [#7502](https://github.com/pyg-team/pytorch_geometric/pull/7502), [#7628](https://github.com/pyg-team/pytorch_geometric/pull/7628), [#7671](https://github.com/pyg-team/pytorch_geometric/pull/7671), [#7846](https://github.com/pyg-team/pytorch_geometric/pull/7846), [#7715](https://github.com/pyg-team/pytorch_geometric/pull/7715), [#7974](https://github.com/pyg-team/pytorch_geometric/pull/7974))
- Added the `GDELTLite` dataset ([#7442](https://github.com/pyg-team/pytorch_geometric/pull/7442))
- Added the `approx_knn` function for approximated nearest neighbor search ([#7421](https://github.com/pyg-team/pytorch_geometric/pull/7421))
- Added the `IGMCDataset` ([#7441](https://github.com/pyg-team/pytorch_geometric/pull/7441))
- Added a sparse `cross_entropy` implementation ([#7447](https://github.com/pyg-team/pytorch_geometric/pull/7447), [#7466](https://github.com/pyg-team/pytorch_geometric/pull/7466))
- Added the `MovieLens-100K` heterogeneous dataset ([#7398](https://github.com/pyg-team/pytorch_geometric/pull/7398))
- Added the `PMLP` model and an example ([#7370](https://github.com/pyg-team/pytorch_geometric/pull/7370), [#7543](https://github.com/pyg-team/pytorch_geometric/pull/7543))
- Added padding capabilities to `HeteroData.to_homogeneous()` in case feature dimensionalities do not match ([#7374](https://github.com/pyg-team/pytorch_geometric/pull/7374))
- Added an optional `batch_size` argument to `fps`, `knn`, `knn_graph`, `radius` and `radius_graph` ([#7368](https://github.com/pyg-team/pytorch_geometric/pull/7368))
- Added `PrefetchLoader` capabilities ([#7376](https://github.com/pyg-team/pytorch_geometric/pull/7376), [#7378](https://github.com/pyg-team/pytorch_geometric/pull/7378), [#7383](https://github.com/pyg-team/pytorch_geometric/pull/7383))
- Added an example for hierarchical sampling ([#7244](https://github.com/pyg-team/pytorch_geometric/pull/7244))
- Added Kùzu remote backend examples ([#7298](https://github.com/pyg-team/pytorch_geometric/pull/7298))
- Added an optional `add_pad_mask` argument to the `Pad` transform ([#7339](https://github.com/pyg-team/pytorch_geometric/pull/7339))
- Added `keep_inter_cluster_edges` option to `ClusterData` to support inter-subgraph edge connections when doing graph partitioning ([#7326](https://github.com/pyg-team/pytorch_geometric/pull/7326))
- Unify graph pooling framework ([#7308](https://github.com/pyg-team/pytorch_geometric/pull/7308), [#7625](https://github.com/pyg-team/pytorch_geometric/pull/7625))
- Added support for tuples as keys in `ModuleDict`/`ParameterDict` ([#7294](https://github.com/pyg-team/pytorch_geometric/pull/7294))
- Added `NodePropertySplit` transform for creating node-level splits using structural node properties ([#6894](https://github.com/pyg-team/pytorch_geometric/pull/6894))
- Added an option to preserve directed graphs in `CitationFull` datasets ([#7275](https://github.com/pyg-team/pytorch_geometric/pull/7275))
- Added support for `torch.sparse.Tensor` in `DataLoader` ([#7252](https://github.com/pyg-team/pytorch_geometric/pull/7252))
- Added `save` and `load` methods to `InMemoryDataset` ([#7250](https://github.com/pyg-team/pytorch_geometric/pull/7250), [#7413](https://github.com/pyg-team/pytorch_geometric/pull/7413))
- Added an example for heterogeneous GNN explanation via `CaptumExplainer` ([#7096](https://github.com/pyg-team/pytorch_geometric/pull/7096))
- Added `visualize_feature_importance` functionality to `HeteroExplanation` ([#7096](https://github.com/pyg-team/pytorch_geometric/pull/7096))
- Added a `AddRemainingSelfLoops` transform ([#7192](https://github.com/pyg-team/pytorch_geometric/pull/7192))
- Added `optimizer_resolver` ([#7209](https://github.com/pyg-team/pytorch_geometric/pull/7209))
- Added `type_ptr` argument to `HeteroLayerNorm` ([#7208](https://github.com/pyg-team/pytorch_geometric/pull/7208))
- Added an option to benchmark scripts to write PyTorch profiler results to CSV ([#7114](https://github.com/pyg-team/pytorch_geometric/pull/7114))
- Added subgraph type sampling option with bidirectional edge support ([#7199](https://github.com/pyg-team/pytorch_geometric/pull/7199), [#7200](https://github.com/pyg-team/pytorch_geometric/pull/7200))
- Added support for `"any"`-reductions in `scatter` ([#7198](https://github.com/pyg-team/pytorch_geometric/pull/7198))
- Added manual sampling interface to `NodeLoader` and `LinkLoader` ([#7197](https://github.com/pyg-team/pytorch_geometric/pull/7197))
- Extending `torch.sparse` support ([#7155](https://github.com/pyg-team/pytorch_geometric/pull/7155))
- Added edge weight support to `LightGCN` ([#7157](https://github.com/pyg-team/pytorch_geometric/pull/7157))
- Added `SparseTensor` support to `trim_to_layer` function ([#7089](https://github.com/pyg-team/pytorch_geometric/pull/7089))
- Added instructions for ROCm build wheels ([#7143](https://github.com/pyg-team/pytorch_geometric/pull/7143))
- Added a `ComposeFilters` class to compose `pre_filter` functions in `Dataset` ([#7097](https://github.com/pyg-team/pytorch_geometric/pull/7097))
- Added a time-step aware variant of the `EllipticBitcoinDataset` called `EllipticBitcoinTemporalDataset` ([#7011](https://github.com/pyg-team/pytorch_geometric/pull/7011))
- Added `to_dgl` and `from_dgl` conversion functions ([#7053](https://github.com/pyg-team/pytorch_geometric/pull/7053))
- Added support for `torch.jit.script` within `MessagePassing` layers without `torch_sparse` being installed ([#7061](https://github.com/pyg-team/pytorch_geometric/pull/7061), [#7062](https://github.com/pyg-team/pytorch_geometric/pull/7062))
- Added unbatching logic for `torch.sparse` tensors ([#7037](https://github.com/pyg-team/pytorch_geometric/pull/7037))
- Added the `RotatE` KGE model ([#7026](https://github.com/pyg-team/pytorch_geometric/pull/7026))
- Added support for Apple silicon GPU acceleration in some main examples ([#7770](https://github.com/pyg-team/pytorch_geometric/pull/7770), [#7711](https://github.com/pyg-team/pytorch_geometric/pull/7711), [#7784](https://github.com/pyg-team/pytorch_geometric/pull/7784), [#7785](https://github.com/pyg-team/pytorch_geometric/pull/7785))

### Changed

- Fixed `HeteroConv` for layers that have a non-default argument order, *e.g.*, `GCN2Conv` ([#8166](https://github.com/pyg-team/pytorch_geometric/pull/8166))
- Handle reserved keywords as keys in `ModuleDict` and `ParameterDict` ([#8163](https://github.com/pyg-team/pytorch_geometric/pull/8163))
- Updated the examples and tutorials to account for `torch.compile(dynamic=True)` in PyTorch 2.1.0 ([#8145](https://github.com/pyg-team/pytorch_geometric/pull/8145))
- Enabled dense eigenvalue computation in `AddLaplacianEigenvectorPE` for small-scale graphs ([#8143](https://github.com/pyg-team/pytorch_geometric/pull/8143))
- Fix `DynamicBatchSampler.__len__` to raise an error in case `num_steps` is undefined ([#8137](https://github.com/pyg-team/pytorch_geometric/pull/8137))
- Enabled pickling of `DimeNet` models ([#8019](https://github.com/pyg-team/pytorch_geometric/pull/8019))
- Changed the `trim_to_layer` function to filter out non-reachable node and edge types when operating on heterogeneous graphs ([#7942](https://github.com/pyg-team/pytorch_geometric/pull/7942))
- Accelerated and simplified `top_k` computation in `TopKPooling` ([#7737](https://github.com/pyg-team/pytorch_geometric/pull/7737))
- Updated `GIN` implementation in kernel benchmarks to have sequential batchnorms ([#7955](https://github.com/pyg-team/pytorch_geometric/pull/7955))
- Fixed bugs in benchmarks caused by a lack of the device conditions for CPU and unexpected `cache` argument in heterogeneous models ([#7956](https://github.com/pyg-team/pytorch_geometric/pull/7956)
- Fixed a bug in which `batch.e_id` was not correctly computed on unsorted graph inputs ([#7953](https://github.com/pyg-team/pytorch_geometric/pull/7953))
- Fixed `from_networkx` conversion from `nx.stochastic_block_model` graphs ([#7941](https://github.com/pyg-team/pytorch_geometric/pull/7941))
- Fixed the usage of `bias_initializer` in `HeteroLinear` ([#7923](https://github.com/pyg-team/pytorch_geometric/pull/7923))
- Fixed broken links in `HGBDataset` ([#7907](https://github.com/pyg-team/pytorch_geometric/pull/7907))
- Fixed an issue where `SetTransformerAggregation` produced `NaN` values for isolates nodes ([#7902](https://github.com/pyg-team/pytorch_geometric/pull/7902))
- Fixed `model_summary` on modules with uninitialized parameters ([#7884](https://github.com/pyg-team/pytorch_geometric/pull/7884))
- Updated `QM9` data pre-processing to include the SMILES string ([#7867](https://github.com/pyg-team/pytorch_geometric/pull/7867))
- Fixed tracing of `add_self_loops` for a dynamic number of nodes ([#7330](https://github.com/pyg-team/pytorch_geometric/pull/7330))
- Fixed device issue in `PNAConv.get_degree_histogram` ([#7830](https://github.com/pyg-team/pytorch_geometric/pull/7830))
- Fixed the shape of `edge_label_time` when using temporal sampling on homogeneous graphs ([#7807](https://github.com/pyg-team/pytorch_geometric/pull/7807))
- Moved `torch_geometric.contrib.explain.GraphMaskExplainer` to `torch_geometric.explain.algorithm.GraphMaskExplainer` ([#7779](https://github.com/pyg-team/pytorch_geometric/pull/7779))
- Made `FieldStatus` enum picklable to avoid `PicklingError` in a multi-process setting ([#7808](https://github.com/pyg-team/pytorch_geometric/pull/7808))
- Fixed `edge_label_index` computation in `LinkNeighborLoader` for the homogeneous+`disjoint` mode ([#7791](https://github.com/pyg-team/pytorch_geometric/pull/7791))
- Fixed `CaptumExplainer` for `binary_classification` tasks ([#7787](https://github.com/pyg-team/pytorch_geometric/pull/7787))
- Warn user when using the `training` flag in `to_hetero` modules ([#7772](https://github.com/pyg-team/pytorch_geometric/pull/7772))
- Unchained exceptions raised when accessing non-existent data attributes for better readability ([#7734](https://github.com/pyg-team/pytorch_geometric/pull/7734))
- Raise error when collecting non-existing attributes in `HeteroData` ([#7714](https://github.com/pyg-team/pytorch_geometric/pull/7714))
- Renamed `dest` argument to `dst` in `utils.geodesic_distance` ([#7708](https://github.com/pyg-team/pytorch_geometric/pull/7708))
- Changed `add_random_edge` to only add true negative edges ([#7654](https://github.com/pyg-team/pytorch_geometric/pull/7654))
- Allowed the usage of `BasicGNN` models in `DeepGraphInfomax` ([#7648](https://github.com/pyg-team/pytorch_geometric/pull/7648))
- Breaking Change: Made `Data.keys` a method rather than a property ([#7629](https://github.com/pyg-team/pytorch_geometric/pull/7629))
- Added a `num_edges` parameter to the forward method of `HypergraphConv` ([#7560](https://github.com/pyg-team/pytorch_geometric/pull/7560))
- Fixed `get_mesh_laplacian` for `normalization="sym"` ([#7544](https://github.com/pyg-team/pytorch_geometric/pull/7544))
- Use `dim_size` to initialize output size of the `EquilibriumAggregation` layer ([#7530](https://github.com/pyg-team/pytorch_geometric/pull/7530))
- Added a `max_num_elements` parameter to the forward method of `GraphMultisetTransformer`, `GRUAggregation`, `LSTMAggregation` and `SetTransformerAggregation` ([#7529](https://github.com/pyg-team/pytorch_geometric/pull/7529))
- Fixed empty edge indices handling in `SparseTensor` ([#7519](https://github.com/pyg-team/pytorch_geometric/pull/7519))
- Move the `scaler` tensor in `GeneralConv` to the correct device ([#7484](https://github.com/pyg-team/pytorch_geometric/pull/7484))
- Fixed `HeteroLinear` bug when used via mixed precision ([#7473](https://github.com/pyg-team/pytorch_geometric/pull/7473))
- All transforms are now immutable, i.e., they perform a shallow-copy of the data and therefore do not longer modify data in-place ([#7429](https://github.com/pyg-team/pytorch_geometric/pull/7429))
- Set `output_size` in the `repeat_interleave` operation in `QuantileAggregation` ([#7426](https://github.com/pyg-team/pytorch_geometric/pull/7426))
- Fixed gradient computation of edge weights in `utils.spmm` ([#7428](https://github.com/pyg-team/pytorch_geometric/pull/7428))
- Re-factored `ClusterLoader` to integrate `pyg-lib` METIS routine ([#7416](https://github.com/pyg-team/pytorch_geometric/pull/7416))
- Fixed an index-out-of-range bug in `QuantileAggregation` when `dim_size` is passed ([#7407](https://github.com/pyg-team/pytorch_geometric/pull/7407))
- The `filter_per_worker` option will not get automatically inferred by default based on the device of the underlying data ([#7399](https://github.com/pyg-team/pytorch_geometric/pull/7399))
- Fixed a bug in `LightGCN.recommendation_loss()` to only use the embeddings of the nodes involved in the current mini-batch ([#7384](https://github.com/pyg-team/pytorch_geometric/pull/7384))
- Added an optional `max_num_elements` argument to `SortAggregation` ([#7367](https://github.com/pyg-team/pytorch_geometric/pull/7367))
- Added the option to pass `fill_value` as a `torch.tensor` to `utils.to_dense_batch` ([#7367](https://github.com/pyg-team/pytorch_geometric/pull/7367))
- Fixed a bug in which inputs where modified in-place in `to_hetero_with_bases` ([#7363](https://github.com/pyg-team/pytorch_geometric/pull/7363))
- Do not load `node_default` and `edge_default` attributes in `from_networkx` ([#7348](https://github.com/pyg-team/pytorch_geometric/pull/7348))
- Updated examples to use `NeighborLoader` instead of `NeighborSampler` ([#7152](https://github.com/pyg-team/pytorch_geometric/pull/7152))
- Fixed `HGTConv` utility function `_construct_src_node_feat` ([#7194](https://github.com/pyg-team/pytorch_geometric/pull/7194))
- Extend dataset summary to create stats for each node/edge type ([#7203](https://github.com/pyg-team/pytorch_geometric/pull/7203))
- Added an optional `batch_size` argument to `avg_pool_x` and `max_pool_x` ([#7216](https://github.com/pyg-team/pytorch_geometric/pull/7216))
- Fixed `subgraph` on unordered inputs ([#7187](https://github.com/pyg-team/pytorch_geometric/pull/7187))
- Allow missing node types in `HeteroDictLinear` ([#7185](https://github.com/pyg-team/pytorch_geometric/pull/7185))
- Optimized `from_networkx` memory footprint by reducing unnecessary copies ([#7119](https://github.com/pyg-team/pytorch_geometric/pull/7119))
- Added an optional `batch_size` argument to `LayerNorm`, `GraphNorm`, `InstanceNorm`, `GraphSizeNorm` and `PairNorm` ([#7135](https://github.com/pyg-team/pytorch_geometric/pull/7135))
- Improved code coverage ([#7093](https://github.com/pyg-team/pytorch_geometric/pull/7093), [#7195](https://github.com/pyg-team/pytorch_geometric/pull/7195))
- Fix `numpy` incompatiblity when reading files for `Planetoid` datasets ([#7141](https://github.com/pyg-team/pytorch_geometric/pull/7141))
- Added support for `Data.num_edges` for native `torch.sparse.Tensor` adjacency matrices ([#7104](https://github.com/pyg-team/pytorch_geometric/pull/7104))
- Fixed crash of heterogeneous data loaders if node or edge types are missing ([#7060](https://github.com/pyg-team/pytorch_geometric/pull/7060), [#7087](https://github.com/pyg-team/pytorch_geometric/pull/7087))
- Accelerated attention-based `MultiAggregation` ([#7077](https://github.com/pyg-team/pytorch_geometric/pull/7077))
- Edges in `HeterophilousGraphDataset` are now undirected by default ([#7065](https://github.com/pyg-team/pytorch_geometric/pull/7065))
- Fixed a bug in `FastHGTConv` that computed values via parameters used to compute the keys ([#7050](https://github.com/pyg-team/pytorch_geometric/pull/7050))
- Accelerated sparse tensor conversion routines ([#7042](https://github.com/pyg-team/pytorch_geometric/pull/7042), [#7043](https://github.com/pyg-team/pytorch_geometric/pull/7043))
- Change `torch_sparse.SparseTensor` logic to utilize `torch.sparse_csr` instead ([#7041](https://github.com/pyg-team/pytorch_geometric/pull/7041))
- Added an optional `batch_size` and `max_num_nodes` arguments to `MemPooling` layer ([#7239](https://github.com/pyg-team/pytorch_geometric/pull/7239))
- Fixed training issues of the GraphGPS example ([#7377](https://github.com/pyg-team/pytorch_geometric/pull/7377))
- Allowed `CaptumExplainer` to be called multiple times in a row ([#7391](https://github.com/pyg-team/pytorch_geometric/pull/7391))

### Removed

- Dropped Python 3.7 support ([#7939](https://github.com/pyg-team/pytorch_geometric/pull/7939))
- Removed `layer_type` argument in `contrib.explain.GraphMaskExplainer` ([#7445](https://github.com/pyg-team/pytorch_geometric/pull/7445))
- Replaced `FastHGTConv` with `HGTConv` ([#7117](https://github.com/pyg-team/pytorch_geometric/pull/7117))

## [2.3.0] - 2023-03-23

### Added

- Added a memory-efficient `utils.one_hot` implementation ([#7005](https://github.com/pyg-team/pytorch_geometric/pull/7005))
- Added `HeteroDictLinear` and an optimized `FastHGTConv` module ([#6178](https://github.com/pyg-team/pytorch_geometric/pull/6178), [#6998](https://github.com/pyg-team/pytorch_geometric/pull/6998))
- Added the `DenseGATConv` module ([#6928](https://github.com/pyg-team/pytorch_geometric/pull/6928))
- Added `trim_to_layer` utility function for more efficient `NeighborLoader` use-cases ([#6661](https://github.com/pyg-team/pytorch_geometric/pull/6661))
- Added the `DistMult` KGE model ([#6958](https://github.com/pyg-team/pytorch_geometric/pull/6958))
- Added `HeteroData.set_value_dict` functionality ([#6961](https://github.com/pyg-team/pytorch_geometric/pull/6961), [#6974](https://github.com/pyg-team/pytorch_geometric/pull/6974))
- Added PyTorch >= 2.0 support ([#6934](https://github.com/pyg-team/pytorch_geometric/pull/6934), [#7000](https://github.com/pyg-team/pytorch_geometric/pull/7000))
- Added PyTorch Lightning >= 2.0 support ([#6929](https://github.com/pyg-team/pytorch_geometric/pull/6929))
- Added the `ComplEx` KGE model ([#6898](https://github.com/pyg-team/pytorch_geometric/pull/6898))
- Added option to write benchmark results to csv ([#6888](https://github.com/pyg-team/pytorch_geometric/pull/6888))
- Added `HeteroLayerNorm` and `HeteroBatchNorm` layers ([#6838](https://github.com/pyg-team/pytorch_geometric/pull/6838))
- Added the `HeterophilousGraphDataset` suite ([#6846](https://github.com/pyg-team/pytorch_geometric/pull/6846))
- Added support for sparse tensor in full batch mode inference benchmark ([#6843](https://github.com/pyg-team/pytorch_geometric/pull/6843))
- Enabled `NeighborLoader` to return number of sampled nodes and edges per hop ([#6834](https://github.com/pyg-team/pytorch_geometric/pull/6834))
- Added `ZipLoader` to execute multiple `NodeLoader` or `LinkLoader` instances ([#6829](https://github.com/pyg-team/pytorch_geometric/issues/6829))
- Added common `utils.select` and `utils.narrow` functionality to support filtering of both tensors and lists ([#6162](https://github.com/pyg-team/pytorch_geometric/issues/6162))
- Support `normalization` customization in `get_mesh_laplacian` ([#6790](https://github.com/pyg-team/pytorch_geometric/issues/6790))
- Added the `TemporalEncoding` module ([#6785](https://github.com/pyg-team/pytorch_geometric/pull/6785))
- Added CPU-optimized `spmm_reduce` functionality via CSR format ([#6699](https://github.com/pyg-team/pytorch_geometric/pull/6699), [#6759](https://github.com/pyg-team/pytorch_geometric/pull/6759))
- Added support for the revised version of the `MD17` dataset ([#6734](https://github.com/pyg-team/pytorch_geometric/pull/6734))
- Added TorchScript support to the `RECT_L` model ([#6727](https://github.com/pyg-team/pytorch_geometric/pull/6727))
- Added TorchScript support to the `Node2Vec` model ([#6726](https://github.com/pyg-team/pytorch_geometric/pull/6726))
- Added `utils.to_edge_index` to convert sparse tensors to edge indices and edge attributes ([#6728](https://github.com/pyg-team/pytorch_geometric/issues/6728))
- Fixed expected data format in `PolBlogs` dataset ([#6714](https://github.com/pyg-team/pytorch_geometric/issues/6714))
- Added `SimpleConv` to perform non-trainable propagation ([#6718](https://github.com/pyg-team/pytorch_geometric/pull/6718))
- Added a `RemoveDuplicatedEdges` transform ([#6709](https://github.com/pyg-team/pytorch_geometric/pull/6709))
- Added TorchScript support to the `LINKX` model ([#6712](https://github.com/pyg-team/pytorch_geometric/pull/6712))
- Added `torch.jit` examples for `example/film.py` and `example/gcn.py`([#6602](https://github.com/pyg-team/pytorch_geometric/pull/6692))
- Added `Pad` transform ([#5940](https://github.com/pyg-team/pytorch_geometric/pull/5940), [#6697](https://github.com/pyg-team/pytorch_geometric/pull/6697), [#6731](https://github.com/pyg-team/pytorch_geometric/pull/6731), [#6758](https://github.com/pyg-team/pytorch_geometric/pull/6758))
- Added full batch mode to the inference benchmark ([#6631](https://github.com/pyg-team/pytorch_geometric/pull/6631))
- Added `cat` aggregation type to the `HeteroConv` class so that features can be concatenated during grouping ([#6634](https://github.com/pyg-team/pytorch_geometric/pull/6634))
- Added `torch.compile` support and benchmark study ([#6610](https://github.com/pyg-team/pytorch_geometric/pull/6610), [#6952](https://github.com/pyg-team/pytorch_geometric/pull/6952), [#6953](https://github.com/pyg-team/pytorch_geometric/pull/6953), [#6980](https://github.com/pyg-team/pytorch_geometric/pull/6980), [#6983](https://github.com/pyg-team/pytorch_geometric/pull/6983), [#6984](https://github.com/pyg-team/pytorch_geometric/pull/6984), [#6985](https://github.com/pyg-team/pytorch_geometric/pull/6985), [#6986](https://github.com/pyg-team/pytorch_geometric/pull/6986), [#6989](https://github.com/pyg-team/pytorch_geometric/pull/6989), [#7002](https://github.com/pyg-team/pytorch_geometric/pull/7002))
- Added the `AntiSymmetricConv` layer ([#6577](https://github.com/pyg-team/pytorch_geometric/pull/6577))
- Added a mixin for Huggingface model hub integration ([#5930](https://github.com/pyg-team/pytorch_geometric/pull/5930), [#6591](https://github.com/pyg-team/pytorch_geometric/pull/6591))
- Added support for accelerated GNN layers in `nn.conv.cugraph` via `cugraph-ops` ([#6278](https://github.com/pyg-team/pytorch_geometric/pull/6278), [#6388](https://github.com/pyg-team/pytorch_geometric/pull/6388), [#6412](https://github.com/pyg-team/pytorch_geometric/pull/6412))
- Added accelerated `index_sort` function from `pyg-lib` for faster sorting ([#6554](https://github.com/pyg-team/pytorch_geometric/pull/6554))
- Fix incorrect device in `EquilibriumAggregration` ([#6560](https://github.com/pyg-team/pytorch_geometric/pull/6560))
- Added bipartite graph support in `dense_to_sparse()` ([#6546](https://github.com/pyg-team/pytorch_geometric/pull/6546))
- Add CPU affinity support for more data loaders ([#6534](https://github.com/pyg-team/pytorch_geometric/pull/6534), [#6922](https://github.com/pyg-team/pytorch_geometric/pull/6922))
- Added the `BAMultiShapesDataset` ([#6541](https://github.com/pyg-team/pytorch_geometric/pull/6541))
- Added the interfaces of a graph pooling framework ([#6540](https://github.com/pyg-team/pytorch_geometric/pull/6540))
- Added automatic `n_id` and `e_id` attributes to mini-batches produced by `NodeLoader` and `LinkLoader` ([#6524](https://github.com/pyg-team/pytorch_geometric/pull/6524))
- Added `PGMExplainer` to `torch_geometric.contrib` ([#6149](https://github.com/pyg-team/pytorch_geometric/pull/6149), [#6588](https://github.com/pyg-team/pytorch_geometric/pull/6588), [#6589](https://github.com/pyg-team/pytorch_geometric/pull/6589))
- Added a `NumNeighbors` helper class for specifying the number of neighbors when sampling ([#6501](https://github.com/pyg-team/pytorch_geometric/pull/6501), [#6505](https://github.com/pyg-team/pytorch_geometric/pull/6505), [#6690](https://github.com/pyg-team/pytorch_geometric/pull/6690))
- Added caching to `is_node_attr()` and `is_edge_attr()` calls ([#6492](https://github.com/pyg-team/pytorch_geometric/pull/6492))
- Added `ToHeteroLinear` and `ToHeteroMessagePassing` modules to accelerate `to_hetero` functionality ([#5992](https://github.com/pyg-team/pytorch_geometric/pull/5992), [#6456](https://github.com/pyg-team/pytorch_geometric/pull/6456))
- Added `GraphMaskExplainer` ([#6284](https://github.com/pyg-team/pytorch_geometric/pull/6284))
- Added the `GRBCD` and `PRBCD` adversarial attack models ([#5972](https://github.com/pyg-team/pytorch_geometric/pull/5972))
- Added `dropout` option to `SetTransformer` and `GraphMultisetTransformer` ([#6484](https://github.com/pyg-team/pytorch_geometric/pull/6484))
- Added option to customize loader arguments for evaluation in `LightningNodeData` and `LightningLinkData` ([#6450](https://github.com/pyg-team/pytorch_geometric/pull/6450), [#6456](https://github.com/pyg-team/pytorch_geometric/pull/6456))
- Added option to customize `num_neighbors` in `NeighborSampler` after instantiation ([#6446](https://github.com/pyg-team/pytorch_geometric/pull/6446))
- Added the `Taobao` dataset and a corresponding example for it ([#6144](https://github.com/pyg-team/pytorch_geometric/pull/6144))
- Added `pyproject.toml` ([#6431](https://github.com/pyg-team/pytorch_geometric/pull/6431))
- Added the `torch_geometric.contrib` sub-package ([#6422](https://github.com/pyg-team/pytorch_geometric/pull/6422))
- Warn on using latest documentation ([#6418](https://github.com/pyg-team/pytorch_geometric/pull/6418))
- Added basic `pyright` type checker support ([#6415](https://github.com/pyg-team/pytorch_geometric/pull/6415))
- Added a new external resource for link prediction ([#6396](https://github.com/pyg-team/pytorch_geometric/pull/6396))
- Added `CaptumExplainer` ([#6383](https://github.com/pyg-team/pytorch_geometric/pull/6383), [#6387](https://github.com/pyg-team/pytorch_geometric/pull/6387), [#6433](https://github.com/pyg-team/pytorch_geometric/pull/6433), [#6487](https://github.com/pyg-team/pytorch_geometric/pull/6487), [#6966](https://github.com/pyg-team/pytorch_geometric/pull/6966))
- Added support for custom `HeteroData` mini-batch class in remote backends ([#6377](https://github.com/pyg-team/pytorch_geometric/pull/6377))
- Added the `GNNFF` model ([#5866](https://github.com/pyg-team/pytorch_geometric/pull/5866))
- Added `MLPAggregation`, `SetTransformerAggregation`, `GRUAggregation`, and `DeepSetsAggregation` as adaptive readout functions ([#6301](https://github.com/pyg-team/pytorch_geometric/pull/6301), [#6336](https://github.com/pyg-team/pytorch_geometric/pull/6336), [#6338](https://github.com/pyg-team/pytorch_geometric/pull/6338))
- Added `Dataset.to_datapipe` for converting PyG datasets into a torchdata `DataPipe`([#6141](https://github.com/pyg-team/pytorch_geometric/pull/6141))
- Added `to_nested_tensor` and `from_nested_tensor` functionality ([#6329](https://github.com/pyg-team/pytorch_geometric/pull/6329), [#6330](https://github.com/pyg-team/pytorch_geometric/pull/6330), [#6331](https://github.com/pyg-team/pytorch_geometric/pull/6331), [#6332](https://github.com/pyg-team/pytorch_geometric/pull/6332))
- Added the `GPSConv` Graph Transformer layer and example ([#6326](https://github.com/pyg-team/pytorch_geometric/pull/6326), [#6327](https://github.com/pyg-team/pytorch_geometric/pull/6327))
- Added `networkit` conversion utilities ([#6321](https://github.com/pyg-team/pytorch_geometric/pull/6321))
- Added global dataset attribute access via `dataset.{attr_name}` ([#6319](https://github.com/pyg-team/pytorch_geometric/pull/6319))
- Added the `TransE` KGE model and example ([#6314](https://github.com/pyg-team/pytorch_geometric/pull/6314))
- Added the Freebase `FB15k_237` dataset ([#3204](https://github.com/pyg-team/pytorch_geometric/pull/3204))
- Added `Data.update()` and `HeteroData.update()` functionality ([#6313](https://github.com/pyg-team/pytorch_geometric/pull/6313))
- Added `PGExplainer` ([#6204](https://github.com/pyg-team/pytorch_geometric/pull/6204))
- Added the `AirfRANS` dataset ([#6287](https://github.com/pyg-team/pytorch_geometric/pull/6287))
- Added `AttentionExplainer` ([#6279](https://github.com/pyg-team/pytorch_geometric/pull/6279))
- Added (un)faithfulness explainability metric ([#6090](https://github.com/pyg-team/pytorch_geometric/pull/6090))
- Added fidelity explainability metric ([#6116](https://github.com/pyg-team/pytorch_geometric/pull/6116), [#6510](https://github.com/pyg-team/pytorch_geometric/pull/6510))
- Added subgraph visualization of GNN explanations ([#6235](https://github.com/pyg-team/pytorch_geometric/pull/6235), [#6271](https://github.com/pyg-team/pytorch_geometric/pull/6271))
- Added weighted negative sampling option in `LinkNeighborLoader` ([#6264](https://github.com/pyg-team/pytorch_geometric/pull/6264))
- Added the `BA2MotifDataset` explainer dataset ([#6257](https://github.com/pyg-team/pytorch_geometric/pull/6257))
- Added `CycleMotif` motif generator to generate `n`-node cycle shaped motifs ([#6256](https://github.com/pyg-team/pytorch_geometric/pull/6256))
- Added the `InfectionDataset` to evaluate explanations ([#6222](https://github.com/pyg-team/pytorch_geometric/pull/6222))
- Added `characterization_score` and `fidelity_curve_auc` explainer metrics ([#6188](https://github.com/pyg-team/pytorch_geometric/pull/6188))
- Added `get_message_passing_embeddings` ([#6201](https://github.com/pyg-team/pytorch_geometric/pull/6201))
- Added the `PointGNNConv` layer ([#6194](https://github.com/pyg-team/pytorch_geometric/pull/6194))
- Added `GridGraph` graph generator to generate grid graphs ([#6220](https://github.com/pyg-team/pytorch_geometric/pull/6220)
- Added explainability metrics for when ground truth is available ([#6137](https://github.com/pyg-team/pytorch_geometric/pull/6137))
- Added `visualize_feature_importance` to support node feature visualizations ([#6094](https://github.com/pyg-team/pytorch_geometric/pull/6094))
- Added heterogeneous graph support to `Explanation` framework ([#6091](https://github.com/pyg-team/pytorch_geometric/pull/6091), [#6218](https://github.com/pyg-team/pytorch_geometric/pull/6218))
- Added a `CustomMotif` motif generator ([#6179](https://github.com/pyg-team/pytorch_geometric/pull/6179))
- Added `ERGraph` graph generator to generate Ergos-Renyi (ER) graphs ([#6073](https://github.com/pyg-team/pytorch_geometric/pull/6073))
- Added `BAGraph` graph generator to generate Barabasi-Albert graphs - the usage of `datasets.BAShapes` is now deprecated ([#6072](https://github.com/pyg-team/pytorch_geometric/pull/6072)
- Added explainability benchmark dataset framework ([#6104](https://github.com/pyg-team/pytorch_geometric/pull/6104))
- Added `seed_time` attribute to temporal `NodeLoader` outputs in case `input_time` is given ([#6196](https://github.com/pyg-team/pytorch_geometric/pull/6196))
- Added `Data.edge_subgraph` and `HeteroData.edge_subgraph` functionalities ([#6193](https://github.com/pyg-team/pytorch_geometric/pull/6193))
- Added `input_time` option to `LightningNodeData` and `transform_sampler_output` to `NodeLoader` and `LinkLoader` ([#6187](https://github.com/pyg-team/pytorch_geometric/pull/6187))
- Added `summary` for PyG/PyTorch models ([#5859](https://github.com/pyg-team/pytorch_geometric/pull/5859), [#6161](https://github.com/pyg-team/pytorch_geometric/pull/6161))
- Started adding `torch.sparse` support to PyG ([#5906](https://github.com/pyg-team/pytorch_geometric/pull/5906), [#5944](https://github.com/pyg-team/pytorch_geometric/pull/5944), [#6003](https://github.com/pyg-team/pytorch_geometric/pull/6003), [#6033](https://github.com/pyg-team/pytorch_geometric/pull/6033), [#6514](https://github.com/pyg-team/pytorch_geometric/pull/6514), [#6532](https://github.com/pyg-team/pytorch_geometric/pull/6532), [#6748](https://github.com/pyg-team/pytorch_geometric/pull/6748), [#6847](https://github.com/pyg-team/pytorch_geometric/pull/6847), [#6868](https://github.com/pyg-team/pytorch_geometric/pull/6868), [#6874](https://github.com/pyg-team/pytorch_geometric/pull/6874), [#6897](https://github.com/pyg-team/pytorch_geometric/pull/6897), [#6930](https://github.com/pyg-team/pytorch_geometric/pull/6930), [#6932](https://github.com/pyg-team/pytorch_geometric/pull/6932), [#6936](https://github.com/pyg-team/pytorch_geometric/pull/6936), [#6937](https://github.com/pyg-team/pytorch_geometric/pull/6937), [#6939](https://github.com/pyg-team/pytorch_geometric/pull/6939), [#6947](https://github.com/pyg-team/pytorch_geometric/pull/6947), [#6950](https://github.com/pyg-team/pytorch_geometric/pull/6950), [#6951](https://github.com/pyg-team/pytorch_geometric/pull/6951), [#6957](https://github.com/pyg-team/pytorch_geometric/pull/6957))
- Add `inputs_channels` back in training benchmark ([#6154](https://github.com/pyg-team/pytorch_geometric/pull/6154))
- Added support for dropping nodes in `utils.to_dense_batch` in case `max_num_nodes` is smaller than the number of nodes ([#6124](https://github.com/pyg-team/pytorch_geometric/pull/6124))
- Added the RandLA-Net architecture as an example ([#5117](https://github.com/pyg-team/pytorch_geometric/pull/5117))

### Changed

- Migrate to `pyproject.toml` for packaging ([#6880](https://github.com/pyg-team/pytorch_geometric/pull/6880))
- Drop internal usage of `__dunder__` names ([#6999](https://github.com/pyg-team/pytorch_geometric/issues/6999))
- Changed the interface of `sort_edge_index`, `coalesce` and `to_undirected` to only return single `edge_index` information in case the `edge_attr` argument is not specified ([#6875](https://github.com/pyg-team/pytorch_geometric/issues/6875), [#6879](https://github.com/pyg-team/pytorch_geometric/issues/6879), [#6893](https://github.com/pyg-team/pytorch_geometric/issues/6893))
- Fixed a bug in `to_hetero` when using an uninitialized submodule without implementing `reset_parameters` ([#6863](https://github.com/pyg-team/pytorch_geometric/issues/6790))
- Fixed a bug in `get_mesh_laplacian` ([#6790](https://github.com/pyg-team/pytorch_geometric/issues/6790))
- Fixed a bug in which masks were not properly masked in `GNNExplainer` on link prediction tasks ([#6787](https://github.com/pyg-team/pytorch_geometric/pull/6787))
- Allow the usage of `ChebConv` within `GNNExplainer` ([#6778](https://github.com/pyg-team/pytorch_geometric/pull/6778))
- Allow setting the `EdgeStorage.num_edges` property ([#6710](https://github.com/pyg-team/pytorch_geometric/pull/6710))
- Fixed a bug in `utils.bipartite_subgraph()` and updated docs of `HeteroData.subgraph()` ([#6654](https://github.com/pyg-team/pytorch_geometric/pull/6654))
- Properly reset the `data_list` cache of an `InMemoryDataset` when accessing `dataset.data` ([#6685](https://github.com/pyg-team/pytorch_geometric/pull/6685))
- Fixed a bug in `Data.subgraph()` and `HeteroData.subgraph()` ([#6613](https://github.com/pyg-team/pytorch_geometric/pull/6613))
- Fixed a bug in `PNAConv` and `DegreeScalerAggregation` to correctly incorporate degree statistics of isolated nodes ([#6609](https://github.com/pyg-team/pytorch_geometric/pull/6609))
- Improved code coverage ([#6523](https://github.com/pyg-team/pytorch_geometric/pull/6523), [#6538](https://github.com/pyg-team/pytorch_geometric/pull/6538), [#6555](https://github.com/pyg-team/pytorch_geometric/pull/6555), [#6558](https://github.com/pyg-team/pytorch_geometric/pull/6558), [#6568](https://github.com/pyg-team/pytorch_geometric/pull/6568), [#6573](https://github.com/pyg-team/pytorch_geometric/pull/6573), [#6578](https://github.com/pyg-team/pytorch_geometric/pull/6578), [#6597](https://github.com/pyg-team/pytorch_geometric/pull/6597), [#6600](https://github.com/pyg-team/pytorch_geometric/pull/6600), [#6618](https://github.com/pyg-team/pytorch_geometric/pull/6618), [#6619](https://github.com/pyg-team/pytorch_geometric/pull/6619), [#6621](https://github.com/pyg-team/pytorch_geometric/pull/6621), [#6623](https://github.com/pyg-team/pytorch_geometric/pull/6623), [#6637](https://github.com/pyg-team/pytorch_geometric/pull/6637), [#6638](https://github.com/pyg-team/pytorch_geometric/pull/6638), [#6640](https://github.com/pyg-team/pytorch_geometric/pull/6640), [#6645](https://github.com/pyg-team/pytorch_geometric/pull/6645), [#6648](https://github.com/pyg-team/pytorch_geometric/pull/6648), [#6647](https://github.com/pyg-team/pytorch_geometric/pull/6647), [#6653](https://github.com/pyg-team/pytorch_geometric/pull/6653), [#6657](https://github.com/pyg-team/pytorch_geometric/pull/6657), [#6662](https://github.com/pyg-team/pytorch_geometric/pull/6662), [#6664](https://github.com/pyg-team/pytorch_geometric/pull/6664), [#6667](https://github.com/pyg-team/pytorch_geometric/pull/6667), [#6668](https://github.com/pyg-team/pytorch_geometric/pull/6668), [#6669](https://github.com/pyg-team/pytorch_geometric/pull/6669), [#6670](https://github.com/pyg-team/pytorch_geometric/pull/6670), [#6671](https://github.com/pyg-team/pytorch_geometric/pull/6671), [#6673](https://github.com/pyg-team/pytorch_geometric/pull/6673), [#6675](https://github.com/pyg-team/pytorch_geometric/pull/6675), [#6676](https://github.com/pyg-team/pytorch_geometric/pull/6676), [#6677](https://github.com/pyg-team/pytorch_geometric/pull/6677), [#6678](https://github.com/pyg-team/pytorch_geometric/pull/6678), [#6681](https://github.com/pyg-team/pytorch_geometric/pull/6681), [#6683](https://github.com/pyg-team/pytorch_geometric/pull/6683), [#6703](https://github.com/pyg-team/pytorch_geometric/pull/6703), [#6720](https://github.com/pyg-team/pytorch_geometric/pull/6720), [#6735](https://github.com/pyg-team/pytorch_geometric/pull/6735), [#6736](https://github.com/pyg-team/pytorch_geometric/pull/6736), [#6763](https://github.com/pyg-team/pytorch_geometric/pull/6763), [#6781](https://github.com/pyg-team/pytorch_geometric/pull/6781), [#6797](https://github.com/pyg-team/pytorch_geometric/pull/6797), [#6799](https://github.com/pyg-team/pytorch_geometric/pull/6799), [#6824](https://github.com/pyg-team/pytorch_geometric/pull/6824), [#6858](https://github.com/pyg-team/pytorch_geometric/pull/6858))
- Fixed a bug in which `data.to_heterogeneous()` filtered attributs in the wrong dimension ([#6522](https://github.com/pyg-team/pytorch_geometric/pull/6522))
- Breaking Change: Temporal sampling will now also sample nodes with an equal timestamp to the seed time (requires `pyg-lib>0.1.0`) ([#6517](https://github.com/pyg-team/pytorch_geometric/pull/6517))
- Changed `DataLoader` workers with affinity to start at `cpu0` ([#6512](https://github.com/pyg-team/pytorch_geometric/pull/6512))
- Allow 1D input to `global_*_pool` functions ([#6504](https://github.com/pyg-team/pytorch_geometric/pull/6504))
- Add information about dynamic shapes in `RGCNConv` ([#6482](https://github.com/pyg-team/pytorch_geometric/pull/6482))
- Fixed the use of types removed in `numpy 1.24.0` ([#6495](https://github.com/pyg-team/pytorch_geometric/pull/6495))
- Fixed keyword parameters in `examples/mnist_voxel_grid.py` ([#6478](https://github.com/pyg-team/pytorch_geometric/pull/6478))
- Unified `LightningNodeData` and `LightningLinkData` code paths ([#6473](https://github.com/pyg-team/pytorch_geometric/pull/6473))
- Allow indices with any integer type in `RGCNConv` ([#6463](https://github.com/pyg-team/pytorch_geometric/pull/6463))
- Re-structured the documentation ([#6420](https://github.com/pyg-team/pytorch_geometric/pull/6420), [#6423](https://github.com/pyg-team/pytorch_geometric/pull/6423), [#6429](https://github.com/pyg-team/pytorch_geometric/pull/6429), [#6440](https://github.com/pyg-team/pytorch_geometric/pull/6440), [#6443](https://github.com/pyg-team/pytorch_geometric/pull/6443), [#6445](https://github.com/pyg-team/pytorch_geometric/pull/6445), [#6452](https://github.com/pyg-team/pytorch_geometric/pull/6452), [#6453](https://github.com/pyg-team/pytorch_geometric/pull/6453), [#6458](https://github.com/pyg-team/pytorch_geometric/pull/6458), [#6459](https://github.com/pyg-team/pytorch_geometric/pull/6459), [#6460](https://github.com/pyg-team/pytorch_geometric/pull/6460), [#6490](https://github.com/pyg-team/pytorch_geometric/pull/6490), [#6491](https://github.com/pyg-team/pytorch_geometric/pull/6491), [#6693](https://github.com/pyg-team/pytorch_geometric/pull/6693), [#6744](https://github.com/pyg-team/pytorch_geometric/pull/6744))
- Fix the default arguments of `DataParallel` class ([#6376](https://github.com/pyg-team/pytorch_geometric/pull/6376))
- Fix `ImbalancedSampler` on sliced `InMemoryDataset` ([#6374](https://github.com/pyg-team/pytorch_geometric/pull/6374))
- Breaking Change: Changed the interface and implementation of `GraphMultisetTransformer` ([#6343](https://github.com/pyg-team/pytorch_geometric/pull/6343))
- Fixed the approximate PPR variant in `transforms.GDC` to not crash on graphs with isolated nodes ([#6242](https://github.com/pyg-team/pytorch_geometric/pull/6242))
- Added a warning when accesing `InMemoryDataset.data` ([#6318](https://github.com/pyg-team/pytorch_geometric/pull/6318))
- Drop `SparseTensor` dependency in `GraphStore` ([#5517](https://github.com/pyg-team/pytorch_geometric/pull/5517))
- Replace `NeighborSampler` with `NeighborLoader` in the distributed sampling example ([#6204](https://github.com/pyg-team/pytorch_geometric/pull/6307))
- Fixed the filtering of node features in `transforms.RemoveIsolatedNodes` ([#6308](https://github.com/pyg-team/pytorch_geometric/pull/6308))
- Fixed a bug in `DimeNet` that causes a output dimension mismatch ([#6305](https://github.com/pyg-team/pytorch_geometric/pull/6305))
- Fixed `Data.to_heterogeneous()` with empty `edge_index` ([#6304](https://github.com/pyg-team/pytorch_geometric/pull/6304))
- Unify `Explanation.node_mask` and `Explanation.node_feat_mask` ([#6267](https://github.com/pyg-team/pytorch_geometric/pull/6267))
- Moved thresholding config of the `Explainer` to `Explanation` ([#6215](https://github.com/pyg-team/pytorch_geometric/pull/6215))
- Fixed a bug in the output order in `HeteroLinear` for un-sorted type vectors ([#6198](https://github.com/pyg-team/pytorch_geometric/pull/6198))
- Breaking Change: Move `ExplainerConfig` arguments to the `Explainer` class ([#6176](https://github.com/pyg-team/pytorch_geometric/pull/6176))
- Refactored `NeighborSampler` to be input-type agnostic ([#6173](https://github.com/pyg-team/pytorch_geometric/pull/6173))
- Infer correct CUDA device ID in `profileit` decorator ([#6164](https://github.com/pyg-team/pytorch_geometric/pull/6164))
- Correctly use edge weights in `GDC` example ([#6159](https://github.com/pyg-team/pytorch_geometric/pull/6159))
- Breaking Change: Moved PyTorch Lightning data modules to `torch_geometric.data.lightning` ([#6140](https://github.com/pyg-team/pytorch_geometric/pull/6140))
- Make `torch_sparse` an optional dependency ([#6132](https://github.com/pyg-team/pytorch_geometric/pull/6132), [#6134](https://github.com/pyg-team/pytorch_geometric/pull/6134), [#6138](https://github.com/pyg-team/pytorch_geometric/pull/6138), [#6139](https://github.com/pyg-team/pytorch_geometric/pull/6139), [#7387](https://github.com/pyg-team/pytorch_geometric/pull/7387))
- Optimized `utils.softmax` implementation ([#6113](https://github.com/pyg-team/pytorch_geometric/pull/6113), [#6155](https://github.com/pyg-team/pytorch_geometric/pull/6155), [#6805](https://github.com/pyg-team/pytorch_geometric/pull/6805))
- Optimized `topk` implementation for large enough graphs ([#6123](https://github.com/pyg-team/pytorch_geometric/pull/6123))

### Removed

- `torch-sparse` is now an optional dependency ([#6625](https://github.com/pyg-team/pytorch_geometric/pull/6625), [#6626](https://github.com/pyg-team/pytorch_geometric/pull/6626), [#6627](https://github.com/pyg-team/pytorch_geometric/pull/6627), [#6628](https://github.com/pyg-team/pytorch_geometric/pull/6628), [#6629](https://github.com/pyg-team/pytorch_geometric/pull/6629), [#6630](https://github.com/pyg-team/pytorch_geometric/pull/6630))
- Removed most of the `torch-scatter` dependencies ([#6394](https://github.com/pyg-team/pytorch_geometric/pull/6394), [#6395](https://github.com/pyg-team/pytorch_geometric/pull/6395), [#6399](https://github.com/pyg-team/pytorch_geometric/pull/6399), [#6400](https://github.com/pyg-team/pytorch_geometric/pull/6400), [#6615](https://github.com/pyg-team/pytorch_geometric/pull/6615), [#6617](https://github.com/pyg-team/pytorch_geometric/pull/6617))
- Removed the deprecated classes `GNNExplainer` and `Explainer` from `nn.models` ([#6382](https://github.com/pyg-team/pytorch_geometric/pull/6382))
- Removed `target_index` argument in the `Explainer` interface ([#6270](https://github.com/pyg-team/pytorch_geometric/pull/6270))
- Removed `Aggregation.set_validate_args` option ([#6175](https://github.com/pyg-team/pytorch_geometric/pull/6175))

## [2.2.0] - 2022-12-01

### Added

- Extended `GNNExplainer` to support edge level explanations ([#6056](https://github.com/pyg-team/pytorch_geometric/pull/6056), [#6083](https://github.com/pyg-team/pytorch_geometric/pull/6083))
- Added CPU affinitization for `NodeLoader` ([#6005](https://github.com/pyg-team/pytorch_geometric/pull/6005))
- Added triplet sampling in `LinkNeighborLoader` ([#6004](https://github.com/pyg-team/pytorch_geometric/pull/6004))
- Added `FusedAggregation` of simple scatter reductions ([#6036](https://github.com/pyg-team/pytorch_geometric/pull/6036))
- Added a `to_smiles` function ([#6038](https://github.com/pyg-team/pytorch_geometric/pull/6038))
- Added option to make normalization coefficients trainable in `PNAConv` ([#6039](https://github.com/pyg-team/pytorch_geometric/pull/6039))
- Added `semi_grad` option in `VarAggregation` and `StdAggregation` ([#6042](https://github.com/pyg-team/pytorch_geometric/pull/6042))
- Allow for fused aggregations in `MultiAggregation` ([#6036](https://github.com/pyg-team/pytorch_geometric/pull/6036), [#6040](https://github.com/pyg-team/pytorch_geometric/pull/6040))
- Added `HeteroData` support for `to_captum_model` and added `to_captum_input` ([#5934](https://github.com/pyg-team/pytorch_geometric/pull/5934))
- Added `HeteroData` support in `RandomNodeLoader` ([#6007](https://github.com/pyg-team/pytorch_geometric/pull/6007))
- Added bipartite `GraphSAGE` example ([#5834](https://github.com/pyg-team/pytorch_geometric/pull/5834))
- Added `LRGBDataset` to include 5 datasets from the [Long Range Graph Benchmark](https://openreview.net/pdf?id=in7XC5RcjEn) ([#5935](https://github.com/pyg-team/pytorch_geometric/pull/5935))
- Added a warning for invalid node and edge type names in `HeteroData` ([#5990](https://github.com/pyg-team/pytorch_geometric/pull/5990))
- Added PyTorch 1.13 support ([#5975](https://github.com/pyg-team/pytorch_geometric/pull/5975))
- Added `int32` support in `NeighborLoader` ([#5948](https://github.com/pyg-team/pytorch_geometric/pull/5948))
- Add `dgNN` support and `FusedGATConv` implementation ([#5140](https://github.com/pyg-team/pytorch_geometric/pull/5140))
- Added `lr_scheduler_solver` and customized `lr_scheduler` classes ([#5942](https://github.com/pyg-team/pytorch_geometric/pull/5942))
- Add `to_fixed_size` graph transformer ([#5939](https://github.com/pyg-team/pytorch_geometric/pull/5939))
- Add support for symbolic tracing of `SchNet` model ([#5938](https://github.com/pyg-team/pytorch_geometric/pull/5938))
- Add support for customizable interaction graph in `SchNet` model ([#5919](https://github.com/pyg-team/pytorch_geometric/pull/5919))
- Started adding `torch.sparse` support to PyG ([#5906](https://github.com/pyg-team/pytorch_geometric/pull/5906), [#5944](https://github.com/pyg-team/pytorch_geometric/pull/5944), [#6003](https://github.com/pyg-team/pytorch_geometric/pull/6003), [#6633](https://github.com/pyg-team/pytorch_geometric/pull/6633))
- Added `HydroNet` water cluster dataset ([#5537](https://github.com/pyg-team/pytorch_geometric/pull/5537), [#5902](https://github.com/pyg-team/pytorch_geometric/pull/5902), [#5903](https://github.com/pyg-team/pytorch_geometric/pull/5903))
- Added explainability support for heterogeneous GNNs ([#5886](https://github.com/pyg-team/pytorch_geometric/pull/5886))
- Added `SparseTensor` support to `SuperGATConv` ([#5888](https://github.com/pyg-team/pytorch_geometric/pull/5888))
- Added TorchScript support for `AttentiveFP `([#5868](https://github.com/pyg-team/pytorch_geometric/pull/5868))
- Added `num_steps` argument to training and inference benchmarks ([#5898](https://github.com/pyg-team/pytorch_geometric/pull/5898))
- Added `torch.onnx.export` support ([#5877](https://github.com/pyg-team/pytorch_geometric/pull/5877), [#5997](https://github.com/pyg-team/pytorch_geometric/pull/5997))
- Enable VTune ITT in inference and training benchmarks ([#5830](https://github.com/pyg-team/pytorch_geometric/pull/5830), [#5878](https://github.com/pyg-team/pytorch_geometric/pull/5878))
- Add training benchmark ([#5774](https://github.com/pyg-team/pytorch_geometric/pull/5774))
- Added a "Link Prediction on MovieLens" Colab notebook ([#5823](https://github.com/pyg-team/pytorch_geometric/pull/5823))
- Added custom `sampler` support in `LightningDataModule` ([#5820](https://github.com/pyg-team/pytorch_geometric/pull/5820))
- Added a `return_semantic_attention_weights` argument `HANConv` ([#5787](https://github.com/pyg-team/pytorch_geometric/pull/5787))
- Added `disjoint` argument to `NeighborLoader` and `LinkNeighborLoader` ([#5775](https://github.com/pyg-team/pytorch_geometric/pull/5775))
- Added support for `input_time` in `NeighborLoader` ([#5763](https://github.com/pyg-team/pytorch_geometric/pull/5763))
- Added `disjoint` mode for temporal `LinkNeighborLoader` ([#5717](https://github.com/pyg-team/pytorch_geometric/pull/5717))
- Added `HeteroData` support for `transforms.Constant` ([#5700](https://github.com/pyg-team/pytorch_geometric/pull/5700))
- Added `np.memmap` support in `NeighborLoader` ([#5696](https://github.com/pyg-team/pytorch_geometric/pull/5696))
- Added `assortativity` that computes degree assortativity coefficient ([#5587](https://github.com/pyg-team/pytorch_geometric/pull/5587))
- Added `SSGConv` layer ([#5599](https://github.com/pyg-team/pytorch_geometric/pull/5599))
- Added `shuffle_node`, `mask_feature` and `add_random_edge` augmentation methdos ([#5548](https://github.com/pyg-team/pytorch_geometric/pull/5548))
- Added `dropout_path` augmentation that drops edges from a graph based on random walks ([#5531](https://github.com/pyg-team/pytorch_geometric/pull/5531))
- Add support for filling labels with dummy values in `HeteroData.to_homogeneous()` ([#5540](https://github.com/pyg-team/pytorch_geometric/pull/5540))
- Added `temporal_strategy` option to `neighbor_sample` ([#5576](https://github.com/pyg-team/pyg-lib/pull/5576))
- Added `torch_geometric.sampler` package to docs ([#5563](https://github.com/pyg-team/pytorch_geometric/pull/5563))
- Added the `DGraphFin` dynamic graph dataset ([#5504](https://github.com/pyg-team/pytorch_geometric/pull/5504))
- Added `dropout_edge` augmentation that randomly drops edges from a graph - the usage of `dropout_adj` is now deprecated ([#5495](https://github.com/pyg-team/pytorch_geometric/pull/5495))
- Added `dropout_node` augmentation that randomly drops nodes from a graph ([#5481](https://github.com/pyg-team/pytorch_geometric/pull/5481))
- Added `AddRandomMetaPaths` that adds edges based on random walks along a metapath ([#5397](https://github.com/pyg-team/pytorch_geometric/pull/5397))
- Added `WLConvContinuous` for performing WL refinement with continuous attributes ([#5316](https://github.com/pyg-team/pytorch_geometric/pull/5316))
- Added `print_summary` method for the `torch_geometric.data.Dataset` interface ([#5438](https://github.com/pyg-team/pytorch_geometric/pull/5438))
- Added `sampler` support to `LightningDataModule` ([#5456](https://github.com/pyg-team/pytorch_geometric/pull/5456), [#5457](https://github.com/pyg-team/pytorch_geometric/pull/5457))
- Added official splits to `MalNetTiny` dataset ([#5078](https://github.com/pyg-team/pytorch_geometric/pull/5078))
- Added `IndexToMask` and `MaskToIndex` transforms ([#5375](https://github.com/pyg-team/pytorch_geometric/pull/5375), [#5455](https://github.com/pyg-team/pytorch_geometric/pull/5455))
- Added `FeaturePropagation` transform ([#5387](https://github.com/pyg-team/pytorch_geometric/pull/5387))
- Added `PositionalEncoding` ([#5381](https://github.com/pyg-team/pytorch_geometric/pull/5381))
- Consolidated sampler routines behind `torch_geometric.sampler`, enabling ease of extensibility in the future ([#5312](https://github.com/pyg-team/pytorch_geometric/pull/5312), [#5365](https://github.com/pyg-team/pytorch_geometric/pull/5365), [#5402](https://github.com/pyg-team/pytorch_geometric/pull/5402), [#5404](https://github.com/pyg-team/pytorch_geometric/pull/5404)), [#5418](https://github.com/pyg-team/pytorch_geometric/pull/5418))
- Added `pyg-lib` neighbor sampling ([#5384](https://github.com/pyg-team/pytorch_geometric/pull/5384), [#5388](https://github.com/pyg-team/pytorch_geometric/pull/5388))
- Added `pyg_lib.segment_matmul` integration within `HeteroLinear` ([#5330](https://github.com/pyg-team/pytorch_geometric/pull/5330), [#5347](https://github.com/pyg-team/pytorch_geometric/pull/5347)))
- Enabled `bf16` support in benchmark scripts ([#5293](https://github.com/pyg-team/pytorch_geometric/pull/5293), [#5341](https://github.com/pyg-team/pytorch_geometric/pull/5341))
- Added `Aggregation.set_validate_args` option to skip validation of `dim_size` ([#5290](https://github.com/pyg-team/pytorch_geometric/pull/5290))
- Added `SparseTensor` support to inference and training benchmark suite ([#5242](https://github.com/pyg-team/pytorch_geometric/pull/5242), [#5258](https://github.com/pyg-team/pytorch_geometric/pull/5258), [#5881](https://github.com/pyg-team/pytorch_geometric/pull/5881))
- Added experimental mode in inference benchmarks ([#5254](https://github.com/pyg-team/pytorch_geometric/pull/5254))
- Added node classification example instrumented with [Weights and Biases (W&B) logging](https://wandb.com) and [W&B Sweeps](https://wandb.com/sweeps) ([#5192](https://github.com/pyg-team/pytorch_geometric/pull/5192))
- Added experimental mode for `utils.scatter` ([#5232](https://github.com/pyg-team/pytorch_geometric/pull/5232), [#5241](https://github.com/pyg-team/pytorch_geometric/pull/5241), [#5386](https://github.com/pyg-team/pytorch_geometric/pull/5386))
- Added missing test labels in `HGBDataset` ([#5233](https://github.com/pyg-team/pytorch_geometric/pull/5233))
- Added `BaseStorage.get()` functionality ([#5240](https://github.com/pyg-team/pytorch_geometric/pull/5240))
- Added a test to confirm that `to_hetero` works with `SparseTensor` ([#5222](https://github.com/pyg-team/pytorch_geometric/pull/5222))
- Added `torch_geometric.explain` module with base functionality for explainability methods ([#5804](https://github.com/pyg-team/pytorch_geometric/pull/5804), [#6054](https://github.com/pyg-team/pytorch_geometric/pull/6054), [#6089](https://github.com/pyg-team/pytorch_geometric/pull/6089))

### Changed

- Moved and adapted `GNNExplainer` from `torch_geometric.nn` to `torch_geometric.explain.algorithm` ([#5967](https://github.com/pyg-team/pytorch_geometric/pull/5967), [#6065](https://github.com/pyg-team/pytorch_geometric/pull/6065))
- Optimized scatter implementations for CPU/GPU, both with and without backward computation ([#6051](https://github.com/pyg-team/pytorch_geometric/pull/6051), [#6052](https://github.com/pyg-team/pytorch_geometric/pull/6052))
- Support temperature value in `dense_mincut_pool` ([#5908](https://github.com/pyg-team/pytorch_geometric/pull/5908))
- Fixed a bug in which `VirtualNode` mistakenly treated node features as edge features ([#5819](https://github.com/pyg-team/pytorch_geometric/pull/5819))
- Fixed `setter` and `getter` handling in `BaseStorage` ([#5815](https://github.com/pyg-team/pytorch_geometric/pull/5815))
- Fixed `path` in `hetero_conv_dblp.py` example ([#5686](https://github.com/pyg-team/pytorch_geometric/pull/5686))
- Fix `auto_select_device` routine in GraphGym for PyTorch Lightning>=1.7 ([#5677](https://github.com/pyg-team/pytorch_geometric/pull/5677))
- Support `in_channels` with `tuple` in `GENConv` for bipartite message passing ([#5627](https://github.com/pyg-team/pytorch_geometric/pull/5627), [#5641](https://github.com/pyg-team/pytorch_geometric/pull/5641))
- Handle cases of not having enough possible negative edges in `RandomLinkSplit` ([#5642](https://github.com/pyg-team/pytorch_geometric/pull/5642))
- Fix `RGCN+pyg-lib` for `LongTensor` input ([#5610](https://github.com/pyg-team/pytorch_geometric/pull/5610))
- Improved type hint support ([#5842](https://github.com/pyg-team/pytorch_geometric/pull/5842), [#5603](https://github.com/pyg-team/pytorch_geometric/pull/5603), [#5659](https://github.com/pyg-team/pytorch_geometric/pull/5659), [#5664](https://github.com/pyg-team/pytorch_geometric/pull/5664), [#5665](https://github.com/pyg-team/pytorch_geometric/pull/5665), [#5666](https://github.com/pyg-team/pytorch_geometric/pull/5666), [#5667](https://github.com/pyg-team/pytorch_geometric/pull/5667), [#5668](https://github.com/pyg-team/pytorch_geometric/pull/5668), [#5669](https://github.com/pyg-team/pytorch_geometric/pull/5669), [#5673](https://github.com/pyg-team/pytorch_geometric/pull/5673), [#5675](https://github.com/pyg-team/pytorch_geometric/pull/5675), [#5673](https://github.com/pyg-team/pytorch_geometric/pull/5676), [#5678](https://github.com/pyg-team/pytorch_geometric/pull/5678), [#5682](https://github.com/pyg-team/pytorch_geometric/pull/5682), [#5683](https://github.com/pyg-team/pytorch_geometric/pull/5683), [#5684](https://github.com/pyg-team/pytorch_geometric/pull/5684), [#5685](https://github.com/pyg-team/pytorch_geometric/pull/5685), [#5687](https://github.com/pyg-team/pytorch_geometric/pull/5687), [#5688](https://github.com/pyg-team/pytorch_geometric/pull/5688), [#5695](https://github.com/pyg-team/pytorch_geometric/pull/5695), [#5699](https://github.com/pyg-team/pytorch_geometric/pull/5699), [#5701](https://github.com/pyg-team/pytorch_geometric/pull/5701), [#5702](https://github.com/pyg-team/pytorch_geometric/pull/5702), [#5703](https://github.com/pyg-team/pytorch_geometric/pull/5703), [#5706](https://github.com/pyg-team/pytorch_geometric/pull/5706), [#5707](https://github.com/pyg-team/pytorch_geometric/pull/5707), [#5710](https://github.com/pyg-team/pytorch_geometric/pull/5710), [#5714](https://github.com/pyg-team/pytorch_geometric/pull/5714), [#5715](https://github.com/pyg-team/pytorch_geometric/pull/5715), [#5716](https://github.com/pyg-team/pytorch_geometric/pull/5716), [#5722](https://github.com/pyg-team/pytorch_geometric/pull/5722), [#5724](https://github.com/pyg-team/pytorch_geometric/pull/5724), [#5725](https://github.com/pyg-team/pytorch_geometric/pull/5725), [#5726](https://github.com/pyg-team/pytorch_geometric/pull/5726), [#5729](https://github.com/pyg-team/pytorch_geometric/pull/5729), [#5730](https://github.com/pyg-team/pytorch_geometric/pull/5730), [#5731](https://github.com/pyg-team/pytorch_geometric/pull/5731), [#5732](https://github.com/pyg-team/pytorch_geometric/pull/5732), [#5733](https://github.com/pyg-team/pytorch_geometric/pull/5733), [#5743](https://github.com/pyg-team/pytorch_geometric/pull/5743), [#5734](https://github.com/pyg-team/pytorch_geometric/pull/5734), [#5735](https://github.com/pyg-team/pytorch_geometric/pull/5735), [#5736](https://github.com/pyg-team/pytorch_geometric/pull/5736), [#5737](https://github.com/pyg-team/pytorch_geometric/pull/5737), [#5738](https://github.com/pyg-team/pytorch_geometric/pull/5738), [#5747](https://github.com/pyg-team/pytorch_geometric/pull/5747), [#5752](https://github.com/pyg-team/pytorch_geometric/pull/5752), [#5753](https://github.com/pyg-team/pytorch_geometric/pull/5753), [#5754](https://github.com/pyg-team/pytorch_geometric/pull/5754), [#5756](https://github.com/pyg-team/pytorch_geometric/pull/5756), [#5757](https://github.com/pyg-team/pytorch_geometric/pull/5757), [#5758](https://github.com/pyg-team/pytorch_geometric/pull/5758), [#5760](https://github.com/pyg-team/pytorch_geometric/pull/5760), [#5766](https://github.com/pyg-team/pytorch_geometric/pull/5766), [#5767](https://github.com/pyg-team/pytorch_geometric/pull/5767), [#5768](https://github.com/pyg-team/pytorch_geometric/pull/5768)), [#5781](https://github.com/pyg-team/pytorch_geometric/pull/5781), [#5778](https://github.com/pyg-team/pytorch_geometric/pull/5778), [#5797](https://github.com/pyg-team/pytorch_geometric/pull/5797), [#5798](https://github.com/pyg-team/pytorch_geometric/pull/5798), [#5799](https://github.com/pyg-team/pytorch_geometric/pull/5799), [#5800](https://github.com/pyg-team/pytorch_geometric/pull/5800), [#5806](https://github.com/pyg-team/pytorch_geometric/pull/5806), [#5810](https://github.com/pyg-team/pytorch_geometric/pull/5810), [#5811](https://github.com/pyg-team/pytorch_geometric/pull/5811), [#5828](https://github.com/pyg-team/pytorch_geometric/pull/5828), [#5847](https://github.com/pyg-team/pytorch_geometric/pull/5847), [#5851](https://github.com/pyg-team/pytorch_geometric/pull/5851), [#5852](https://github.com/pyg-team/pytorch_geometric/pull/5852))
- Avoid modifying `mode_kwargs` in `MultiAggregation` ([#5601](https://github.com/pyg-team/pytorch_geometric/pull/5601))
- Changed `BatchNorm` to allow for batches of size one during training ([#5530](https://github.com/pyg-team/pytorch_geometric/pull/5530), [#5614](https://github.com/pyg-team/pytorch_geometric/pull/5614))
- Integrated better temporal sampling support by requiring that local neighborhoods are sorted according to time ([#5516](https://github.com/pyg-team/pytorch_geometric/issues/5516), [#5602](https://github.com/pyg-team/pytorch_geometric/issues/5602))
- Fixed a bug when applying several scalers with `PNAConv` ([#5514](https://github.com/pyg-team/pytorch_geometric/issues/5514))
- Allow `.` in `ParameterDict` key names ([#5494](https://github.com/pyg-team/pytorch_geometric/pull/5494))
- Renamed `drop_unconnected_nodes` to `drop_unconnected_node_types` and `drop_orig_edges` to `drop_orig_edge_types` in `AddMetapaths` ([#5490](https://github.com/pyg-team/pytorch_geometric/pull/5490))
- Improved `utils.scatter` performance by explicitly choosing better implementation for `add` and `mean` reduction ([#5399](https://github.com/pyg-team/pytorch_geometric/pull/5399))
- Fix `to_dense_adj` with empty `edge_index` ([#5476](https://github.com/pyg-team/pytorch_geometric/pull/5476))
- The `AttentionalAggregation` module can now be applied to compute attentin on a per-feature level ([#5449](https://github.com/pyg-team/pytorch_geometric/pull/5449))
- Ensure equal lenghts of `num_neighbors` across edge types in `NeighborLoader` ([#5444](https://github.com/pyg-team/pytorch_geometric/pull/5444))
- Fixed a bug in `TUDataset` in which node features were wrongly constructed whenever `node_attributes` only hold a single feature (_e.g._, in `PROTEINS`) ([#5441](https://github.com/pyg-team/pytorch_geometric/pull/5441))
- Breaking change: removed `num_neighbors` as an attribute of loader ([#5404](https://github.com/pyg-team/pytorch_geometric/pull/5404))
- `ASAPooling` is now jittable ([#5395](https://github.com/pyg-team/pytorch_geometric/pull/5395))
- Updated unsupervised `GraphSAGE` example to leverage `LinkNeighborLoader` ([#5317](https://github.com/pyg-team/pytorch_geometric/pull/5317))
- Replace in-place operations with out-of-place ones to align with `torch.scatter_reduce` API ([#5353](https://github.com/pyg-team/pytorch_geometric/pull/5353))
- Breaking bugfix: `PointTransformerConv` now correctly uses `sum` aggregation ([#5332](https://github.com/pyg-team/pytorch_geometric/pull/5332))
- Improve out-of-bounds error message in `MessagePassing` ([#5339](https://github.com/pyg-team/pytorch_geometric/pull/5339))
- Allow file names of a `Dataset` to be specified as either property and method ([#5338](https://github.com/pyg-team/pytorch_geometric/pull/5338))
- Fixed separating a list of `SparseTensor` within `InMemoryDataset` ([#5299](https://github.com/pyg-team/pytorch_geometric/pull/5299))
- Improved name resolving of normalization layers ([#5277](https://github.com/pyg-team/pytorch_geometric/pull/5277))
- Fail gracefully on `GLIBC` errors within `torch-spline-conv` ([#5276](https://github.com/pyg-team/pytorch_geometric/pull/5276))
- Fixed `Dataset.num_classes` in case a `transform` modifies `data.y` ([#5274](https://github.com/pyg-team/pytorch_geometric/pull/5274))
- Allow customization of the activation function within `PNAConv` ([#5262](https://github.com/pyg-team/pytorch_geometric/pull/5262))
- Do not fill `InMemoryDataset` cache on `dataset.num_features` ([#5264](https://github.com/pyg-team/pytorch_geometric/pull/5264))
- Changed tests relying on `dblp` datasets to instead use synthetic data ([#5250](https://github.com/pyg-team/pytorch_geometric/pull/5250))
- Fixed a bug for the initialization of activation function examples in `custom_graphgym` ([#5243](https://github.com/pyg-team/pytorch_geometric/pull/5243))
- Allow any integer tensors when checking edge_index input to message passing ([5281](https://github.com/pyg-team/pytorch_geometric/pull/5281))

### Removed

- Removed `scatter_reduce` option from experimental mode ([#5399](https://github.com/pyg-team/pytorch_geometric/pull/5399))

## [2.1.0] - 2022-08-17

### Added

- Added the test for `DeepGCNLayer` ([#5704](https://github.com/pyg-team/pytorch_geometric/pull/5704))
- Allow `.` in `ModuleDict` key names ([#5227](https://github.com/pyg-team/pytorch_geometric/pull/5227))
- Added `edge_label_time` argument to `LinkNeighborLoader` ([#5137](https://github.com/pyg-team/pytorch_geometric/pull/5137), [#5173](https://github.com/pyg-team/pytorch_geometric/pull/5173))
- Let `ImbalancedSampler` accept `torch.Tensor` as input ([#5138](https://github.com/pyg-team/pytorch_geometric/pull/5138))
- Added `flow` argument to `gcn_norm` to correctly normalize the adjacency matrix in `GCNConv` ([#5149](https://github.com/pyg-team/pytorch_geometric/pull/5149))
- `NeighborSampler` supports graphs without edges ([#5072](https://github.com/pyg-team/pytorch_geometric/pull/5072))
- Added the `MeanSubtractionNorm` layer ([#5068](https://github.com/pyg-team/pytorch_geometric/pull/5068))
- Added `pyg_lib.segment_matmul` integration within `RGCNConv` ([#5052](https://github.com/pyg-team/pytorch_geometric/pull/5052), [#5096](https://github.com/pyg-team/pytorch_geometric/pull/5096))
- Support `SparseTensor` as edge label in `LightGCN` (#[5046](https://github.com/pyg-team/pytorch_geometric/issues/5046))
- Added support for `BasicGNN` models within `to_hetero` ([#5091](https://github.com/pyg-team/pytorch_geometric/pull/5091))
- Added support for computing weighted metapaths in `AddMetapaths` ([#5049](https://github.com/pyg-team/pytorch_geometric/pull/5049))
- Added inference benchmark suite ([#4915](https://github.com/pyg-team/pytorch_geometric/pull/4915))
- Added a dynamically sized batch sampler for filling a mini-batch with a variable number of samples up to a maximum size ([#4972](https://github.com/pyg-team/pytorch_geometric/pull/4972))
- Added fine grained options for setting `bias` and `dropout` per layer in the `MLP` model ([#4981](https://github.com/pyg-team/pytorch_geometric/pull/4981))
- Added `EdgeCNN` model ([#4991](https://github.com/pyg-team/pytorch_geometric/pull/4991))
- Added scalable `inference` mode in `BasicGNN` with layer-wise neighbor loading ([#4977](https://github.com/pyg-team/pytorch_geometric/pull/4977))
- Added inference benchmarks ([#4892](https://github.com/pyg-team/pytorch_geometric/pull/4892), [#5107](https://github.com/pyg-team/pytorch_geometric/pull/5107))
- Added PyTorch 1.12 support ([#4975](https://github.com/pyg-team/pytorch_geometric/pull/4975))
- Added `unbatch_edge_index` functionality for splitting an `edge_index` tensor according to a `batch` vector ([#4903](https://github.com/pyg-team/pytorch_geometric/pull/4903))
- Added node-wise normalization mode in `LayerNorm` ([#4944](https://github.com/pyg-team/pytorch_geometric/pull/4944))
- Added support for `normalization_resolver` ([#4926](https://github.com/pyg-team/pytorch_geometric/pull/4926), [#4951](https://github.com/pyg-team/pytorch_geometric/pull/4951), [#4958](https://github.com/pyg-team/pytorch_geometric/pull/4958), [#4959](https://github.com/pyg-team/pytorch_geometric/pull/4959))
- Added notebook tutorial for `torch_geometric.nn.aggr` package to documentation ([#4927](https://github.com/pyg-team/pytorch_geometric/pull/4927))
- Added support for `follow_batch` for lists or dictionaries of tensors ([#4837](https://github.com/pyg-team/pytorch_geometric/pull/4837))
- Added `Data.validate()` and `HeteroData.validate()` functionality ([#4885](https://github.com/pyg-team/pytorch_geometric/pull/4885))
- Added `LinkNeighborLoader` support to `LightningDataModule` ([#4868](https://github.com/pyg-team/pytorch_geometric/pull/4868))
- Added `predict()` support to the `LightningNodeData` module ([#4884](https://github.com/pyg-team/pytorch_geometric/pull/4884))
- Added `time_attr` argument to `LinkNeighborLoader` ([#4877](https://github.com/pyg-team/pytorch_geometric/pull/4877), [#4908](https://github.com/pyg-team/pytorch_geometric/pull/4908))
- Added a `filter_per_worker` argument to data loaders to allow filtering of data within sub-processes ([#4873](https://github.com/pyg-team/pytorch_geometric/pull/4873))
- Added a `NeighborLoader` benchmark script ([#4815](https://github.com/pyg-team/pytorch_geometric/pull/4815), [#4862](https://github.com/pyg-team/pytorch_geometric/pull/4862/files))
- Added support for `FeatureStore` and `GraphStore` in `NeighborLoader` ([#4817](https://github.com/pyg-team/pytorch_geometric/pull/4817), [#4851](https://github.com/pyg-team/pytorch_geometric/pull/4851), [#4854](https://github.com/pyg-team/pytorch_geometric/pull/4854), [#4856](https://github.com/pyg-team/pytorch_geometric/pull/4856), [#4857](https://github.com/pyg-team/pytorch_geometric/pull/4857), [#4882](https://github.com/pyg-team/pytorch_geometric/pull/4882), [#4883](https://github.com/pyg-team/pytorch_geometric/pull/4883), [#4929](https://github.com/pyg-team/pytorch_geometric/pull/4929), [#4992](https://github.com/pyg-team/pytorch_geometric/pull/4922), [#4962](https://github.com/pyg-team/pytorch_geometric/pull/4962), [#4968](https://github.com/pyg-team/pytorch_geometric/pull/4968), [#5037](https://github.com/pyg-team/pytorch_geometric/pull/5037), [#5088](https://github.com/pyg-team/pytorch_geometric/pull/5088), [#5270](https://github.com/pyg-team/pytorch_geometric/pull/5270), [#5307](https://github.com/pyg-team/pytorch_geometric/pull/5307), [#5318](https://github.com/pyg-team/pytorch_geometric/pull/5318))
- Added a `normalize` parameter to `dense_diff_pool` ([#4847](https://github.com/pyg-team/pytorch_geometric/pull/4847))
- Added `size=None` explanation to jittable `MessagePassing` modules in the documentation ([#4850](https://github.com/pyg-team/pytorch_geometric/pull/4850))
- Added documentation to the `DataLoaderIterator` class ([#4838](https://github.com/pyg-team/pytorch_geometric/pull/4838))
- Added `GraphStore` support to `Data` and `HeteroData` ([#4816](https://github.com/pyg-team/pytorch_geometric/pull/4816))
- Added `FeatureStore` support to `Data` and `HeteroData` ([#4807](https://github.com/pyg-team/pytorch_geometric/pull/4807), [#4853](https://github.com/pyg-team/pytorch_geometric/pull/4853))
- Added `FeatureStore` and `GraphStore` abstractions ([#4534](https://github.com/pyg-team/pytorch_geometric/pull/4534), [#4568](https://github.com/pyg-team/pytorch_geometric/pull/4568), [#5120](https://github.com/pyg-team/pytorch_geometric/pull/5120))
- Added support for dense aggregations in `global_*_pool` ([#4827](https://github.com/pyg-team/pytorch_geometric/pull/4827))
- Added Python version requirement ([#4825](https://github.com/pyg-team/pytorch_geometric/pull/4825))
- Added TorchScript support to `JumpingKnowledge` module ([#4805](https://github.com/pyg-team/pytorch_geometric/pull/4805))
- Added a `max_sample` argument to `AddMetaPaths` in order to tackle very dense metapath edges ([#4750](https://github.com/pyg-team/pytorch_geometric/pull/4750))
- Test `HANConv` with empty tensors ([#4756](https://github.com/pyg-team/pytorch_geometric/pull/4756), [#4841](https://github.com/pyg-team/pytorch_geometric/pull/4841))
- Added the `bias` vector to the `GCN` model definition in the "Create Message Passing Networks" tutorial ([#4755](https://github.com/pyg-team/pytorch_geometric/pull/4755))
- Added `transforms.RootedSubgraph` interface with two implementations: `RootedEgoNets` and `RootedRWSubgraph` ([#3926](https://github.com/pyg-team/pytorch_geometric/pull/3926))
- Added `ptr` vectors for `follow_batch` attributes within `Batch.from_data_list` ([#4723](https://github.com/pyg-team/pytorch_geometric/pull/4723))
- Added `torch_geometric.nn.aggr` package ([#4687](https://github.com/pyg-team/pytorch_geometric/pull/4687), [#4721](https://github.com/pyg-team/pytorch_geometric/pull/4721), [#4731](https://github.com/pyg-team/pytorch_geometric/pull/4731), [#4762](https://github.com/pyg-team/pytorch_geometric/pull/4762), [#4749](https://github.com/pyg-team/pytorch_geometric/pull/4749), [#4779](https://github.com/pyg-team/pytorch_geometric/pull/4779), [#4863](https://github.com/pyg-team/pytorch_geometric/pull/4863), [#4864](https://github.com/pyg-team/pytorch_geometric/pull/4864), [#4865](https://github.com/pyg-team/pytorch_geometric/pull/4865), [#4866](https://github.com/pyg-team/pytorch_geometric/pull/4866), [#4872](https://github.com/pyg-team/pytorch_geometric/pull/4872), [#4934](https://github.com/pyg-team/pytorch_geometric/pull/4934), [#4935](https://github.com/pyg-team/pytorch_geometric/pull/4935), [#4957](https://github.com/pyg-team/pytorch_geometric/pull/4957), [#4973](https://github.com/pyg-team/pytorch_geometric/pull/4973), [#4973](https://github.com/pyg-team/pytorch_geometric/pull/4973), [#4986](https://github.com/pyg-team/pytorch_geometric/pull/4986), [#4995](https://github.com/pyg-team/pytorch_geometric/pull/4995), [#5000](https://github.com/pyg-team/pytorch_geometric/pull/5000), [#5034](https://github.com/pyg-team/pytorch_geometric/pull/5034), [#5036](https://github.com/pyg-team/pytorch_geometric/pull/5036), [#5039](https://github.com/pyg-team/pytorch_geometric/issues/5039), [#4522](https://github.com/pyg-team/pytorch_geometric/pull/4522), [#5033](https://github.com/pyg-team/pytorch_geometric/pull/5033), [#5085](https://github.com/pyg-team/pytorch_geometric/pull/5085), [#5097](https://github.com/pyg-team/pytorch_geometric/pull/5097), [#5099](https://github.com/pyg-team/pytorch_geometric/pull/5099), [#5104](https://github.com/pyg-team/pytorch_geometric/pull/5104), [#5113](https://github.com/pyg-team/pytorch_geometric/pull/5113), [#5130](https://github.com/pyg-team/pytorch_geometric/pull/5130), [#5098](https://github.com/pyg-team/pytorch_geometric/pull/5098), [#5191](https://github.com/pyg-team/pytorch_geometric/pull/5191))
- Added the `DimeNet++` model ([#4432](https://github.com/pyg-team/pytorch_geometric/pull/4432), [#4699](https://github.com/pyg-team/pytorch_geometric/pull/4699), [#4700](https://github.com/pyg-team/pytorch_geometric/pull/4700), [#4800](https://github.com/pyg-team/pytorch_geometric/pull/4800))
- Added an example of using PyG with PyTorch Ignite ([#4487](https://github.com/pyg-team/pytorch_geometric/pull/4487))
- Added `GroupAddRev` module with support for reducing training GPU memory ([#4671](https://github.com/pyg-team/pytorch_geometric/pull/4671), [#4701](https://github.com/pyg-team/pytorch_geometric/pull/4701), [#4715](https://github.com/pyg-team/pytorch_geometric/pull/4715), [#4730](https://github.com/pyg-team/pytorch_geometric/pull/4730))
- Added benchmarks via [`wandb`](https://wandb.ai/site) ([#4656](https://github.com/pyg-team/pytorch_geometric/pull/4656), [#4672](https://github.com/pyg-team/pytorch_geometric/pull/4672), [#4676](https://github.com/pyg-team/pytorch_geometric/pull/4676))
- Added `unbatch` functionality ([#4628](https://github.com/pyg-team/pytorch_geometric/pull/4628))
- Confirm that `to_hetero()` works with custom functions, _e.g._, `dropout_adj` ([4653](https://github.com/pyg-team/pytorch_geometric/pull/4653))
- Added the `MLP.plain_last=False` option ([4652](https://github.com/pyg-team/pytorch_geometric/pull/4652))
- Added a check in `HeteroConv` and `to_hetero()` to ensure that `MessagePassing.add_self_loops` is disabled ([4647](https://github.com/pyg-team/pytorch_geometric/pull/4647))
- Added `HeteroData.subgraph()`, `HeteroData.node_type_subgraph()` and `HeteroData.edge_type_subgraph()` support ([#4635](https://github.com/pyg-team/pytorch_geometric/pull/4635))
- Added the `AQSOL` dataset ([#4626](https://github.com/pyg-team/pytorch_geometric/pull/4626))
- Added `HeteroData.node_items()` and `HeteroData.edge_items()` functionality ([#4644](https://github.com/pyg-team/pytorch_geometric/pull/4644))
- Added PyTorch Lightning support in GraphGym ([#4511](https://github.com/pyg-team/pytorch_geometric/pull/4511), [#4516](https://github.com/pyg-team/pytorch_geometric/pull/4516) [#4531](https://github.com/pyg-team/pytorch_geometric/pull/4531), [#4689](https://github.com/pyg-team/pytorch_geometric/pull/4689), [#4843](https://github.com/pyg-team/pytorch_geometric/pull/4843))
- Added support for returning embeddings in `MLP` models ([#4625](https://github.com/pyg-team/pytorch_geometric/pull/4625))
- Added faster initialization of `NeighborLoader` in case edge indices are already sorted (via `is_sorted=True`) ([#4620](https://github.com/pyg-team/pytorch_geometric/pull/4620), [#4702](https://github.com/pyg-team/pytorch_geometric/pull/4702))
- Added `AddPositionalEncoding` transform ([#4521](https://github.com/pyg-team/pytorch_geometric/pull/4521))
- Added `HeteroData.is_undirected()` support ([#4604](https://github.com/pyg-team/pytorch_geometric/pull/4604))
- Added the `Genius` and `Wiki` datasets to `nn.datasets.LINKXDataset` ([#4570](https://github.com/pyg-team/pytorch_geometric/pull/4570), [#4600](https://github.com/pyg-team/pytorch_geometric/pull/4600))
- Added `nn.aggr.EquilibrumAggregation` implicit global layer ([#4522](https://github.com/pyg-team/pytorch_geometric/pull/4522))
- Added support for graph-level outputs in `to_hetero` ([#4582](https://github.com/pyg-team/pytorch_geometric/pull/4582))
- Added `CHANGELOG.md` ([#4581](https://github.com/pyg-team/pytorch_geometric/pull/4581))
- Added `HeteroData` support to the `RemoveIsolatedNodes` transform ([#4479](https://github.com/pyg-team/pytorch_geometric/pull/4479))
- Added `HeteroData.num_features` functionality ([#4504](https://github.com/pyg-team/pytorch_geometric/pull/4504))
- Added support for projecting features before propagation in `SAGEConv` ([#4437](https://github.com/pyg-team/pytorch_geometric/pull/4437))
- Added `Geom-GCN` splits to the `Planetoid` datasets ([#4442](https://github.com/pyg-team/pytorch_geometric/pull/4442))
- Added a `LinkNeighborLoader` for training scalable link predictions models [#4396](https://github.com/pyg-team/pytorch_geometric/pull/4396), [#4439](https://github.com/pyg-team/pytorch_geometric/pull/4439), [#4441](https://github.com/pyg-team/pytorch_geometric/pull/4441), [#4446](https://github.com/pyg-team/pytorch_geometric/pull/4446), [#4508](https://github.com/pyg-team/pytorch_geometric/pull/4508), [#4509](https://github.com/pyg-team/pytorch_geometric/pull/4509))
- Added an unsupervised `GraphSAGE` example on `PPI` ([#4416](https://github.com/pyg-team/pytorch_geometric/pull/4416))
- Added support for `LSTM` aggregation in `SAGEConv` ([#4379](https://github.com/pyg-team/pytorch_geometric/pull/4379))
- Added support for floating-point labels in `RandomLinkSplit` ([#4311](https://github.com/pyg-team/pytorch_geometric/pull/4311), [#4383](https://github.com/pyg-team/pytorch_geometric/pull/4383))
- Added support for `torch.data` `DataPipes` ([#4302](https://github.com/pyg-team/pytorch_geometric/pull/4302), [#4345](https://github.com/pyg-team/pytorch_geometric/pull/4345), [#4349](https://github.com/pyg-team/pytorch_geometric/pull/4349))
- Added support for the `cosine` argument in the `KNNGraph`/`RadiusGraph` transforms ([#4344](https://github.com/pyg-team/pytorch_geometric/pull/4344))
- Added support graph-level attributes in `networkx` conversion ([#4343](https://github.com/pyg-team/pytorch_geometric/pull/4343))
- Added support for renaming node types via `HeteroData.rename` ([#4329](https://github.com/pyg-team/pytorch_geometric/pull/4329))
- Added an example to load a trained PyG model in C++ ([#4307](https://github.com/pyg-team/pytorch_geometric/pull/4307))
- Added a `MessagePassing.explain_message` method to customize making explanations on messages ([#4278](https://github.com/pyg-team/pytorch_geometric/pull/4278), [#4448](https://github.com/pyg-team/pytorch_geometric/pull/4448)))
- Added support for `GATv2Conv` in the `nn.models.GAT` model ([#4357](https://github.com/pyg-team/pytorch_geometric/pull/4357))
- Added `HeteroData.subgraph` functionality ([#4243](https://github.com/pyg-team/pytorch_geometric/pull/4243))
- Added the `MaskLabel` module and a corresponding masked label propagation example ([#4197](https://github.com/pyg-team/pytorch_geometric/pull/4197))
- Added temporal sampling support to `NeighborLoader` ([#4025](https://github.com/pyg-team/pytorch_geometric/pull/4025))
- Added an example for unsupervised heterogeneous graph learning based on "Deep Multiplex Graph Infomax" ([#3189](https://github.com/pyg-team/pytorch_geometric/pull/3189))

### Changed

- Changed docstring for `RandomLinkSplit` ([#5190](https://github.com/pyg-team/pytorch_geometric/issues/5190))
- Switched to PyTorch `scatter_reduce` implementation - experimental feature ([#5120](https://github.com/pyg-team/pytorch_geometric/pull/5120))
- Fixed `RGATConv` device mismatches for `f-scaled` mode ([#5187](https://github.com/pyg-team/pytorch_geometric/pull/5187))
- Allow for multi-dimensional `edge_labels` in `LinkNeighborLoader` ([#5186](https://github.com/pyg-team/pytorch_geometric/pull/5186))
- Fixed `GINEConv` bug with non-sequential input ([#5154](https://github.com/pyg-team/pytorch_geometric/pull/5154))
- Improved error message ([#5095](https://github.com/pyg-team/pytorch_geometric/pull/5095))
- Fixed `HGTLoader` bug which produced outputs with missing edge types ([#5067](https://github.com/pyg-team/pytorch_geometric/pull/5067))
- Fixed dynamic inheritance issue in data batching ([#5051](https://github.com/pyg-team/pytorch_geometric/pull/5051))
- Fixed `load_state_dict` in `Linear` with `strict=False` mode ([5094](https://github.com/pyg-team/pytorch_geometric/pull/5094))
- Fixed typo in `MaskLabel.ratio_mask` ([5093](https://github.com/pyg-team/pytorch_geometric/pull/5093))
- Fixed `data.num_node_features` computation for sparse matrices ([5089](https://github.com/pyg-team/pytorch_geometric/pull/5089))
- Fixed `torch.fx` bug with `torch.nn.aggr` package ([#5021](https://github.com/pyg-team/pytorch_geometric/pull/5021)))
- Fixed `GenConv` test ([4993](https://github.com/pyg-team/pytorch_geometric/pull/4993))
- Fixed packaging tests for Python 3.10 ([4982](https://github.com/pyg-team/pytorch_geometric/pull/4982))
- Changed `act_dict` (part of `graphgym`) to create individual instances instead of reusing the same ones everywhere ([4978](https://github.com/pyg-team/pytorch_geometric/pull/4978))
- Fixed issue where one-hot tensors were passed to `F.one_hot` ([4970](https://github.com/pyg-team/pytorch_geometric/pull/4970))
- Fixed `bool` arugments in `argparse` in `benchmark/` ([#4967](https://github.com/pyg-team/pytorch_geometric/pull/4967))
- Fixed `BasicGNN` for `num_layers=1`, which now respects a desired number of `out_channels` ([#4943](https://github.com/pyg-team/pytorch_geometric/pull/4943))
- `len(batch)` will now return the number of graphs inside the batch, not the number of attributes ([#4931](https://github.com/pyg-team/pytorch_geometric/pull/4931))
- Fixed `data.subgraph` generation for 0-dim tensors ([#4932](https://github.com/pyg-team/pytorch_geometric/pull/4932))
- Removed unnecssary inclusion of self-loops when sampling negative edges ([#4880](https://github.com/pyg-team/pytorch_geometric/pull/4880))
- Fixed `InMemoryDataset` inferring wrong `len` for lists of tensors ([#4837](https://github.com/pyg-team/pytorch_geometric/pull/4837))
- Fixed `Batch.separate` when using it for lists of tensors ([#4837](https://github.com/pyg-team/pytorch_geometric/pull/4837))
- Correct docstring for SAGEConv ([#4852](https://github.com/pyg-team/pytorch_geometric/pull/4852))
- Fixed a bug in `TUDataset` where `pre_filter` was not applied whenever `pre_transform` was present
- Renamed `RandomTranslate` to `RandomJitter` - the usage of `RandomTranslate` is now deprecated ([#4828](https://github.com/pyg-team/pytorch_geometric/pull/4828))
- Do not allow accessing edge types in `HeteroData` with two node types when there exists multiple relations between these types ([#4782](https://github.com/pyg-team/pytorch_geometric/pull/4782))
- Allow `edge_type == rev_edge_type` argument in `RandomLinkSplit` ([#4757](https://github.com/pyg-team/pytorch_geometric/pull/4757), [#5221](https://github.com/pyg-team/pytorch_geometric/pull/5221))
- Fixed a numerical instability in the `GeneralConv` and `neighbor_sample` tests ([#4754](https://github.com/pyg-team/pytorch_geometric/pull/4754))
- Fixed a bug in `HANConv` in which destination node features rather than source node features were propagated ([#4753](https://github.com/pyg-team/pytorch_geometric/pull/4753))
- Fixed versions of `checkout` and `setup-python` in CI ([#4751](https://github.com/pyg-team/pytorch_geometric/pull/4751))
- Fixed `protobuf` version ([#4719](https://github.com/pyg-team/pytorch_geometric/pull/4719))
- Fixed the ranking protocol bug in the RGCN link prediction example ([#4688](https://github.com/pyg-team/pytorch_geometric/pull/4688))
- Math support in Markdown ([#4683](https://github.com/pyg-team/pytorch_geometric/pull/4683))
- Allow for `setter` properties in `Data` ([#4682](https://github.com/pyg-team/pytorch_geometric/pull/4682), [#4686](https://github.com/pyg-team/pytorch_geometric/pull/4686))
- Allow for optional `edge_weight` in `GCN2Conv` ([#4670](https://github.com/pyg-team/pytorch_geometric/pull/4670))
- Fixed the interplay between `TUDataset` and `pre_transform` that modify node features ([#4669](https://github.com/pyg-team/pytorch_geometric/pull/4669))
- Make use of the `pyg_sphinx_theme` documentation template ([#4664](https://github.com/pyg-team/pyg-lib/pull/4664), [#4667](https://github.com/pyg-team/pyg-lib/pull/4667))
- Refactored reading molecular positions from sdf file for qm9 datasets ([4654](https://github.com/pyg-team/pytorch_geometric/pull/4654))
- Fixed `MLP.jittable()` bug in case `return_emb=True` ([#4645](https://github.com/pyg-team/pytorch_geometric/pull/4645), [#4648](https://github.com/pyg-team/pytorch_geometric/pull/4648))
- The generated node features of `StochasticBlockModelDataset` are now ordered with respect to their labels ([#4617](https://github.com/pyg-team/pytorch_geometric/pull/4617))
- Fixed typos in the documentation ([#4616](https://github.com/pyg-team/pytorch_geometric/pull/4616), [#4824](https://github.com/pyg-team/pytorch_geometric/pull/4824), [#4895](https://github.com/pyg-team/pytorch_geometric/pull/4895), [#5161](https://github.com/pyg-team/pytorch_geometric/pull/5161))
- The `bias` argument in `TAGConv` is now actually applied ([#4597](https://github.com/pyg-team/pytorch_geometric/pull/4597))
- Fixed subclass behavior of `process` and `download` in `Datsaet` ([#4586](https://github.com/pyg-team/pytorch_geometric/pull/4586))
- Fixed filtering of attributes for loaders in case `__cat_dim__ != 0` ([#4629](https://github.com/pyg-team/pytorch_geometric/pull/4629))
- Fixed `SparseTensor` support in `NeighborLoader` ([#4320](https://github.com/pyg-team/pytorch_geometric/pull/4320))
- Fixed average degree handling in `PNAConv` ([#4312](https://github.com/pyg-team/pytorch_geometric/pull/4312))
- Fixed a bug in `from_networkx` in case some attributes are PyTorch tensors ([#4486](https://github.com/pyg-team/pytorch_geometric/pull/4486))
- Added a missing clamp in `DimeNet` ([#4506](https://github.com/pyg-team/pytorch_geometric/pull/4506), [#4562](https://github.com/pyg-team/pytorch_geometric/pull/4562))
- Fixed the download link in `DBP15K` ([#4428](https://github.com/pyg-team/pytorch_geometric/pull/4428))
- Fixed an autograd bug in `DimeNet` when resetting parameters ([#4424](https://github.com/pyg-team/pytorch_geometric/pull/4424))
- Fixed bipartite message passing in case `flow="target_to_source"` ([#4418](https://github.com/pyg-team/pytorch_geometric/pull/4418))
- Fixed a bug in which `num_nodes` was not properly updated in the `FixedPoints` transform ([#4394](https://github.com/pyg-team/pytorch_geometric/pull/4394))
- PyTorch Lightning >= 1.6 support ([#4377](https://github.com/pyg-team/pytorch_geometric/pull/4377))
- Fixed a bug in which `GATConv` was not jittable ([#4347](https://github.com/pyg-team/pytorch_geometric/pull/4347))
- Fixed a bug in which the GraphGym config was not stored in each specific experiment directory ([#4338](https://github.com/pyg-team/pytorch_geometric/pull/4338))
- Fixed a bug in which `nn.models.GAT` did not produce `out_channels`-many output channels ([#4299](https://github.com/pyg-team/pytorch_geometric/pull/4299))
- Fixed mini-batching with empty lists as attributes ([#4293](https://github.com/pyg-team/pytorch_geometric/pull/4293))
- Fixed a bug in which `GCNConv` could not be combined with `to_hetero` on heterogeneous graphs with one node type ([#4279](https://github.com/pyg-team/pytorch_geometric/pull/4279))
- Added a scheduler to the Graph Sage OGBN Example [#9877](https://github.com/pyg-team/pytorch_geometric/pull/9877)

### Removed

- Remove internal metrics in favor of `torchmetrics` ([#4287](https://github.com/pyg-team/pytorch_geometric/pull/4287))


================================================
FILE: CITATION.cff
================================================
---
cff-version: 1.2.0
message: "Please cite our papers if you use this code in your own work."
title: "Fast Graph Representation Learning with PyTorch Geometric"
authors:
- family-names: "Fey"
  given-names: "Matthias"
date-released: 2019-05-06
license: MIT
url: "https://github.com/pyg-team/pytorch_geometric"
preferred-citation:
  type: article
  title: "PyG 2.0: Scalable Learning on Real World Graphs"
  authors:
  - family-names: "Fey"
    given-names: "Matthias"
  - family-names: "Sunil"
    given-names: "Jinu"
  - family-names: "Nitta"
    given-names: "Akihiro"
  - family-names: "Puri"
    given-names: "Rishi"
  - family-names: "Shah"
    given-names: "Manan"
  - family-names: "Stojanovi{\v{c}}"
    given-names: "Bla{\v{z}}"
  - family-names: "Bendias"
    given-names: "Ramona"
  - family-names: "Barghi"
    given-names: "Alexandria"
  - family-names: "Kocijan"
    given-names: "Vid"
  - family-names: "Zhang"
    given-names: "Zecheng"
  - family-names: "He"
    given-names: "Xinwei"
  - family-names: "Lenssen"
    given-names: "Jan Eric"
  - family-names: "Leskovec"
    given-names: "Jure"
  journal: "Temporal Graph Learning Workshop @ KDD"
  year: 2025


================================================
FILE: LICENSE
================================================
Copyright (c) 2023 PyG Team <team@pyg.org>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


================================================
FILE: README.md
================================================
<p align="center">
  <img height="150" src="https://raw.githubusercontent.com/pyg-team/pyg_sphinx_theme/master/pyg_sphinx_theme/static/img/pyg_logo_text.svg?sanitize=true" />
</p>

______________________________________________________________________

<div align="center">

[![PyPI Version][pypi-image]][pypi-url]
[![PyPI Download][pypi-download-image]][pypi-download-url]
[![Slack][slack-image]][slack-url]
[![Contributing][contributing-image]][contributing-url]

**[Documentation](https://pytorch-geometric.readthedocs.io)** |
**[PyG 1.0 Paper](https://arxiv.org/abs/1903.02428)** |
**[PyG 2.0 Paper](https://arxiv.org/abs/2507.16991)** |
**[Colab Notebooks](https://pytorch-geometric.readthedocs.io/en/latest/get_started/colabs.html)** |
**[External Resources](https://pytorch-geometric.readthedocs.io/en/latest/external/resources.html)** |
**[OGB Examples](https://github.com/snap-stanford/ogb/tree/master/examples)**

</div>

**PyG** *(PyTorch Geometric)* is a library built upon [PyTorch](https://pytorch.org/) to easily write and train Graph Neural Networks (GNNs) for a wide range of applications related to structured data.

It consists of various methods for deep learning on graphs and other irregular structures, also known as *[geometric deep learning](http://geometricdeeplearning.com/)*, from a variety of published papers.
In addition, it consists of easy-to-use mini-batch loaders for operating on many small and single giant graphs, [multi GPU-support](https://github.com/pyg-team/pytorch_geometric/tree/master/examples/multi_gpu), [`torch.compile`](https://pytorch-geometric.readthedocs.io/en/latest/advanced/compile.html) support, [`DataPipe`](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/datapipe.py) support, a large number of common benchmark datasets (based on simple interfaces to create your own), and helpful transforms, both for learning on arbitrary graphs as well as on 3D meshes or point clouds.

**[Click here to join our Slack community!][slack-url]**

<p align="center">
  <a href="https://medium.com/stanford-cs224w"><img style="max-width: 941px" src="https://data.pyg.org/img/cs224w_tutorials.png" /></a>
</p>

______________________________________________________________________

- [Library Highlights](#library-highlights)
- [Quick Tour for New Users](#quick-tour-for-new-users)
- [Architecture Overview](#architecture-overview)
- [Implemented GNN Models](#implemented-gnn-models)
- [Installation](#installation)

## Library Highlights

Whether you are a machine learning researcher or first-time user of machine learning toolkits, here are some reasons to try out PyG for machine learning on graph-structured data.

- **Easy-to-use and unified API**:
  All it takes is 10-20 lines of code to get started with training a GNN model (see the next section for a [quick tour](#quick-tour-for-new-users)).
  PyG is *PyTorch-on-the-rocks*: It utilizes a tensor-centric API and keeps design principles close to vanilla PyTorch.
  If you are already familiar with PyTorch, utilizing PyG is straightforward.
- **Comprehensive and well-maintained GNN models**:
  Most of the state-of-the-art Graph Neural Network architectures have been implemented by library developers or authors of research papers and are ready to be applied.
- **Great flexibility**:
  Existing PyG models can easily be extended for conducting your own research with GNNs.
  Making modifications to existing models or creating new architectures is simple, thanks to its easy-to-use message passing API, and a variety of operators and utility functions.
- **Large-scale real-world GNN models**:
  We focus on the need of GNN applications in challenging real-world scenarios, and support learning on diverse types of graphs, including but not limited to: scalable GNNs for graphs with millions of nodes; dynamic GNNs for node predictions over time; heterogeneous GNNs with multiple node types and edge types.

## Quick Tour for New Users

In this quick tour, we highlight the ease of creating and training a GNN model with only a few lines of code.

### Train your own GNN model

In the first glimpse of PyG, we implement the training of a GNN for classifying papers in a citation graph.
For this, we load the [Cora](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.datasets.Planetoid.html) dataset, and create a simple 2-layer GCN model using the pre-defined [`GCNConv`](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.GCNConv.html):

```python
import torch
from torch import Tensor
from torch_geometric.nn import GCNConv
from torch_geometric.datasets import Planetoid

dataset = Planetoid(root='.', name='Cora')

class GCN(torch.nn.Module):
    def __init__(self, in_channels, hidden_channels, out_channels):
        super().__init__()
        self.conv1 = GCNConv(in_channels, hidden_channels)
        self.conv2 = GCNConv(hidden_channels, out_channels)

    def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
        # x: Node feature matrix of shape [num_nodes, in_channels]
        # edge_index: Graph connectivity matrix of shape [2, num_edges]
        x = self.conv1(x, edge_index).relu()
        x = self.conv2(x, edge_index)
        return x

model = GCN(dataset.num_features, 16, dataset.num_classes)
```

<details>
<summary>We can now optimize the model in a training loop, similar to the <a href="https://pytorch.org/tutorials/beginner/basics/optimization_tutorial.html#full-implementation">standard PyTorch training procedure</a>.</summary>

```python
import torch.nn.functional as F

data = dataset[0]
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

for epoch in range(200):
    pred = model(data.x, data.edge_index)
    loss = F.cross_entropy(pred[data.train_mask], data.y[data.train_mask])

    # Backpropagation
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
```

</details>

More information about evaluating final model performance can be found in the corresponding [example](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/gcn.py).

### Create your own GNN layer

In addition to the easy application of existing GNNs, PyG makes it simple to implement custom Graph Neural Networks (see [here](https://pytorch-geometric.readthedocs.io/en/latest/tutorial/create_gnn.html) for the accompanying tutorial).
For example, this is all it takes to implement the [edge convolutional layer](https://arxiv.org/abs/1801.07829) from Wang *et al.*:

$$x_i^{\\prime} ~ = ~ \\max\_{j \\in \\mathcal{N}(i)} ~ \\textrm{MLP}\_{\\theta} \\left( [ ~ x_i, ~ x_j - x_i ~ ] \\right)$$

```python
import torch
from torch import Tensor
from torch.nn import Sequential, Linear, ReLU
from torch_geometric.nn import MessagePassing

class EdgeConv(MessagePassing):
    def __init__(self, in_channels, out_channels):
        super().__init__(aggr="max")  # "Max" aggregation.
        self.mlp = Sequential(
            Linear(2 * in_channels, out_channels),
            ReLU(),
            Linear(out_channels, out_channels),
        )

    def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
        # x: Node feature matrix of shape [num_nodes, in_channels]
        # edge_index: Graph connectivity matrix of shape [2, num_edges]
        return self.propagate(edge_index, x=x)  # shape [num_nodes, out_channels]

    def message(self, x_j: Tensor, x_i: Tensor) -> Tensor:
        # x_j: Source node features of shape [num_edges, in_channels]
        # x_i: Target node features of shape [num_edges, in_channels]
        edge_features = torch.cat([x_i, x_j - x_i], dim=-1)
        return self.mlp(edge_features)  # shape [num_edges, out_channels]
```

## Architecture Overview

PyG provides a multi-layer framework that enables users to build Graph Neural Network solutions on both low and high levels.
It comprises of the following components:

- The PyG **engine** utilizes the powerful PyTorch deep learning framework with full [`torch.compile`](https://pytorch-geometric.readthedocs.io/en/latest/advanced/compile.html) and [TorchScript](https://pytorch-geometric.readthedocs.io/en/latest/advanced/jit.html) support, as well as additions of efficient CPU/CUDA libraries for operating on sparse data, *e.g.*, [`pyg-lib`](https://github.com/pyg-team/pyg-lib).
- The PyG **storage** handles data processing, transformation and loading pipelines. It is capable of handling and processing large-scale graph datasets, and provides effective solutions for heterogeneous graphs. It further provides a variety of sampling solutions, which enable training of GNNs on large-scale graphs.
- The PyG **operators** bundle essential functionalities for implementing Graph Neural Networks. PyG supports important GNN building blocks that can be combined and applied to various parts of a GNN model, ensuring rich flexibility of GNN design.
- Finally, PyG provides an abundant set of GNN **models**, and examples that showcase GNN models on standard graph benchmarks. Thanks to its flexibility, users can easily build and modify custom GNN models to fit their specific needs.

<p align="center">
  <img width="100%" src="https://raw.githubusercontent.com/pyg-team/pytorch_geometric/master/docs/source/_figures/architecture.svg?sanitize=true" />
</p>

## Implemented GNN Models

We list currently supported PyG models, layers and operators according to category:

**GNN layers:**
All Graph Neural Network layers are implemented via the **[`nn.MessagePassing`](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.MessagePassing.html)** interface.
A GNN layer specifies how to perform message passing, *i.e.* by designing different message, aggregation and update functions as defined [here](https://pytorch-geometric.readthedocs.io/en/latest/tutorial/create_gnn.html).
These GNN layers can be stacked together to create Graph Neural Network models.

- **[GCNConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.GCNConv.html)** from Kipf and Welling: [Semi-Supervised Classification with Graph Convolutional Networks](https://arxiv.org/abs/1609.02907) (ICLR 2017) \[[**Example**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/gcn.py)\]
- **[ChebConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.ChebConv.html)** from Defferrard *et al.*: [Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering](https://arxiv.org/abs/1606.09375) (NIPS 2016) \[[**Example**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/gcn.py#L36-L37)\]
- **[GATConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.GATConv.html)** from Veličković *et al.*: [Graph Attention Networks](https://arxiv.org/abs/1710.10903) (ICLR 2018) \[[**Example**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/gat.py)\]

<details>
<summary><b>Expand to see all implemented GNN layers...</b></summary>

- **[GCN2Conv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.GCN2Conv.html)** from Chen *et al.*: [Simple and Deep Graph Convolutional Networks](https://arxiv.org/abs/2007.02133) (ICML 2020) \[[**Example1**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/gcn2_cora.py), [**Example2**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/gcn2_ppi.py)\]
- **[SplineConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.SplineConv.html)** from Fey *et al.*: [SplineCNN: Fast Geometric Deep Learning with Continuous B-Spline Kernels](https://arxiv.org/abs/1711.08920) (CVPR 2018) \[[**Example1**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/cora.py), [**Example2**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/faust.py)\]
- **[NNConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.NNConv.html)** from Gilmer *et al.*: [Neural Message Passing for Quantum Chemistry](https://arxiv.org/abs/1704.01212) (ICML 2017) \[[**Example1**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/qm9_nn_conv.py), [**Example2**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/mnist_nn_conv.py)\]
- **[CGConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.CGConv.html)** from Xie and Grossman: [Crystal Graph Convolutional Neural Networks for an Accurate and Interpretable Prediction of Material Properties](https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.120.145301) (Physical Review Letters 120, 2018)
- **[ECConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.ECConv.html)** from Simonovsky and Komodakis: [Edge-Conditioned Convolution on Graphs](https://arxiv.org/abs/1704.02901) (CVPR 2017)
- **[EGConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.EGConv.html)** from Tailor *et al.*: [Adaptive Filters and Aggregator Fusion for Efficient Graph Convolutions](https://arxiv.org/abs/2104.01481) (GNNSys 2021) \[[**Example**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/egc.py)\]
- **[GATv2Conv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.GATv2Conv.html)** from Brody *et al.*: [How Attentive are Graph Attention Networks?](https://arxiv.org/abs/2105.14491) (ICLR 2022)
- **[TransformerConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.TransformerConv.html)** from Shi *et al.*: [Masked Label Prediction: Unified Message Passing Model for Semi-Supervised Classification](https://arxiv.org/abs/2009.03509) (CoRR 2020) \[[**Example**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/unimp_arxiv.py)\]
- **[SAGEConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.SAGEConv.html)** from Hamilton *et al.*: [Inductive Representation Learning on Large Graphs](https://arxiv.org/abs/1706.02216) (NIPS 2017) \[[**Example1**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/reddit.py), [**Example2**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/ogbn_train.py), [**Example3**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/graph_sage_unsup.py), [**Example4**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/graph_sage_unsup_ppi.py)\]
- **[GraphConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.GraphConv.html)** from, *e.g.*, Morris *et al.*: [Weisfeiler and Leman Go Neural: Higher-order Graph Neural Networks](https://arxiv.org/abs/1810.02244) (AAAI 2019)
- **[GatedGraphConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.GatedGraphConv.html)** from Li *et al.*: [Gated Graph Sequence Neural Networks](https://arxiv.org/abs/1511.05493) (ICLR 2016)
- **[ResGatedGraphConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.ResGatedGraphConv.html)** from Bresson and Laurent: [Residual Gated Graph ConvNets](https://arxiv.org/abs/1711.07553) (CoRR 2017)
- **[GINConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.GINConv.html)** from Xu *et al.*: [How Powerful are Graph Neural Networks?](https://arxiv.org/abs/1810.00826) (ICLR 2019) \[[**Example**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/mutag_gin.py)\]
- **[GINEConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.GINEConv.html)** from Hu *et al.*: [Strategies for Pre-training Graph Neural Networks](https://arxiv.org/abs/1905.12265) (ICLR 2020)
- **[ARMAConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.ARMAConv.html)** from Bianchi *et al.*: [Graph Neural Networks with Convolutional ARMA Filters](https://arxiv.org/abs/1901.01343) (CoRR 2019) \[[**Example**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/arma.py)\]
- **[SGConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.SGConv.html)** from Wu *et al.*: [Simplifying Graph Convolutional Networks](https://arxiv.org/abs/1902.07153) (CoRR 2019) \[[**Example**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/sgc.py)\]
- **[APPNP](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.APPNP.html)** from Klicpera *et al.*: [Predict then Propagate: Graph Neural Networks meet Personalized PageRank](https://arxiv.org/abs/1810.05997) (ICLR 2019) \[[**Example**](https://github.com/pyg-team/pytorch_geometric/blob/master/benchmark/citation/appnp.py)\]
- **[MFConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.MFConv.html)** from Duvenaud *et al.*: [Convolutional Networks on Graphs for Learning Molecular Fingerprints](https://arxiv.org/abs/1509.09292) (NIPS 2015)
- **[AGNNConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.AGNNConv.html)** from Thekumparampil *et al.*: [Attention-based Graph Neural Network for Semi-Supervised Learning](https://arxiv.org/abs/1803.03735) (CoRR 2017) \[[**Example**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/agnn.py)\]
- **[TAGConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.TAGConv.html)** from Du *et al.*: [Topology Adaptive Graph Convolutional Networks](https://arxiv.org/abs/1710.10370) (CoRR 2017) \[[**Example**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/tagcn.py)\]
- **[PNAConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.PNAConv.html)** from Corso *et al.*: [Principal Neighbourhood Aggregation for Graph Nets](https://arxiv.org/abs/2004.05718) (CoRR 2020) \[**[Example](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/pna.py)**\]
- **[FAConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.FAConv.html)** from Bo *et al.*: [Beyond Low-Frequency Information in Graph Convolutional Networks](https://arxiv.org/abs/2101.00797) (AAAI 2021)
- **[PDNConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.nn.conv.PDNConv.html)** from Rozemberczki *et al.*: [Pathfinder Discovery Networks for Neural Message Passing](https://arxiv.org/abs/2010.12878) (WWW 2021)
- **[RGCNConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.RGCNConv.html)** from Schlichtkrull *et al.*: [Modeling Relational Data with Graph Convolutional Networks](https://arxiv.org/abs/1703.06103) (ESWC 2018) \[[**Example1**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/rgcn.py), [**Example2**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/rgcn_link_pred.py)\]
- **[RGATConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.RGATConv.html)** from Busbridge *et al.*: [Relational Graph Attention Networks](https://arxiv.org/abs/1904.05811) (CoRR 2019) \[[**Example**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/rgat.py)\]
- **[FiLMConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.FiLMConv.html)** from Brockschmidt: [GNN-FiLM: Graph Neural Networks with Feature-wise Linear Modulation](https://arxiv.org/abs/1906.12192) (ICML 2020) \[[**Example**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/film.py)\]
- **[SignedConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.SignedConv.html)** from Derr *et al.*: [Signed Graph Convolutional Network](https://arxiv.org/abs/1808.06354) (ICDM 2018) \[[**Example**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/signed_gcn.py)\]
- **[DNAConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.DNAConv.html)** from Fey: [Just Jump: Dynamic Neighborhood Aggregation in Graph Neural Networks](https://arxiv.org/abs/1904.04849) (ICLR-W 2019) \[[**Example**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/dna.py)\]
- **[PANConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.PANConv.html)** from Ma *et al.*: [Path Integral Based Convolution and Pooling for Graph Neural Networks](https://arxiv.org/abs/2006.16811) (NeurIPS 2020)
- **[PointNetConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.PointNetConv.html)** (including **[Iterative Farthest Point Sampling](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.pool.fps.html)**, dynamic graph generation based on **[nearest neighbor](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.pool.knn_graph.html)** or **[maximum distance](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.pool.radius_graph.html)**, and **[k-NN interpolation](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.unpool.knn_interpolate.html)** for upsampling) from Qi *et al.*: [PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation](https://arxiv.org/abs/1612.00593) (CVPR 2017) and [PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space](https://arxiv.org/abs/1706.02413) (NIPS 2017) \[[**Example1**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/pointnet2_classification.py), [**Example2**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/pointnet2_segmentation.py)\]
- **[EdgeConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.EdgeConv.html)** from Wang *et al.*: [Dynamic Graph CNN for Learning on Point Clouds](https://arxiv.org/abs/1801.07829) (CoRR, 2018) \[[**Example1**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/dgcnn_classification.py), [**Example2**](https://github.com/pyg-team/pytorch_geometric/blob/master/examples/dgcnn_segmentation.py)\]
- **[XConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.XConv.html)** from Li *et al.*: [PointCNN: Convolution On X-Transformed Points](https://arxiv.org/abs/1801.07791) (NeurIPS 2018) \[[**Example**](https://github.com/pyg-team/pytorch_geometric/blob/master/benchmark/points/point_cnn.py)\]
- **[PPFConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.PPFConv.html)** from Deng *et al.*: [PPFNet: Global Context Aware Local Features for Robust 3D Point Matching](https://arxiv.org/abs/1802.02669) (CVPR 2018)
- **[GMMConv](https://pytorch-geometric.readthedocs.io/en/latest/generated/torch_geometric.nn.conv.GMMConv.html)** from Monti *et al.*: [Geometric Deep Learning on Graphs and Manifolds using Mixture Model CNNs](https://arxiv.org/abs/1611.08402) (CVPR 2017)
- **[FeaStConv](https://pytorch-geometric.readth
Download .txt
gitextract_yj2ugid6/

├── .github/
│   ├── CODEOWNERS
│   ├── CONTRIBUTING.md
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug-report.yml
│   │   ├── config.yml
│   │   ├── documentation.yml
│   │   ├── feature-request.yml
│   │   ├── installation.yml
│   │   └── refactor.yml
│   ├── actions/
│   │   └── setup/
│   │       └── action.yml
│   ├── dependabot.yml
│   ├── labeler.yml
│   └── workflows/
│       ├── _testing.yml
│       ├── auto-merge.yml
│       ├── building_nightly.yml
│       ├── changelog.yml
│       ├── documentation.yml
│       ├── examples.yml
│       ├── labeler.yml
│       ├── linting.yml
│       ├── testing.yml
│       └── testing_rag.yml
├── .gitignore
├── .pre-commit-config.yaml
├── CHANGELOG.md
├── CITATION.cff
├── LICENSE
├── README.md
├── benchmark/
│   ├── README.md
│   ├── citation/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── appnp.py
│   │   ├── arma.py
│   │   ├── cheb.py
│   │   ├── datasets.py
│   │   ├── gat.py
│   │   ├── gcn.py
│   │   ├── inference.sh
│   │   ├── run.sh
│   │   ├── sgc.py
│   │   ├── statistics.py
│   │   └── train_eval.py
│   ├── inference/
│   │   ├── README.md
│   │   └── inference_benchmark.py
│   ├── kernel/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── asap.py
│   │   ├── datasets.py
│   │   ├── diff_pool.py
│   │   ├── edge_pool.py
│   │   ├── gcn.py
│   │   ├── gin.py
│   │   ├── global_attention.py
│   │   ├── graclus.py
│   │   ├── graph_sage.py
│   │   ├── main.py
│   │   ├── main_performance.py
│   │   ├── sag_pool.py
│   │   ├── set2set.py
│   │   ├── sort_pool.py
│   │   ├── statistics.py
│   │   ├── top_k.py
│   │   └── train_eval.py
│   ├── loader/
│   │   └── neighbor_loader.py
│   ├── multi_gpu/
│   │   └── training/
│   │       ├── README.md
│   │       ├── common.py
│   │       ├── training_benchmark_cuda.py
│   │       └── training_benchmark_xpu.py
│   ├── points/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── datasets.py
│   │   ├── edge_cnn.py
│   │   ├── mpnn.py
│   │   ├── point_cnn.py
│   │   ├── point_net.py
│   │   ├── spline_cnn.py
│   │   ├── statistics.py
│   │   └── train_eval.py
│   ├── runtime/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── dgl/
│   │   │   ├── gat.py
│   │   │   ├── gcn.py
│   │   │   ├── hidden.py
│   │   │   ├── main.py
│   │   │   ├── rgcn.py
│   │   │   └── train.py
│   │   ├── gat.py
│   │   ├── gcn.py
│   │   ├── main.py
│   │   ├── rgcn.py
│   │   └── train.py
│   ├── setup.py
│   ├── training/
│   │   ├── README.md
│   │   └── training_benchmark.py
│   └── utils/
│       ├── __init__.py
│       ├── hetero_gat.py
│       ├── hetero_sage.py
│       └── utils.py
├── codecov.yml
├── docker/
│   ├── Dockerfile
│   ├── Dockerfile.xpu
│   ├── README.md
│   └── singularity
├── docs/
│   ├── Makefile
│   ├── README.md
│   ├── requirements.txt
│   └── source/
│       ├── .gitignore
│       ├── _figures/
│       │   ├── .gitignore
│       │   ├── build.sh
│       │   ├── graph.tex
│       │   ├── hg_example.tex
│       │   ├── to_hetero.tex
│       │   └── to_hetero_with_bases.tex
│       ├── _static/
│       │   └── js/
│       │       └── version_alert.js
│       ├── _templates/
│       │   └── autosummary/
│       │       ├── class.rst
│       │       ├── inherited_class.rst
│       │       ├── metrics.rst
│       │       ├── nn.rst
│       │       └── only_class.rst
│       ├── advanced/
│       │   ├── batching.rst
│       │   ├── compile.rst
│       │   ├── cpu_affinity.rst
│       │   ├── graphgym.rst
│       │   ├── hgam.rst
│       │   ├── jit.rst
│       │   ├── remote.rst
│       │   └── sparse_tensor.rst
│       ├── cheatsheet/
│       │   ├── data_cheatsheet.rst
│       │   └── gnn_cheatsheet.rst
│       ├── conf.py
│       ├── external/
│       │   └── resources.rst
│       ├── get_started/
│       │   ├── colabs.rst
│       │   └── introduction.rst
│       ├── index.rst
│       ├── install/
│       │   ├── installation.rst
│       │   └── quick-start.html
│       ├── modules/
│       │   ├── contrib.rst
│       │   ├── data.rst
│       │   ├── datasets.rst
│       │   ├── distributed.rst
│       │   ├── explain.rst
│       │   ├── graphgym.rst
│       │   ├── llm.rst
│       │   ├── loader.rst
│       │   ├── metrics.rst
│       │   ├── nn.rst
│       │   ├── profile.rst
│       │   ├── root.rst
│       │   ├── sampler.rst
│       │   ├── transforms.rst
│       │   └── utils.rst
│       ├── notes/
│       │   ├── batching.rst
│       │   ├── cheatsheet.rst
│       │   ├── colabs.rst
│       │   ├── create_dataset.rst
│       │   ├── create_gnn.rst
│       │   ├── data_cheatsheet.rst
│       │   ├── explain.rst
│       │   ├── graphgym.rst
│       │   ├── heterogeneous.rst
│       │   ├── installation.rst
│       │   ├── introduction.rst
│       │   ├── jit.rst
│       │   ├── load_csv.rst
│       │   ├── remote.rst
│       │   ├── resources.rst
│       │   └── sparse_tensor.rst
│       └── tutorial/
│           ├── application.rst
│           ├── compile.rst
│           ├── create_dataset.rst
│           ├── create_gnn.rst
│           ├── dataset.rst
│           ├── dataset_splitting.rst
│           ├── distributed.rst
│           ├── distributed_pyg.rst
│           ├── explain.rst
│           ├── gnn_design.rst
│           ├── graph_transformer.rst
│           ├── heterogeneous.rst
│           ├── load_csv.rst
│           ├── multi_gpu_vanilla.rst
│           ├── multi_node_multi_gpu_vanilla.rst
│           ├── neighbor_loader.rst
│           ├── point_cloud.rst
│           └── shallow_node_embeddings.rst
├── examples/
│   ├── README.md
│   ├── agnn.py
│   ├── ar_link_pred.py
│   ├── argva_node_clustering.py
│   ├── arma.py
│   ├── attentive_fp.py
│   ├── autoencoder.py
│   ├── cluster_gcn_ppi.py
│   ├── cluster_gcn_reddit.py
│   ├── colors_topk_pool.py
│   ├── compile/
│   │   ├── gcn.py
│   │   └── gin.py
│   ├── contrib/
│   │   ├── README.md
│   │   ├── pgm_explainer_graph_classification.py
│   │   ├── pgm_explainer_node_classification.py
│   │   ├── rbcd_attack.py
│   │   └── rbcd_attack_poisoning.py
│   ├── cora.py
│   ├── correct_and_smooth.py
│   ├── cpp/
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── main.cpp
│   │   └── save_model.py
│   ├── datapipe.py
│   ├── dgcnn_classification.py
│   ├── dgcnn_segmentation.py
│   ├── dir_gnn.py
│   ├── distributed/
│   │   ├── README.md
│   │   ├── graphlearn_for_pytorch/
│   │   │   ├── README.md
│   │   │   ├── dist_train_sage_sup_config.yml
│   │   │   ├── dist_train_sage_supervised.py
│   │   │   ├── launch.py
│   │   │   └── partition_ogbn_dataset.py
│   │   ├── kuzu/
│   │   │   ├── README.md
│   │   │   └── papers_100M/
│   │   │       ├── README.md
│   │   │       ├── prepare_data.py
│   │   │       └── train.py
│   │   └── pyg/
│   │       └── README.md
│   ├── dna.py
│   ├── egc.py
│   ├── equilibrium_median.py
│   ├── explain/
│   │   ├── README.md
│   │   ├── captum_explainer.py
│   │   ├── captum_explainer_hetero_link.py
│   │   ├── gnn_explainer.py
│   │   ├── gnn_explainer_ba_shapes.py
│   │   ├── gnn_explainer_link_pred.py
│   │   └── graphmask_explainer.py
│   ├── faust.py
│   ├── film.py
│   ├── gat.py
│   ├── gcn.py
│   ├── gcn2_cora.py
│   ├── gcn2_ppi.py
│   ├── geniepath.py
│   ├── glnn.py
│   ├── gpse.py
│   ├── graph_gps.py
│   ├── graph_sage_unsup.py
│   ├── graph_sage_unsup_ppi.py
│   ├── graph_saint.py
│   ├── graph_unet.py
│   ├── hetero/
│   │   ├── README.md
│   │   ├── bipartite_sage.py
│   │   ├── bipartite_sage_unsup.py
│   │   ├── dmgi_unsup.py
│   │   ├── han_imdb.py
│   │   ├── hetero_conv_dblp.py
│   │   ├── hetero_link_pred.py
│   │   ├── hgt_dblp.py
│   │   ├── hierarchical_sage.py
│   │   ├── load_csv.py
│   │   ├── metapath2vec.py
│   │   ├── recommender_system.py
│   │   ├── temporal_link_pred.py
│   │   └── to_hetero_mag.py
│   ├── hierarchical_sampling.py
│   ├── infomax_inductive.py
│   ├── infomax_transductive.py
│   ├── jit/
│   │   ├── README.md
│   │   ├── film.py
│   │   ├── gat.py
│   │   ├── gcn.py
│   │   └── gin.py
│   ├── kge_fb15k_237.py
│   ├── label_prop.py
│   ├── lcm_aggr_2nd_min.py
│   ├── lightgcn.py
│   ├── link_pred.py
│   ├── linkx.py
│   ├── llm/
│   │   ├── README.md
│   │   ├── g_retriever.py
│   │   ├── git_mol.py
│   │   ├── glem.py
│   │   ├── molecule_gpt.py
│   │   ├── protein_mpnn.py
│   │   └── txt2kg_rag.py
│   ├── lpformer.py
│   ├── mem_pool.py
│   ├── mixhop.py
│   ├── mnist_graclus.py
│   ├── mnist_nn_conv.py
│   ├── mnist_voxel_grid.py
│   ├── multi_gpu/
│   │   ├── README.md
│   │   ├── distributed_batching.py
│   │   ├── distributed_sampling.py
│   │   ├── distributed_sampling_multinode.py
│   │   ├── distributed_sampling_multinode.sbatch
│   │   ├── distributed_sampling_xpu.py
│   │   ├── mag240m_graphsage.py
│   │   ├── model_parallel.py
│   │   ├── papers100m_gcn.py
│   │   ├── papers100m_gcn_multinode.py
│   │   ├── pcqm4m_ogb.py
│   │   └── taobao.py
│   ├── mutag_gin.py
│   ├── node2vec.py
│   ├── ogbn_proteins_deepgcn.py
│   ├── ogbn_train.py
│   ├── ogc.py
│   ├── pmlp.py
│   ├── pna.py
│   ├── point_transformer_classification.py
│   ├── point_transformer_segmentation.py
│   ├── pointnet2_classification.py
│   ├── pointnet2_segmentation.py
│   ├── ppi.py
│   ├── proteins_diff_pool.py
│   ├── proteins_dmon_pool.py
│   ├── proteins_gmt.py
│   ├── proteins_mincut_pool.py
│   ├── proteins_topk_pool.py
│   ├── pytorch_ignite/
│   │   ├── README.md
│   │   └── gin.py
│   ├── pytorch_lightning/
│   │   ├── README.md
│   │   ├── gin.py
│   │   ├── graph_sage.py
│   │   └── relational_gnn.py
│   ├── qm9_nn_conv.py
│   ├── qm9_pretrained_dimenet.py
│   ├── qm9_pretrained_schnet.py
│   ├── quiver/
│   │   ├── README.md
│   │   ├── multi_gpu_quiver.py
│   │   └── single_gpu_quiver.py
│   ├── randlanet_classification.py
│   ├── randlanet_segmentation.py
│   ├── rdl.py
│   ├── rect.py
│   ├── reddit.py
│   ├── renet.py
│   ├── rev_gnn.py
│   ├── rgat.py
│   ├── rgcn.py
│   ├── rgcn_link_pred.py
│   ├── seal_link_pred.py
│   ├── sgc.py
│   ├── shadow.py
│   ├── sign.py
│   ├── signed_gcn.py
│   ├── super_gat.py
│   ├── tagcn.py
│   ├── tensorboard_logging.py
│   ├── tgn.py
│   ├── triangles_sag_pool.py
│   ├── unimp_arxiv.py
│   ├── upfd.py
│   └── wl_kernel.py
├── graphgym/
│   ├── agg_batch.py
│   ├── configs/
│   │   ├── example.yaml
│   │   └── pyg/
│   │       ├── example_graph.yaml
│   │       ├── example_link.yaml
│   │       └── example_node.yaml
│   ├── configs_gen.py
│   ├── custom_graphgym/
│   │   ├── __init__.py
│   │   ├── act/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── config/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── encoder/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── head/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── layer/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── loader/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── loss/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── network/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── optimizer/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── pooling/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── stage/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   ├── train/
│   │   │   ├── __init__.py
│   │   │   └── example.py
│   │   └── transform/
│   │       └── __init__.py
│   ├── grids/
│   │   ├── example.txt
│   │   └── pyg/
│   │       └── example.txt
│   ├── main.py
│   ├── parallel.sh
│   ├── run_batch.sh
│   ├── run_single.sh
│   └── sample/
│       ├── dimensions.txt
│       └── dimensionsatt.txt
├── pyproject.toml
├── readthedocs.yml
├── test/
│   ├── conftest.py
│   ├── contrib/
│   │   ├── explain/
│   │   │   └── test_pgm_explainer.py
│   │   └── nn/
│   │       └── models/
│   │           └── test_rbcd_attack.py
│   ├── data/
│   │   ├── lightning/
│   │   │   └── test_datamodule.py
│   │   ├── test_batch.py
│   │   ├── test_data.py
│   │   ├── test_database.py
│   │   ├── test_datapipes.py
│   │   ├── test_dataset.py
│   │   ├── test_dataset_summary.py
│   │   ├── test_feature_store.py
│   │   ├── test_graph_store.py
│   │   ├── test_hetero_data.py
│   │   ├── test_hypergraph_data.py
│   │   ├── test_inherit.py
│   │   ├── test_on_disk_dataset.py
│   │   ├── test_remote_backend_utils.py
│   │   ├── test_storage.py
│   │   ├── test_temporal.py
│   │   └── test_view.py
│   ├── datasets/
│   │   ├── graph_generator/
│   │   │   ├── test_ba_graph.py
│   │   │   ├── test_er_graph.py
│   │   │   ├── test_grid_graph.py
│   │   │   └── test_tree_graph.py
│   │   ├── motif_generator/
│   │   │   ├── test_custom_motif.py
│   │   │   ├── test_cycle_motif.py
│   │   │   ├── test_grid_motif.py
│   │   │   └── test_house_motif.py
│   │   ├── test_ba_shapes.py
│   │   ├── test_bzr.py
│   │   ├── test_elliptic.py
│   │   ├── test_enzymes.py
│   │   ├── test_explainer_dataset.py
│   │   ├── test_fake.py
│   │   ├── test_git_mol_dataset.py
│   │   ├── test_imdb_binary.py
│   │   ├── test_infection_dataset.py
│   │   ├── test_karate.py
│   │   ├── test_medshapenet.py
│   │   ├── test_molecule_gpt_dataset.py
│   │   ├── test_mutag.py
│   │   ├── test_planetoid.py
│   │   ├── test_protein_mpnn_dataset.py
│   │   ├── test_snap_dataset.py
│   │   ├── test_suite_sparse.py
│   │   ├── test_tag_dataset.py
│   │   ├── test_teeth3ds.py
│   │   └── test_web_qsp_dataset.py
│   ├── distributed/
│   │   ├── test_dist_link_neighbor_loader.py
│   │   ├── test_dist_link_neighbor_sampler.py
│   │   ├── test_dist_neighbor_loader.py
│   │   ├── test_dist_neighbor_sampler.py
│   │   ├── test_dist_utils.py
│   │   ├── test_local_feature_store.py
│   │   ├── test_local_graph_store.py
│   │   ├── test_partition.py
│   │   └── test_rpc.py
│   ├── explain/
│   │   ├── algorithm/
│   │   │   ├── test_attention_explainer.py
│   │   │   ├── test_captum.py
│   │   │   ├── test_captum_explainer.py
│   │   │   ├── test_captum_hetero.py
│   │   │   ├── test_explain_algorithm_utils.py
│   │   │   ├── test_gnn_explainer.py
│   │   │   ├── test_graphmask_explainer.py
│   │   │   └── test_pg_explainer.py
│   │   ├── conftest.py
│   │   ├── metric/
│   │   │   ├── test_basic_metric.py
│   │   │   ├── test_faithfulness.py
│   │   │   └── test_fidelity.py
│   │   ├── test_explain_config.py
│   │   ├── test_explainer.py
│   │   ├── test_explanation.py
│   │   ├── test_hetero_explainer.py
│   │   └── test_hetero_explanation.py
│   ├── graphgym/
│   │   ├── example_node.yml
│   │   ├── test_config.py
│   │   ├── test_graphgym.py
│   │   ├── test_logger.py
│   │   └── test_register.py
│   ├── io/
│   │   ├── example1.off
│   │   ├── example2.off
│   │   ├── test_fs.py
│   │   └── test_off.py
│   ├── llm/
│   │   ├── conftest.py
│   │   ├── models/
│   │   │   ├── test_g_retriever.py
│   │   │   ├── test_git_mol.py
│   │   │   ├── test_glem.py
│   │   │   ├── test_llm.py
│   │   │   ├── test_llm_judge.py
│   │   │   ├── test_molecule_gpt.py
│   │   │   ├── test_protein_mpnn.py
│   │   │   ├── test_sentence_transformer.py
│   │   │   ├── test_txt2kg.py
│   │   │   └── test_vision_transformer.py
│   │   ├── test_large_graph_indexer.py
│   │   ├── test_rag_loader.py
│   │   └── utils/
│   │       ├── test_rag_backend_utils.py
│   │       ├── test_rag_feature_store.py
│   │       ├── test_rag_graph_store.py
│   │       └── test_vectorrag.py
│   ├── loader/
│   │   ├── test_cache.py
│   │   ├── test_cluster.py
│   │   ├── test_dataloader.py
│   │   ├── test_dynamic_batch_sampler.py
│   │   ├── test_graph_saint.py
│   │   ├── test_hgt_loader.py
│   │   ├── test_ibmb_loader.py
│   │   ├── test_imbalanced_sampler.py
│   │   ├── test_link_neighbor_loader.py
│   │   ├── test_mixin.py
│   │   ├── test_neighbor_loader.py
│   │   ├── test_neighbor_sampler.py
│   │   ├── test_prefetch.py
│   │   ├── test_random_node_loader.py
│   │   ├── test_shadow.py
│   │   ├── test_temporal_dataloader.py
│   │   ├── test_utils.py
│   │   └── test_zip_loader.py
│   ├── metrics/
│   │   └── test_link_pred_metric.py
│   ├── my_config.yaml
│   ├── nn/
│   │   ├── aggr/
│   │   │   ├── test_aggr_utils.py
│   │   │   ├── test_attention.py
│   │   │   ├── test_basic.py
│   │   │   ├── test_deep_sets.py
│   │   │   ├── test_equilibrium.py
│   │   │   ├── test_fused.py
│   │   │   ├── test_gmt.py
│   │   │   ├── test_gru.py
│   │   │   ├── test_lcm.py
│   │   │   ├── test_lstm.py
│   │   │   ├── test_mlp_aggr.py
│   │   │   ├── test_multi.py
│   │   │   ├── test_patch_transformer.py
│   │   │   ├── test_quantile.py
│   │   │   ├── test_scaler.py
│   │   │   ├── test_set2set.py
│   │   │   ├── test_set_transformer.py
│   │   │   ├── test_sort.py
│   │   │   └── test_variance_preserving.py
│   │   ├── attention/
│   │   │   ├── test_performer_attention.py
│   │   │   ├── test_polynormer_attention.py
│   │   │   └── test_qformer.py
│   │   ├── conv/
│   │   │   ├── cugraph/
│   │   │   │   ├── test_cugraph_gat_conv.py
│   │   │   │   ├── test_cugraph_rgcn_conv.py
│   │   │   │   └── test_cugraph_sage_conv.py
│   │   │   ├── test_agnn_conv.py
│   │   │   ├── test_antisymmetric_conv.py
│   │   │   ├── test_appnp.py
│   │   │   ├── test_arma_conv.py
│   │   │   ├── test_cg_conv.py
│   │   │   ├── test_cheb_conv.py
│   │   │   ├── test_cluster_gcn_conv.py
│   │   │   ├── test_create_gnn.py
│   │   │   ├── test_dir_gnn_conv.py
│   │   │   ├── test_dna_conv.py
│   │   │   ├── test_edge_conv.py
│   │   │   ├── test_eg_conv.py
│   │   │   ├── test_fa_conv.py
│   │   │   ├── test_feast_conv.py
│   │   │   ├── test_film_conv.py
│   │   │   ├── test_fused_gat_conv.py
│   │   │   ├── test_gat_conv.py
│   │   │   ├── test_gated_graph_conv.py
│   │   │   ├── test_gatv2_conv.py
│   │   │   ├── test_gcn2_conv.py
│   │   │   ├── test_gcn_conv.py
│   │   │   ├── test_gen_conv.py
│   │   │   ├── test_general_conv.py
│   │   │   ├── test_gin_conv.py
│   │   │   ├── test_gmm_conv.py
│   │   │   ├── test_gps_conv.py
│   │   │   ├── test_graph_conv.py
│   │   │   ├── test_gravnet_conv.py
│   │   │   ├── test_han_conv.py
│   │   │   ├── test_heat_conv.py
│   │   │   ├── test_hetero_conv.py
│   │   │   ├── test_hgt_conv.py
│   │   │   ├── test_hypergraph_conv.py
│   │   │   ├── test_le_conv.py
│   │   │   ├── test_lg_conv.py
│   │   │   ├── test_meshcnn_conv.py
│   │   │   ├── test_message_passing.py
│   │   │   ├── test_mf_conv.py
│   │   │   ├── test_mixhop_conv.py
│   │   │   ├── test_nn_conv.py
│   │   │   ├── test_pan_conv.py
│   │   │   ├── test_pdn_conv.py
│   │   │   ├── test_pna_conv.py
│   │   │   ├── test_point_conv.py
│   │   │   ├── test_point_gnn_conv.py
│   │   │   ├── test_point_transformer_conv.py
│   │   │   ├── test_ppf_conv.py
│   │   │   ├── test_res_gated_graph_conv.py
│   │   │   ├── test_rgat_conv.py
│   │   │   ├── test_rgcn_conv.py
│   │   │   ├── test_sage_conv.py
│   │   │   ├── test_sg_conv.py
│   │   │   ├── test_signed_conv.py
│   │   │   ├── test_simple_conv.py
│   │   │   ├── test_spline_conv.py
│   │   │   ├── test_ssg_conv.py
│   │   │   ├── test_static_graph.py
│   │   │   ├── test_supergat_conv.py
│   │   │   ├── test_tag_conv.py
│   │   │   ├── test_transformer_conv.py
│   │   │   ├── test_wl_conv.py
│   │   │   ├── test_wl_conv_continuous.py
│   │   │   ├── test_x_conv.py
│   │   │   └── utils/
│   │   │       └── test_gnn_cheatsheet.py
│   │   ├── dense/
│   │   │   ├── test_dense_gat_conv.py
│   │   │   ├── test_dense_gcn_conv.py
│   │   │   ├── test_dense_gin_conv.py
│   │   │   ├── test_dense_graph_conv.py
│   │   │   ├── test_dense_sage_conv.py
│   │   │   ├── test_diff_pool.py
│   │   │   ├── test_dmon_pool.py
│   │   │   ├── test_linear.py
│   │   │   └── test_mincut_pool.py
│   │   ├── functional/
│   │   │   ├── test_bro.py
│   │   │   └── test_gini.py
│   │   ├── kge/
│   │   │   ├── test_complex.py
│   │   │   ├── test_distmult.py
│   │   │   ├── test_rotate.py
│   │   │   └── test_transe.py
│   │   ├── models/
│   │   │   ├── test_attentive_fp.py
│   │   │   ├── test_attract_repel.py
│   │   │   ├── test_autoencoder.py
│   │   │   ├── test_basic_gnn.py
│   │   │   ├── test_correct_and_smooth.py
│   │   │   ├── test_deep_graph_infomax.py
│   │   │   ├── test_deepgcn.py
│   │   │   ├── test_dimenet.py
│   │   │   ├── test_gnnff.py
│   │   │   ├── test_gpse.py
│   │   │   ├── test_graph_mixer.py
│   │   │   ├── test_graph_unet.py
│   │   │   ├── test_jumping_knowledge.py
│   │   │   ├── test_label_prop.py
│   │   │   ├── test_lightgcn.py
│   │   │   ├── test_linkx.py
│   │   │   ├── test_lpformer.py
│   │   │   ├── test_mask_label.py
│   │   │   ├── test_meta.py
│   │   │   ├── test_metapath2vec.py
│   │   │   ├── test_mlp.py
│   │   │   ├── test_neural_fingerprint.py
│   │   │   ├── test_node2vec.py
│   │   │   ├── test_pmlp.py
│   │   │   ├── test_polynormer.py
│   │   │   ├── test_re_net.py
│   │   │   ├── test_rect.py
│   │   │   ├── test_rev_gnn.py
│   │   │   ├── test_schnet.py
│   │   │   ├── test_sgformer.py
│   │   │   ├── test_signed_gcn.py
│   │   │   ├── test_tgn.py
│   │   │   └── test_visnet.py
│   │   ├── norm/
│   │   │   ├── test_batch_norm.py
│   │   │   ├── test_diff_group_norm.py
│   │   │   ├── test_graph_norm.py
│   │   │   ├── test_graph_size_norm.py
│   │   │   ├── test_instance_norm.py
│   │   │   ├── test_layer_norm.py
│   │   │   ├── test_mean_subtraction_norm.py
│   │   │   ├── test_msg_norm.py
│   │   │   └── test_pair_norm.py
│   │   ├── pool/
│   │   │   ├── connect/
│   │   │   │   └── test_filter_edges.py
│   │   │   ├── select/
│   │   │   │   └── test_select_topk.py
│   │   │   ├── test_approx_knn.py
│   │   │   ├── test_asap.py
│   │   │   ├── test_avg_pool.py
│   │   │   ├── test_cluster_pool.py
│   │   │   ├── test_consecutive.py
│   │   │   ├── test_decimation.py
│   │   │   ├── test_edge_pool.py
│   │   │   ├── test_glob.py
│   │   │   ├── test_graclus.py
│   │   │   ├── test_knn.py
│   │   │   ├── test_max_pool.py
│   │   │   ├── test_mem_pool.py
│   │   │   ├── test_pan_pool.py
│   │   │   ├── test_pool.py
│   │   │   ├── test_sag_pool.py
│   │   │   ├── test_topk_pool.py
│   │   │   └── test_voxel_grid.py
│   │   ├── test_compile_basic.py
│   │   ├── test_compile_conv.py
│   │   ├── test_compile_dynamic.py
│   │   ├── test_data_parallel.py
│   │   ├── test_encoding.py
│   │   ├── test_fvcore.py
│   │   ├── test_fx.py
│   │   ├── test_inits.py
│   │   ├── test_model_hub.py
│   │   ├── test_model_summary.py
│   │   ├── test_module_dict.py
│   │   ├── test_parameter_dict.py
│   │   ├── test_reshape.py
│   │   ├── test_resolver.py
│   │   ├── test_sequential.py
│   │   ├── test_to_fixed_size_transformer.py
│   │   ├── test_to_hetero_module.py
│   │   ├── test_to_hetero_transformer.py
│   │   ├── test_to_hetero_with_bases_transformer.py
│   │   └── unpool/
│   │       └── test_knn_interpolate.py
│   ├── profile/
│   │   ├── test_benchmark.py
│   │   ├── test_nvtx.py
│   │   ├── test_profile.py
│   │   ├── test_profile_utils.py
│   │   └── test_profiler.py
│   ├── sampler/
│   │   ├── test_sampler_base.py
│   │   └── test_sampler_neighbor_sampler.py
│   ├── test_config_mixin.py
│   ├── test_config_store.py
│   ├── test_debug.py
│   ├── test_edge_index.py
│   ├── test_experimental.py
│   ├── test_hash_tensor.py
│   ├── test_home.py
│   ├── test_index.py
│   ├── test_inspector.py
│   ├── test_isinstance.py
│   ├── test_onnx.py
│   ├── test_seed.py
│   ├── test_typing.py
│   ├── test_warnings.py
│   ├── testing/
│   │   └── test_decorators.py
│   ├── transforms/
│   │   ├── test_add_gpse.py
│   │   ├── test_add_metapaths.py
│   │   ├── test_add_positional_encoding.py
│   │   ├── test_add_remaining_self_loops.py
│   │   ├── test_add_self_loops.py
│   │   ├── test_cartesian.py
│   │   ├── test_center.py
│   │   ├── test_compose.py
│   │   ├── test_constant.py
│   │   ├── test_delaunay.py
│   │   ├── test_distance.py
│   │   ├── test_face_to_edge.py
│   │   ├── test_feature_propagation.py
│   │   ├── test_fixed_points.py
│   │   ├── test_gcn_norm.py
│   │   ├── test_gdc.py
│   │   ├── test_generate_mesh_normals.py
│   │   ├── test_grid_sampling.py
│   │   ├── test_half_hop.py
│   │   ├── test_knn_graph.py
│   │   ├── test_laplacian_lambda_max.py
│   │   ├── test_largest_connected_components.py
│   │   ├── test_line_graph.py
│   │   ├── test_linear_transformation.py
│   │   ├── test_local_cartesian.py
│   │   ├── test_local_degree_profile.py
│   │   ├── test_mask_transform.py
│   │   ├── test_node_property_split.py
│   │   ├── test_normalize_features.py
│   │   ├── test_normalize_rotation.py
│   │   ├── test_normalize_scale.py
│   │   ├── test_one_hot_degree.py
│   │   ├── test_pad.py
│   │   ├── test_point_pair_features.py
│   │   ├── test_polar.py
│   │   ├── test_radius_graph.py
│   │   ├── test_random_flip.py
│   │   ├── test_random_jitter.py
│   │   ├── test_random_link_split.py
│   │   ├── test_random_node_split.py
│   │   ├── test_random_rotate.py
│   │   ├── test_random_scale.py
│   │   ├── test_random_shear.py
│   │   ├── test_remove_duplicated_edges.py
│   │   ├── test_remove_isolated_nodes.py
│   │   ├── test_remove_self_loops.py
│   │   ├── test_remove_training_classes.py
│   │   ├── test_rooted_subgraph.py
│   │   ├── test_sample_points.py
│   │   ├── test_sign.py
│   │   ├── test_spherical.py
│   │   ├── test_svd_feature_reduction.py
│   │   ├── test_target_indegree.py
│   │   ├── test_to_dense.py
│   │   ├── test_to_device.py
│   │   ├── test_to_sparse_tensor.py
│   │   ├── test_to_superpixels.py
│   │   ├── test_to_undirected.py
│   │   ├── test_two_hop.py
│   │   └── test_virtual_node.py
│   ├── utils/
│   │   ├── conftest.py
│   │   ├── test_assortativity.py
│   │   ├── test_augmentation.py
│   │   ├── test_coalesce.py
│   │   ├── test_convert.py
│   │   ├── test_cross_entropy.py
│   │   ├── test_degree.py
│   │   ├── test_dropout.py
│   │   ├── test_embedding.py
│   │   ├── test_functions.py
│   │   ├── test_geodesic.py
│   │   ├── test_grid.py
│   │   ├── test_hetero.py
│   │   ├── test_homophily.py
│   │   ├── test_index_sort.py
│   │   ├── test_isolated.py
│   │   ├── test_laplacian.py
│   │   ├── test_lexsort.py
│   │   ├── test_loop.py
│   │   ├── test_map.py
│   │   ├── test_mask.py
│   │   ├── test_mesh_laplacian.py
│   │   ├── test_negative_sampling.py
│   │   ├── test_nested.py
│   │   ├── test_noise_scheduler.py
│   │   ├── test_normalize_edge_index.py
│   │   ├── test_normalized_cut.py
│   │   ├── test_num_nodes.py
│   │   ├── test_one_hot.py
│   │   ├── test_ppr.py
│   │   ├── test_random.py
│   │   ├── test_repeat.py
│   │   ├── test_scatter.py
│   │   ├── test_segment.py
│   │   ├── test_select.py
│   │   ├── test_smiles.py
│   │   ├── test_softmax.py
│   │   ├── test_sort_edge_index.py
│   │   ├── test_sparse.py
│   │   ├── test_spmm.py
│   │   ├── test_subgraph.py
│   │   ├── test_to_dense_adj.py
│   │   ├── test_to_dense_batch.py
│   │   ├── test_total_influence.py
│   │   ├── test_train_test_split_edges.py
│   │   ├── test_tree_decomposition.py
│   │   ├── test_trim_to_layer.py
│   │   ├── test_unbatch.py
│   │   └── test_undirected.py
│   └── visualization/
│       ├── test_graph_visualization.py
│       └── test_influence.py
└── torch_geometric/
    ├── __init__.py
    ├── _compile.py
    ├── _onnx.py
    ├── backend.py
    ├── config_mixin.py
    ├── config_store.py
    ├── contrib/
    │   ├── __init__.py
    │   ├── datasets/
    │   │   └── __init__.py
    │   ├── explain/
    │   │   ├── __init__.py
    │   │   └── pgm_explainer.py
    │   ├── nn/
    │   │   ├── __init__.py
    │   │   ├── conv/
    │   │   │   └── __init__.py
    │   │   └── models/
    │   │       ├── __init__.py
    │   │       └── rbcd_attack.py
    │   └── transforms/
    │       └── __init__.py
    ├── data/
    │   ├── __init__.py
    │   ├── batch.py
    │   ├── collate.py
    │   ├── data.py
    │   ├── database.py
    │   ├── datapipes.py
    │   ├── dataset.py
    │   ├── download.py
    │   ├── extract.py
    │   ├── feature_store.py
    │   ├── graph_store.py
    │   ├── hetero_data.py
    │   ├── hypergraph_data.py
    │   ├── in_memory_dataset.py
    │   ├── lightning/
    │   │   ├── __init__.py
    │   │   └── datamodule.py
    │   ├── makedirs.py
    │   ├── on_disk_dataset.py
    │   ├── remote_backend_utils.py
    │   ├── separate.py
    │   ├── storage.py
    │   ├── summary.py
    │   ├── temporal.py
    │   └── view.py
    ├── datasets/
    │   ├── __init__.py
    │   ├── actor.py
    │   ├── airfrans.py
    │   ├── airports.py
    │   ├── amazon.py
    │   ├── amazon_book.py
    │   ├── amazon_products.py
    │   ├── aminer.py
    │   ├── aqsol.py
    │   ├── attributed_graph_dataset.py
    │   ├── ba2motif_dataset.py
    │   ├── ba_multi_shapes.py
    │   ├── ba_shapes.py
    │   ├── bitcoin_otc.py
    │   ├── brca_tgca.py
    │   ├── citation_full.py
    │   ├── city.py
    │   ├── coauthor.py
    │   ├── coma.py
    │   ├── cornell.py
    │   ├── dblp.py
    │   ├── dbp15k.py
    │   ├── deezer_europe.py
    │   ├── dgraph.py
    │   ├── dynamic_faust.py
    │   ├── elliptic.py
    │   ├── elliptic_temporal.py
    │   ├── email_eu_core.py
    │   ├── entities.py
    │   ├── explainer_dataset.py
    │   ├── facebook.py
    │   ├── fake.py
    │   ├── faust.py
    │   ├── flickr.py
    │   ├── freebase.py
    │   ├── gdelt.py
    │   ├── gdelt_lite.py
    │   ├── ged_dataset.py
    │   ├── gemsec.py
    │   ├── geometry.py
    │   ├── git_mol_dataset.py
    │   ├── github.py
    │   ├── gnn_benchmark_dataset.py
    │   ├── graph_generator/
    │   │   ├── __init__.py
    │   │   ├── ba_graph.py
    │   │   ├── base.py
    │   │   ├── er_graph.py
    │   │   ├── grid_graph.py
    │   │   └── tree_graph.py
    │   ├── heterophilous_graph_dataset.py
    │   ├── hgb_dataset.py
    │   ├── hm.py
    │   ├── hydro_net.py
    │   ├── icews.py
    │   ├── igmc_dataset.py
    │   ├── imdb.py
    │   ├── infection_dataset.py
    │   ├── instruct_mol_dataset.py
    │   ├── jodie.py
    │   ├── karate.py
    │   ├── last_fm.py
    │   ├── lastfm_asia.py
    │   ├── linkx_dataset.py
    │   ├── lrgb.py
    │   ├── malnet_tiny.py
    │   ├── md17.py
    │   ├── medshapenet.py
    │   ├── mixhop_synthetic_dataset.py
    │   ├── mnist_superpixels.py
    │   ├── modelnet.py
    │   ├── molecule_gpt_dataset.py
    │   ├── molecule_net.py
    │   ├── motif_generator/
    │   │   ├── __init__.py
    │   │   ├── base.py
    │   │   ├── custom.py
    │   │   ├── cycle.py
    │   │   ├── grid.py
    │   │   └── house.py
    │   ├── movie_lens.py
    │   ├── movie_lens_100k.py
    │   ├── movie_lens_1m.py
    │   ├── myket.py
    │   ├── nell.py
    │   ├── neurograph.py
    │   ├── ogb_mag.py
    │   ├── omdb.py
    │   ├── opf.py
    │   ├── ose_gvcs.py
    │   ├── particle.py
    │   ├── pascal.py
    │   ├── pascal_pf.py
    │   ├── pcpnet_dataset.py
    │   ├── pcqm4m.py
    │   ├── planetoid.py
    │   ├── polblogs.py
    │   ├── ppi.py
    │   ├── protein_mpnn_dataset.py
    │   ├── qm7.py
    │   ├── qm9.py
    │   ├── rcdd.py
    │   ├── reddit.py
    │   ├── reddit2.py
    │   ├── rel_link_pred_dataset.py
    │   ├── s3dis.py
    │   ├── sbm_dataset.py
    │   ├── shapenet.py
    │   ├── shrec2016.py
    │   ├── snap_dataset.py
    │   ├── suite_sparse.py
    │   ├── tag_dataset.py
    │   ├── taobao.py
    │   ├── teeth3ds.py
    │   ├── tosca.py
    │   ├── tu_dataset.py
    │   ├── twitch.py
    │   ├── upfd.py
    │   ├── utils/
    │   │   ├── __init__.py
    │   │   └── cheatsheet.py
    │   ├── web_qsp_dataset.py
    │   ├── webkb.py
    │   ├── wikics.py
    │   ├── wikidata.py
    │   ├── wikipedia_network.py
    │   ├── willow_object_class.py
    │   ├── word_net.py
    │   ├── yelp.py
    │   └── zinc.py
    ├── debug.py
    ├── deprecation.py
    ├── device.py
    ├── distributed/
    │   ├── __init__.py
    │   ├── dist_context.py
    │   ├── dist_link_neighbor_loader.py
    │   ├── dist_loader.py
    │   ├── dist_neighbor_loader.py
    │   ├── dist_neighbor_sampler.py
    │   ├── event_loop.py
    │   ├── local_feature_store.py
    │   ├── local_graph_store.py
    │   ├── partition.py
    │   ├── rpc.py
    │   └── utils.py
    ├── edge_index.py
    ├── experimental.py
    ├── explain/
    │   ├── __init__.py
    │   ├── algorithm/
    │   │   ├── __init__.py
    │   │   ├── attention_explainer.py
    │   │   ├── base.py
    │   │   ├── captum.py
    │   │   ├── captum_explainer.py
    │   │   ├── dummy_explainer.py
    │   │   ├── gnn_explainer.py
    │   │   ├── graphmask_explainer.py
    │   │   ├── pg_explainer.py
    │   │   └── utils.py
    │   ├── config.py
    │   ├── explainer.py
    │   ├── explanation.py
    │   └── metric/
    │       ├── __init__.py
    │       ├── basic.py
    │       ├── faithfulness.py
    │       └── fidelity.py
    ├── graphgym/
    │   ├── __init__.py
    │   ├── benchmark.py
    │   ├── checkpoint.py
    │   ├── cmd_args.py
    │   ├── config.py
    │   ├── contrib/
    │   │   ├── __init__.py
    │   │   ├── act/
    │   │   │   └── __init__.py
    │   │   ├── config/
    │   │   │   └── __init__.py
    │   │   ├── encoder/
    │   │   │   └── __init__.py
    │   │   ├── head/
    │   │   │   └── __init__.py
    │   │   ├── layer/
    │   │   │   ├── __init__.py
    │   │   │   └── generalconv.py
    │   │   ├── loader/
    │   │   │   └── __init__.py
    │   │   ├── loss/
    │   │   │   └── __init__.py
    │   │   ├── network/
    │   │   │   └── __init__.py
    │   │   ├── optimizer/
    │   │   │   └── __init__.py
    │   │   ├── pooling/
    │   │   │   └── __init__.py
    │   │   ├── stage/
    │   │   │   └── __init__.py
    │   │   ├── train/
    │   │   │   └── __init__.py
    │   │   └── transform/
    │   │       └── __init__.py
    │   ├── imports.py
    │   ├── init.py
    │   ├── loader.py
    │   ├── logger.py
    │   ├── loss.py
    │   ├── model_builder.py
    │   ├── models/
    │   │   ├── __init__.py
    │   │   ├── act.py
    │   │   ├── encoder.py
    │   │   ├── gnn.py
    │   │   ├── head.py
    │   │   ├── layer.py
    │   │   ├── pooling.py
    │   │   └── transform.py
    │   ├── optim.py
    │   ├── register.py
    │   ├── train.py
    │   └── utils/
    │       ├── LICENSE
    │       ├── __init__.py
    │       ├── agg_runs.py
    │       ├── comp_budget.py
    │       ├── device.py
    │       ├── epoch.py
    │       ├── io.py
    │       ├── plot.py
    │       └── tools.py
    ├── hash_tensor.py
    ├── home.py
    ├── index.py
    ├── inspector.py
    ├── io/
    │   ├── __init__.py
    │   ├── fs.py
    │   ├── npz.py
    │   ├── obj.py
    │   ├── off.py
    │   ├── planetoid.py
    │   ├── ply.py
    │   ├── sdf.py
    │   ├── tu.py
    │   └── txt_array.py
    ├── isinstance.py
    ├── lazy_loader.py
    ├── llm/
    │   ├── __init__.py
    │   ├── large_graph_indexer.py
    │   ├── models/
    │   │   ├── __init__.py
    │   │   ├── g_retriever.py
    │   │   ├── git_mol.py
    │   │   ├── glem.py
    │   │   ├── llm.py
    │   │   ├── llm_judge.py
    │   │   ├── molecule_gpt.py
    │   │   ├── protein_mpnn.py
    │   │   ├── sentence_transformer.py
    │   │   ├── txt2kg.py
    │   │   └── vision_transformer.py
    │   ├── rag_loader.py
    │   └── utils/
    │       ├── __init__.py
    │       ├── backend_utils.py
    │       ├── feature_store.py
    │       ├── graph_store.py
    │       └── vectorrag.py
    ├── loader/
    │   ├── __init__.py
    │   ├── base.py
    │   ├── cache.py
    │   ├── cluster.py
    │   ├── data_list_loader.py
    │   ├── dataloader.py
    │   ├── dense_data_loader.py
    │   ├── dynamic_batch_sampler.py
    │   ├── graph_saint.py
    │   ├── hgt_loader.py
    │   ├── ibmb_loader.py
    │   ├── imbalanced_sampler.py
    │   ├── link_loader.py
    │   ├── link_neighbor_loader.py
    │   ├── mixin.py
    │   ├── neighbor_loader.py
    │   ├── neighbor_sampler.py
    │   ├── node_loader.py
    │   ├── prefetch.py
    │   ├── random_node_loader.py
    │   ├── shadow.py
    │   ├── temporal_dataloader.py
    │   ├── utils.py
    │   └── zip_loader.py
    ├── logging.py
    ├── metrics/
    │   ├── __init__.py
    │   └── link_pred.py
    ├── nn/
    │   ├── __init__.py
    │   ├── aggr/
    │   │   ├── __init__.py
    │   │   ├── attention.py
    │   │   ├── base.py
    │   │   ├── basic.py
    │   │   ├── deep_sets.py
    │   │   ├── equilibrium.py
    │   │   ├── fused.py
    │   │   ├── gmt.py
    │   │   ├── gru.py
    │   │   ├── lcm.py
    │   │   ├── lstm.py
    │   │   ├── mlp.py
    │   │   ├── multi.py
    │   │   ├── patch_transformer.py
    │   │   ├── quantile.py
    │   │   ├── scaler.py
    │   │   ├── set2set.py
    │   │   ├── set_transformer.py
    │   │   ├── sort.py
    │   │   ├── utils.py
    │   │   └── variance_preserving.py
    │   ├── attention/
    │   │   ├── __init__.py
    │   │   ├── performer.py
    │   │   ├── polynormer.py
    │   │   ├── qformer.py
    │   │   └── sgformer.py
    │   ├── conv/
    │   │   ├── __init__.py
    │   │   ├── agnn_conv.py
    │   │   ├── antisymmetric_conv.py
    │   │   ├── appnp.py
    │   │   ├── arma_conv.py
    │   │   ├── cg_conv.py
    │   │   ├── cheb_conv.py
    │   │   ├── cluster_gcn_conv.py
    │   │   ├── collect.jinja
    │   │   ├── cugraph/
    │   │   │   ├── __init__.py
    │   │   │   ├── base.py
    │   │   │   ├── gat_conv.py
    │   │   │   ├── rgcn_conv.py
    │   │   │   └── sage_conv.py
    │   │   ├── dir_gnn_conv.py
    │   │   ├── dna_conv.py
    │   │   ├── edge_conv.py
    │   │   ├── edge_updater.jinja
    │   │   ├── eg_conv.py
    │   │   ├── fa_conv.py
    │   │   ├── feast_conv.py
    │   │   ├── film_conv.py
    │   │   ├── fused_gat_conv.py
    │   │   ├── gat_conv.py
    │   │   ├── gated_graph_conv.py
    │   │   ├── gatv2_conv.py
    │   │   ├── gcn2_conv.py
    │   │   ├── gcn_conv.py
    │   │   ├── gen_conv.py
    │   │   ├── general_conv.py
    │   │   ├── gin_conv.py
    │   │   ├── gmm_conv.py
    │   │   ├── gps_conv.py
    │   │   ├── graph_conv.py
    │   │   ├── gravnet_conv.py
    │   │   ├── han_conv.py
    │   │   ├── heat_conv.py
    │   │   ├── hetero_conv.py
    │   │   ├── hgt_conv.py
    │   │   ├── hypergraph_conv.py
    │   │   ├── le_conv.py
    │   │   ├── lg_conv.py
    │   │   ├── meshcnn_conv.py
    │   │   ├── message_passing.py
    │   │   ├── mf_conv.py
    │   │   ├── mixhop_conv.py
    │   │   ├── nn_conv.py
    │   │   ├── pan_conv.py
    │   │   ├── pdn_conv.py
    │   │   ├── pna_conv.py
    │   │   ├── point_conv.py
    │   │   ├── point_gnn_conv.py
    │   │   ├── point_transformer_conv.py
    │   │   ├── ppf_conv.py
    │   │   ├── propagate.jinja
    │   │   ├── res_gated_graph_conv.py
    │   │   ├── rgat_conv.py
    │   │   ├── rgcn_conv.py
    │   │   ├── sage_conv.py
    │   │   ├── sg_conv.py
    │   │   ├── signed_conv.py
    │   │   ├── simple_conv.py
    │   │   ├── spline_conv.py
    │   │   ├── ssg_conv.py
    │   │   ├── supergat_conv.py
    │   │   ├── tag_conv.py
    │   │   ├── transformer_conv.py
    │   │   ├── utils/
    │   │   │   ├── __init__.py
    │   │   │   └── cheatsheet.py
    │   │   ├── wl_conv.py
    │   │   ├── wl_conv_continuous.py
    │   │   └── x_conv.py
    │   ├── data_parallel.py
    │   ├── dense/
    │   │   ├── __init__.py
    │   │   ├── dense_gat_conv.py
    │   │   ├── dense_gcn_conv.py
    │   │   ├── dense_gin_conv.py
    │   │   ├── dense_graph_conv.py
    │   │   ├── dense_sage_conv.py
    │   │   ├── diff_pool.py
    │   │   ├── dmon_pool.py
    │   │   ├── linear.py
    │   │   └── mincut_pool.py
    │   ├── encoding.py
    │   ├── functional/
    │   │   ├── __init__.py
    │   │   ├── bro.py
    │   │   └── gini.py
    │   ├── fx.py
    │   ├── glob.py
    │   ├── inits.py
    │   ├── kge/
    │   │   ├── __init__.py
    │   │   ├── base.py
    │   │   ├── complex.py
    │   │   ├── distmult.py
    │   │   ├── loader.py
    │   │   ├── rotate.py
    │   │   └── transe.py
    │   ├── lr_scheduler.py
    │   ├── model_hub.py
    │   ├── models/
    │   │   ├── __init__.py
    │   │   ├── attentive_fp.py
    │   │   ├── attract_repel.py
    │   │   ├── autoencoder.py
    │   │   ├── basic_gnn.py
    │   │   ├── captum.py
    │   │   ├── correct_and_smooth.py
    │   │   ├── deep_graph_infomax.py
    │   │   ├── deepgcn.py
    │   │   ├── dimenet.py
    │   │   ├── dimenet_utils.py
    │   │   ├── gnnff.py
    │   │   ├── gpse.py
    │   │   ├── graph_mixer.py
    │   │   ├── graph_unet.py
    │   │   ├── jumping_knowledge.py
    │   │   ├── label_prop.py
    │   │   ├── lightgcn.py
    │   │   ├── linkx.py
    │   │   ├── lpformer.py
    │   │   ├── mask_label.py
    │   │   ├── meta.py
    │   │   ├── metapath2vec.py
    │   │   ├── mlp.py
    │   │   ├── neural_fingerprint.py
    │   │   ├── node2vec.py
    │   │   ├── pmlp.py
    │   │   ├── polynormer.py
    │   │   ├── re_net.py
    │   │   ├── rect.py
    │   │   ├── rev_gnn.py
    │   │   ├── schnet.py
    │   │   ├── sgformer.py
    │   │   ├── signed_gcn.py
    │   │   ├── tgn.py
    │   │   └── visnet.py
    │   ├── module_dict.py
    │   ├── norm/
    │   │   ├── __init__.py
    │   │   ├── batch_norm.py
    │   │   ├── diff_group_norm.py
    │   │   ├── graph_norm.py
    │   │   ├── graph_size_norm.py
    │   │   ├── instance_norm.py
    │   │   ├── layer_norm.py
    │   │   ├── mean_subtraction_norm.py
    │   │   ├── msg_norm.py
    │   │   └── pair_norm.py
    │   ├── parameter_dict.py
    │   ├── pool/
    │   │   ├── __init__.py
    │   │   ├── approx_knn.py
    │   │   ├── asap.py
    │   │   ├── avg_pool.py
    │   │   ├── cluster_pool.py
    │   │   ├── connect/
    │   │   │   ├── __init__.py
    │   │   │   ├── base.py
    │   │   │   └── filter_edges.py
    │   │   ├── consecutive.py
    │   │   ├── decimation.py
    │   │   ├── edge_pool.py
    │   │   ├── glob.py
    │   │   ├── graclus.py
    │   │   ├── knn.py
    │   │   ├── max_pool.py
    │   │   ├── mem_pool.py
    │   │   ├── pan_pool.py
    │   │   ├── pool.py
    │   │   ├── sag_pool.py
    │   │   ├── select/
    │   │   │   ├── __init__.py
    │   │   │   ├── base.py
    │   │   │   └── topk.py
    │   │   ├── topk_pool.py
    │   │   └── voxel_grid.py
    │   ├── reshape.py
    │   ├── resolver.py
    │   ├── sequential.jinja
    │   ├── sequential.py
    │   ├── summary.py
    │   ├── to_fixed_size_transformer.py
    │   ├── to_hetero_module.py
    │   ├── to_hetero_transformer.py
    │   ├── to_hetero_with_bases_transformer.py
    │   └── unpool/
    │       ├── __init__.py
    │       └── knn_interpolate.py
    ├── profile/
    │   ├── __init__.py
    │   ├── benchmark.py
    │   ├── nvtx.py
    │   ├── profile.py
    │   ├── profiler.py
    │   └── utils.py
    ├── resolver.py
    ├── sampler/
    │   ├── __init__.py
    │   ├── base.py
    │   ├── hgt_sampler.py
    │   ├── neighbor_sampler.py
    │   └── utils.py
    ├── seed.py
    ├── template.py
    ├── testing/
    │   ├── __init__.py
    │   ├── asserts.py
    │   ├── data.py
    │   ├── decorators.py
    │   ├── distributed.py
    │   ├── feature_store.py
    │   └── graph_store.py
    ├── transforms/
    │   ├── __init__.py
    │   ├── add_gpse.py
    │   ├── add_metapaths.py
    │   ├── add_positional_encoding.py
    │   ├── add_remaining_self_loops.py
    │   ├── add_self_loops.py
    │   ├── base_transform.py
    │   ├── cartesian.py
    │   ├── center.py
    │   ├── compose.py
    │   ├── constant.py
    │   ├── delaunay.py
    │   ├── distance.py
    │   ├── face_to_edge.py
    │   ├── feature_propagation.py
    │   ├── fixed_points.py
    │   ├── gcn_norm.py
    │   ├── gdc.py
    │   ├── generate_mesh_normals.py
    │   ├── grid_sampling.py
    │   ├── half_hop.py
    │   ├── knn_graph.py
    │   ├── laplacian_lambda_max.py
    │   ├── largest_connected_components.py
    │   ├── line_graph.py
    │   ├── linear_transformation.py
    │   ├── local_cartesian.py
    │   ├── local_degree_profile.py
    │   ├── mask.py
    │   ├── node_property_split.py
    │   ├── normalize_features.py
    │   ├── normalize_rotation.py
    │   ├── normalize_scale.py
    │   ├── one_hot_degree.py
    │   ├── pad.py
    │   ├── point_pair_features.py
    │   ├── polar.py
    │   ├── radius_graph.py
    │   ├── random_flip.py
    │   ├── random_jitter.py
    │   ├── random_link_split.py
    │   ├── random_node_split.py
    │   ├── random_rotate.py
    │   ├── random_scale.py
    │   ├── random_shear.py
    │   ├── remove_duplicated_edges.py
    │   ├── remove_isolated_nodes.py
    │   ├── remove_self_loops.py
    │   ├── remove_training_classes.py
    │   ├── rooted_subgraph.py
    │   ├── sample_points.py
    │   ├── sign.py
    │   ├── spherical.py
    │   ├── svd_feature_reduction.py
    │   ├── target_indegree.py
    │   ├── to_dense.py
    │   ├── to_device.py
    │   ├── to_sparse_tensor.py
    │   ├── to_superpixels.py
    │   ├── to_undirected.py
    │   ├── two_hop.py
    │   └── virtual_node.py
    ├── typing.py
    ├── utils/
    │   ├── __init__.py
    │   ├── _assortativity.py
    │   ├── _coalesce.py
    │   ├── _degree.py
    │   ├── _grid.py
    │   ├── _homophily.py
    │   ├── _index_sort.py
    │   ├── _lexsort.py
    │   ├── _negative_sampling.py
    │   ├── _normalize_edge_index.py
    │   ├── _normalized_cut.py
    │   ├── _one_hot.py
    │   ├── _scatter.py
    │   ├── _segment.py
    │   ├── _select.py
    │   ├── _softmax.py
    │   ├── _sort_edge_index.py
    │   ├── _spmm.py
    │   ├── _subgraph.py
    │   ├── _to_dense_adj.py
    │   ├── _to_dense_batch.py
    │   ├── _train_test_split_edges.py
    │   ├── _tree_decomposition.py
    │   ├── _trim_to_layer.py
    │   ├── _unbatch.py
    │   ├── augmentation.py
    │   ├── convert.py
    │   ├── cross_entropy.py
    │   ├── dropout.py
    │   ├── embedding.py
    │   ├── functions.py
    │   ├── geodesic.py
    │   ├── hetero.py
    │   ├── influence.py
    │   ├── isolated.py
    │   ├── laplacian.py
    │   ├── loop.py
    │   ├── map.py
    │   ├── mask.py
    │   ├── mesh_laplacian.py
    │   ├── mixin.py
    │   ├── nested.py
    │   ├── noise_scheduler.py
    │   ├── num_nodes.py
    │   ├── ppr.py
    │   ├── random.py
    │   ├── repeat.py
    │   ├── smiles.py
    │   ├── sparse.py
    │   └── undirected.py
    ├── visualization/
    │   ├── __init__.py
    │   ├── graph.py
    │   └── influence.py
    └── warnings.py
Download .txt
Showing preview only (648K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (8209 symbols across 1230 files)

FILE: benchmark/citation/appnp.py
  class Net (line 31) | class Net(torch.nn.Module):
    method __init__ (line 32) | def __init__(self, dataset):
    method reset_parameters (line 38) | def reset_parameters(self):
    method forward (line 42) | def forward(self, data):

FILE: benchmark/citation/arma.py
  class Net (line 32) | class Net(torch.nn.Module):
    method __init__ (line 33) | def __init__(self, dataset):
    method reset_parameters (line 42) | def reset_parameters(self):
    method forward (line 46) | def forward(self, data):

FILE: benchmark/citation/cheb.py
  class Net (line 29) | class Net(torch.nn.Module):
    method __init__ (line 30) | def __init__(self, dataset):
    method reset_parameters (line 35) | def reset_parameters(self):
    method forward (line 39) | def forward(self, data):

FILE: benchmark/citation/datasets.py
  function get_planetoid_dataset (line 7) | def get_planetoid_dataset(name, normalize_features=False, transform=None):

FILE: benchmark/citation/gat.py
  class Net (line 30) | class Net(torch.nn.Module):
    method __init__ (line 31) | def __init__(self, dataset):
    method reset_parameters (line 39) | def reset_parameters(self):
    method forward (line 43) | def forward(self, data):

FILE: benchmark/citation/gcn.py
  class Net (line 28) | class Net(torch.nn.Module):
    method __init__ (line 29) | def __init__(self, dataset):
    method reset_parameters (line 34) | def reset_parameters(self):
    method forward (line 38) | def forward(self, data):

FILE: benchmark/citation/sgc.py
  class Net (line 27) | class Net(torch.nn.Module):
    method __init__ (line 28) | def __init__(self, dataset):
    method reset_parameters (line 33) | def reset_parameters(self):
    method forward (line 36) | def forward(self, data):

FILE: benchmark/citation/statistics.py
  function print_dataset (line 4) | def print_dataset(dataset):

FILE: benchmark/citation/train_eval.py
  function random_planetoid_splits (line 19) | def random_planetoid_splits(data, num_classes):
  function run_train (line 43) | def run_train(dataset, model, runs, epochs, lr, weight_decay, early_stop...
  function run_inference (line 121) | def run_inference(dataset, model, epochs, profiling, bf16, use_compile,
  function run (line 152) | def run(dataset, model, runs, epochs, lr, weight_decay, early_stopping,
  function train (line 164) | def train(model, optimizer, data):
  function evaluate (line 174) | def evaluate(model, data):
  function inference (line 193) | def inference(model, data):

FILE: benchmark/inference/inference_benchmark.py
  function full_batch_inference (line 35) | def full_batch_inference(model, data):
  function run (line 44) | def run(args: argparse.ArgumentParser):

FILE: benchmark/kernel/asap.py
  class ASAP (line 13) | class ASAP(torch.nn.Module):
    method __init__ (line 14) | def __init__(self, dataset, num_layers, hidden, ratio=0.8, dropout=0):
    method reset_parameters (line 31) | def reset_parameters(self):
    method forward (line 40) | def forward(self, data):
    method __repr__ (line 60) | def __repr__(self):

FILE: benchmark/kernel/datasets.py
  class NormalizedDegree (line 10) | class NormalizedDegree:
    method __init__ (line 11) | def __init__(self, mean, std):
    method __call__ (line 15) | def __call__(self, data):
  function get_dataset (line 22) | def get_dataset(name, sparse=True, cleaned=False):

FILE: benchmark/kernel/diff_pool.py
  class Block (line 10) | class Block(torch.nn.Module):
    method __init__ (line 11) | def __init__(self, in_channels, hidden_channels, out_channels, mode='c...
    method reset_parameters (line 22) | def reset_parameters(self):
    method forward (line 27) | def forward(self, x, adj, mask=None):
  class DiffPool (line 33) | class DiffPool(torch.nn.Module):
    method __init__ (line 34) | def __init__(self, dataset, num_layers, hidden, ratio=0.25):
    method reset_parameters (line 52) | def reset_parameters(self):
    method forward (line 63) | def forward(self, data):
    method __repr__ (line 85) | def __repr__(self):

FILE: benchmark/kernel/edge_pool.py
  class EdgePool (line 13) | class EdgePool(torch.nn.Module):
    method __init__ (line 14) | def __init__(self, dataset, num_layers, hidden):
    method reset_parameters (line 29) | def reset_parameters(self):
    method forward (line 38) | def forward(self, data):
    method __repr__ (line 54) | def __repr__(self):

FILE: benchmark/kernel/gcn.py
  class GCN (line 8) | class GCN(torch.nn.Module):
    method __init__ (line 9) | def __init__(self, dataset, num_layers, hidden):
    method reset_parameters (line 18) | def reset_parameters(self):
    method forward (line 25) | def forward(self, data):
    method __repr__ (line 36) | def __repr__(self):
  class GCNWithJK (line 40) | class GCNWithJK(torch.nn.Module):
    method __init__ (line 41) | def __init__(self, dataset, num_layers, hidden, mode='cat'):
    method reset_parameters (line 54) | def reset_parameters(self):
    method forward (line 62) | def forward(self, data):
    method __repr__ (line 76) | def __repr__(self):

FILE: benchmark/kernel/gin.py
  class GIN0 (line 9) | class GIN0(torch.nn.Module):
    method __init__ (line 10) | def __init__(self, dataset, num_layers, hidden):
    method reset_parameters (line 36) | def reset_parameters(self):
    method forward (line 43) | def forward(self, data):
    method __repr__ (line 54) | def __repr__(self):
  class GIN0WithJK (line 58) | class GIN0WithJK(torch.nn.Module):
    method __init__ (line 59) | def __init__(self, dataset, num_layers, hidden, mode='cat'):
    method reset_parameters (line 89) | def reset_parameters(self):
    method forward (line 97) | def forward(self, data):
    method __repr__ (line 111) | def __repr__(self):
  class GIN (line 115) | class GIN(torch.nn.Module):
    method __init__ (line 116) | def __init__(self, dataset, num_layers, hidden):
    method reset_parameters (line 142) | def reset_parameters(self):
    method forward (line 149) | def forward(self, data):
    method __repr__ (line 160) | def __repr__(self):
  class GINWithJK (line 164) | class GINWithJK(torch.nn.Module):
    method __init__ (line 165) | def __init__(self, dataset, num_layers, hidden, mode='cat'):
    method reset_parameters (line 195) | def reset_parameters(self):
    method forward (line 203) | def forward(self, data):
    method __repr__ (line 217) | def __repr__(self):

FILE: benchmark/kernel/global_attention.py
  class GlobalAttentionNet (line 8) | class GlobalAttentionNet(torch.nn.Module):
    method __init__ (line 9) | def __init__(self, dataset, num_layers, hidden):
    method reset_parameters (line 19) | def reset_parameters(self):
    method forward (line 27) | def forward(self, data):
    method __repr__ (line 38) | def __repr__(self):

FILE: benchmark/kernel/graclus.py
  class Graclus (line 15) | class Graclus(torch.nn.Module):
    method __init__ (line 16) | def __init__(self, dataset, num_layers, hidden):
    method reset_parameters (line 26) | def reset_parameters(self):
    method forward (line 34) | def forward(self, data):
    method __repr__ (line 52) | def __repr__(self):

FILE: benchmark/kernel/graph_sage.py
  class GraphSAGE (line 8) | class GraphSAGE(torch.nn.Module):
    method __init__ (line 9) | def __init__(self, dataset, num_layers, hidden):
    method reset_parameters (line 18) | def reset_parameters(self):
    method forward (line 25) | def forward(self, data):
    method __repr__ (line 36) | def __repr__(self):
  class GraphSAGEWithJK (line 40) | class GraphSAGEWithJK(torch.nn.Module):
    method __init__ (line 41) | def __init__(self, dataset, num_layers, hidden, mode='cat'):
    method reset_parameters (line 54) | def reset_parameters(self):
    method forward (line 62) | def forward(self, data):
    method __repr__ (line 76) | def __repr__(self):

FILE: benchmark/kernel/main.py
  function logger (line 51) | def logger(info):

FILE: benchmark/kernel/main_performance.py
  function prepare_dataloader (line 57) | def prepare_dataloader(dataset_name):
  function run_train (line 75) | def run_train():
  function run_inference (line 117) | def run_inference():

FILE: benchmark/kernel/sag_pool.py
  class SAGPool (line 13) | class SAGPool(torch.nn.Module):
    method __init__ (line 14) | def __init__(self, dataset, num_layers, hidden, ratio=0.8):
    method reset_parameters (line 29) | def reset_parameters(self):
    method forward (line 38) | def forward(self, data):
    method __repr__ (line 55) | def __repr__(self):

FILE: benchmark/kernel/set2set.py
  class Set2SetNet (line 8) | class Set2SetNet(torch.nn.Module):
    method __init__ (line 9) | def __init__(self, dataset, num_layers, hidden):
    method reset_parameters (line 19) | def reset_parameters(self):
    method forward (line 27) | def forward(self, data):
    method __repr__ (line 38) | def __repr__(self):

FILE: benchmark/kernel/sort_pool.py
  class SortPool (line 8) | class SortPool(torch.nn.Module):
    method __init__ (line 9) | def __init__(self, dataset, num_layers, hidden):
    method reset_parameters (line 20) | def reset_parameters(self):
    method forward (line 28) | def forward(self, data):
    method __repr__ (line 42) | def __repr__(self):

FILE: benchmark/kernel/statistics.py
  function print_dataset (line 4) | def print_dataset(dataset):

FILE: benchmark/kernel/top_k.py
  class TopK (line 13) | class TopK(torch.nn.Module):
    method __init__ (line 14) | def __init__(self, dataset, num_layers, hidden, ratio=0.8):
    method reset_parameters (line 29) | def reset_parameters(self):
    method forward (line 38) | def forward(self, data):
    method __repr__ (line 55) | def __repr__(self):

FILE: benchmark/kernel/train_eval.py
  function cross_validation_with_val_set (line 20) | def cross_validation_with_val_set(dataset, model, folds, epochs, batch_s...
  function k_fold (line 98) | def k_fold(dataset, folds):
  function num_graphs (line 116) | def num_graphs(data):
  function train (line 123) | def train(model, optimizer, loader):
  function eval_acc (line 138) | def eval_acc(model, loader):
  function eval_loss (line 150) | def eval_loss(model, loader):
  function inference_run (line 163) | def inference_run(model, loader, bf16):

FILE: benchmark/loader/neighbor_loader.py
  function run (line 16) | def run(args: argparse.ArgumentParser):

FILE: benchmark/multi_gpu/training/common.py
  function train_homo (line 28) | def train_homo(model: Any, loader: NeighborLoader, optimizer: torch.opti...
  function train_hetero (line 44) | def train_hetero(model: Any, loader: NeighborLoader,
  function maybe_synchronize (line 61) | def maybe_synchronize(device: str):
  function create_mask_per_rank (line 68) | def create_mask_per_rank(
  function run (line 86) | def run(rank: int, world_size: int, args: argparse.ArgumentParser,
  function get_predefined_args (line 256) | def get_predefined_args() -> argparse.ArgumentParser:

FILE: benchmark/multi_gpu/training/training_benchmark_cuda.py
  function run_cuda (line 18) | def run_cuda(rank: int, world_size: int, args: argparse.ArgumentParser,

FILE: benchmark/multi_gpu/training/training_benchmark_xpu.py
  function get_dist_params (line 16) | def get_dist_params() -> Tuple[int, int, str]:
  function custom_optimizer (line 36) | def custom_optimizer(model: Any, optimizer: Any) -> Tuple[Any, Any]:

FILE: benchmark/points/datasets.py
  function get_dataset (line 7) | def get_dataset(num_points):

FILE: benchmark/points/edge_cnn.py
  class Net (line 28) | class Net(torch.nn.Module):
    method __init__ (line 29) | def __init__(self, num_classes):
    method forward (line 45) | def forward(self, pos, batch):

FILE: benchmark/points/mpnn.py
  class Net (line 28) | class Net(torch.nn.Module):
    method __init__ (line 29) | def __init__(self, num_classes):
    method forward (line 45) | def forward(self, pos, batch):

FILE: benchmark/points/point_cnn.py
  class Net (line 26) | class Net(torch.nn.Module):
    method __init__ (line 27) | def __init__(self, num_classes):
    method forward (line 42) | def forward(self, pos, batch):

FILE: benchmark/points/point_net.py
  class Net (line 28) | class Net(torch.nn.Module):
    method __init__ (line 29) | def __init__(self, num_classes):
    method forward (line 45) | def forward(self, pos, batch):

FILE: benchmark/points/spline_cnn.py
  class Net (line 26) | class Net(torch.nn.Module):
    method __init__ (line 27) | def __init__(self, num_classes):
    method forward (line 38) | def forward(self, pos, batch):

FILE: benchmark/points/statistics.py
  function print_dataset (line 6) | def print_dataset(train_dataset, test_dataset):

FILE: benchmark/points/train_eval.py
  function run_train (line 18) | def run_train(train_dataset, test_dataset, model, epochs, batch_size,
  function run_inference (line 58) | def run_inference(test_dataset, model, epochs, batch_size, profiling, bf16,
  function run (line 84) | def run(train_dataset, test_dataset, model, epochs, batch_size, lr,
  function train (line 96) | def train(model, optimizer, train_loader, device):
  function test (line 109) | def test(model, test_loader, device):
  function inference (line 123) | def inference(model, test_loader, device, bf16):

FILE: benchmark/runtime/dgl/gat.py
  class GATConv (line 10) | class GATConv(torch.nn.Module):
    method __init__ (line 11) | def __init__(self, g, in_channels, out_channels, heads=1,
    method reset_parameters (line 27) | def reset_parameters(self):
    method gat_msg (line 32) | def gat_msg(self, edge):
    method gat_reduce (line 38) | def gat_reduce(self, node):
    method forward (line 44) | def forward(self, x):
  class GAT (line 54) | class GAT(torch.nn.Module):
    method __init__ (line 55) | def __init__(self, g, in_channels, out_channels):
    method forward (line 61) | def forward(self, x):
  class GATSPMVConv (line 69) | class GATSPMVConv(torch.nn.Module):
    method __init__ (line 70) | def __init__(self, g, in_channels, out_channels, heads=1,
    method reset_parameters (line 85) | def reset_parameters(self):
    method forward (line 91) | def forward(self, x):
    method edge_attention (line 104) | def edge_attention(self, edge):
    method edge_softmax (line 108) | def edge_softmax(self):
  class GATSPMV (line 116) | class GATSPMV(torch.nn.Module):
    method __init__ (line 117) | def __init__(self, g, in_channels, out_channels):
    method forward (line 123) | def forward(self, x):

FILE: benchmark/runtime/dgl/gcn.py
  class GCNConv (line 9) | class GCNConv(torch.nn.Module):
    method __init__ (line 10) | def __init__(self, g, in_channels, out_channels):
    method reset_parameters (line 17) | def reset_parameters(self):
    method gcn_msg (line 21) | def gcn_msg(self, edge):
    method gcn_reduce (line 24) | def gcn_reduce(self, node):
    method forward (line 27) | def forward(self, x):
  class GCN (line 35) | class GCN(torch.nn.Module):
    method __init__ (line 36) | def __init__(self, g, in_channels, out_channels):
    method forward (line 41) | def forward(self, x):
  class GCNSPMVConv (line 48) | class GCNSPMVConv(torch.nn.Module):
    method __init__ (line 49) | def __init__(self, g, in_channels, out_channels):
    method reset_parameters (line 56) | def reset_parameters(self):
    method forward (line 60) | def forward(self, x):
  class GCNSPMV (line 70) | class GCNSPMV(torch.nn.Module):
    method __init__ (line 71) | def __init__(self, g, in_channels, out_channels):
    method forward (line 76) | def forward(self, x):

FILE: benchmark/runtime/dgl/hidden.py
  class HiddenPrint (line 8) | class HiddenPrint:
    method __enter__ (line 9) | def __enter__(self):
    method __exit__ (line 13) | def __exit__(self, exc_type, exc_val, exc_tb):

FILE: benchmark/runtime/dgl/rgcn.py
  class RGCNConv (line 9) | class RGCNConv(torch.nn.Module):
    method __init__ (line 10) | def __init__(self, g, in_channels, out_channels, num_relations, num_ba...
    method reset_parameters (line 26) | def reset_parameters(self):
    method rgcn_reduce (line 33) | def rgcn_reduce(self, node):
    method forward (line 36) | def forward(self, x):
  class RGCN (line 69) | class RGCN(torch.nn.Module):
    method __init__ (line 70) | def __init__(self, g, in_channels, out_channels, num_relations):
    method forward (line 75) | def forward(self, x):
  class RGCNSPMVConv (line 81) | class RGCNSPMVConv(torch.nn.Module):
    method __init__ (line 82) | def __init__(self, g, in_channels, out_channels, num_relations, num_ba...
    method reset_parameters (line 98) | def reset_parameters(self):
    method forward (line 105) | def forward(self, x):
  class RGCNSPMV (line 138) | class RGCNSPMV(torch.nn.Module):
    method __init__ (line 139) | def __init__(self, g, in_channels, out_channels, num_relations):
    method forward (line 146) | def forward(self, x):

FILE: benchmark/runtime/dgl/train.py
  function train_runtime (line 7) | def train_runtime(model, data, epochs, device):

FILE: benchmark/runtime/gat.py
  class GAT (line 7) | class GAT(torch.nn.Module):
    method __init__ (line 8) | def __init__(self, in_channels, out_channels):
    method forward (line 13) | def forward(self, data):

FILE: benchmark/runtime/gcn.py
  class GCN (line 7) | class GCN(torch.nn.Module):
    method __init__ (line 8) | def __init__(self, in_channels, out_channels):
    method forward (line 13) | def forward(self, data):

FILE: benchmark/runtime/rgcn.py
  class RGCN (line 7) | class RGCN(torch.nn.Module):
    method __init__ (line 8) | def __init__(self, in_channels, out_channels, num_relations):
    method forward (line 14) | def forward(self, data):

FILE: benchmark/runtime/train.py
  function train_runtime (line 7) | def train_runtime(model, data, epochs, device):

FILE: benchmark/training/training_benchmark.py
  function train_homo (line 46) | def train_homo(model, loader, optimizer, device, progress_bar=True, desc...
  function train_hetero (line 74) | def train_hetero(model, loader, optimizer, device, progress_bar=True, de...
  function run (line 98) | def run(args: argparse.ArgumentParser):

FILE: benchmark/utils/hetero_gat.py
  class HeteroGAT (line 7) | class HeteroGAT(torch.nn.Module):
    method __init__ (line 8) | def __init__(self, metadata, hidden_channels, num_layers, output_chann...
    method forward (line 15) | def forward(self, x_dict, edge_index_dict):
    method inference (line 19) | def inference(self, loader, device, progress_bar=False, **kwargs):
    method test (line 31) | def test(self, x, loader, device, progress_bar=False):

FILE: benchmark/utils/hetero_sage.py
  class HeteroGraphSAGE (line 7) | class HeteroGraphSAGE(torch.nn.Module):
    method __init__ (line 8) | def __init__(self, metadata, hidden_channels, num_layers, output_chann...
    method forward (line 14) | def forward(self, x_dict, edge_index_dict):
    method inference (line 18) | def inference(self, loader, device, progress_bar=False, **kwargs):
    method test (line 30) | def test(self, loader, device, progress_bar=False):

FILE: benchmark/utils/utils.py
  function emit_itt (line 24) | def emit_itt(*args, **kwargs):
  function get_dataset_with_transformation (line 39) | def get_dataset_with_transformation(name, root, use_sparse_tensor=False,
  function get_dataset (line 83) | def get_dataset(name, root, use_sparse_tensor=False, bf16=False):
  function get_model (line 89) | def get_model(name, params, metadata=None):
  function get_split_masks (line 117) | def get_split_masks(data, dataset_name):
  function save_benchmark_data (line 129) | def save_benchmark_data(csv_data, batch_size, layers, num_neighbors,
  function write_to_csv (line 144) | def write_to_csv(csv_data, write_csv='bench', training=False):
  function test (line 163) | def test(model, loader, device, hetero, progress_bar=True,

FILE: docs/source/_static/js/version_alert.js
  function warnOnLatestVersion (line 1) | function warnOnLatestVersion() {

FILE: docs/source/conf.py
  function rst_jinja_render (line 71) | def rst_jinja_render(app, _, source):
  function setup (line 77) | def setup(app):

FILE: examples/agnn.py
  class Net (line 16) | class Net(torch.nn.Module):
    method __init__ (line 17) | def __init__(self):
    method forward (line 24) | def forward(self):
  function train (line 39) | def train():
  function test (line 47) | def test():

FILE: examples/ar_link_pred.py
  class GCNEncoder (line 13) | class GCNEncoder(torch.nn.Module):
    method __init__ (line 14) | def __init__(self, in_channels, hidden_channels, out_channels):
    method forward (line 19) | def forward(self, x, edge_index):
  class LinkPredictor (line 24) | class LinkPredictor(torch.nn.Module):
    method __init__ (line 25) | def __init__(self, in_channels, hidden_channels):
    method forward (line 30) | def forward(self, z_i, z_j):
  class ARLinkPredictor (line 37) | class ARLinkPredictor(torch.nn.Module):
    method __init__ (line 38) | def __init__(self, in_channels):
    method forward (line 44) | def forward(self, z_i, z_j):
  function train (line 59) | def train(encoder, predictor, data, optimizer):
  function test (line 93) | def test(encoder, predictor, data):
  function compute_auc (line 115) | def compute_auc(pos_out, neg_out):
  function main (line 129) | def main():

FILE: examples/argva_node_clustering.py
  class Encoder (line 35) | class Encoder(torch.nn.Module):
    method __init__ (line 36) | def __init__(self, in_channels, hidden_channels, out_channels):
    method forward (line 42) | def forward(self, x, edge_index):
  class Discriminator (line 47) | class Discriminator(torch.nn.Module):
    method __init__ (line 48) | def __init__(self, in_channels, hidden_channels, out_channels):
    method forward (line 54) | def forward(self, x):
  function train (line 70) | def train():
  function test (line 91) | def test(data):
  function plot_points (line 121) | def plot_points(data, colors):

FILE: examples/arma.py
  class Net (line 16) | class Net(torch.nn.Module):
    method __init__ (line 17) | def __init__(self, in_channels, hidden_channels, out_channels):
    method forward (line 27) | def forward(self, x, edge_index):
  function train (line 47) | def train():
  function test (line 56) | def test():

FILE: examples/attentive_fp.py
  class GenFeatures (line 13) | class GenFeatures:
    method __init__ (line 14) | def __init__(self):
    method __call__ (line 36) | def __call__(self, data):
  function train (line 119) | def train():
  function test (line 134) | def test(loader):

FILE: examples/autoencoder.py
  class GCNEncoder (line 37) | class GCNEncoder(torch.nn.Module):
    method __init__ (line 38) | def __init__(self, in_channels, out_channels):
    method forward (line 43) | def forward(self, x, edge_index):
  class VariationalGCNEncoder (line 48) | class VariationalGCNEncoder(torch.nn.Module):
    method __init__ (line 49) | def __init__(self, in_channels, out_channels):
    method forward (line 55) | def forward(self, x, edge_index):
  class LinearEncoder (line 60) | class LinearEncoder(torch.nn.Module):
    method __init__ (line 61) | def __init__(self, in_channels, out_channels):
    method forward (line 65) | def forward(self, x, edge_index):
  class VariationalLinearEncoder (line 69) | class VariationalLinearEncoder(torch.nn.Module):
    method __init__ (line 70) | def __init__(self, in_channels, out_channels):
    method forward (line 75) | def forward(self, x, edge_index):
  function train (line 94) | def train():
  function test (line 107) | def test(data):

FILE: examples/cluster_gcn_ppi.py
  class Net (line 28) | class Net(torch.nn.Module):
    method __init__ (line 29) | def __init__(self, in_channels, hidden_channels, out_channels, num_lay...
    method forward (line 40) | def forward(self, x, edge_index):
  function train (line 56) | def train():
  function test (line 71) | def test(loader):

FILE: examples/cluster_gcn_reddit.py
  class Net (line 24) | class Net(torch.nn.Module):
    method __init__ (line 25) | def __init__(self, in_channels, out_channels):
    method forward (line 31) | def forward(self, x, edge_index):
    method inference (line 39) | def inference(self, x_all):
  function train (line 71) | def train():
  function test (line 91) | def test():  # Inference should be performed on the full graph.

FILE: examples/colors_topk_pool.py
  class HandleNodeAttention (line 16) | class HandleNodeAttention:
    method __call__ (line 17) | def __call__(self, data):
  class Net (line 33) | class Net(torch.nn.Module):
    method __init__ (line 34) | def __init__(self, in_channels):
    method forward (line 43) | def forward(self, data):
  function train (line 71) | def train(epoch):
  function test (line 87) | def test(loader):

FILE: examples/compile/gcn.py
  class GCN (line 28) | class GCN(torch.nn.Module):
    method __init__ (line 29) | def __init__(self, in_channels, hidden_channels, out_channels):
    method forward (line 35) | def forward(self, x, edge_index, edge_weight):
  function train (line 58) | def train():
  function test (line 69) | def test():

FILE: examples/compile/gin.py
  class GIN (line 31) | class GIN(torch.nn.Module):
    method __init__ (line 32) | def __init__(self, in_channels, hidden_channels, out_channels, num_lay...
    method forward (line 44) | def forward(self, x, edge_index, batch, batch_size):
  function train (line 65) | def train():
  function test (line 81) | def test(loader):

FILE: examples/contrib/pgm_explainer_graph_classification.py
  function normalized_cut_2d (line 33) | def normalized_cut_2d(edge_index, pos):
  class Net (line 39) | class Net(torch.nn.Module):
    method __init__ (line 40) | def __init__(self):
    method forward (line 59) | def forward(self, x, edge_index, **kwargs):
  function train (line 81) | def train(model, dataloader):

FILE: examples/contrib/pgm_explainer_node_classification.py
  class Net (line 22) | class Net(torch.nn.Module):
    method __init__ (line 23) | def __init__(self):
    method forward (line 28) | def forward(self, x, edge_index, edge_weight):

FILE: examples/contrib/rbcd_attack.py
  class GCN (line 20) | class GCN(torch.nn.Module):
    method __init__ (line 21) | def __init__(self, in_channels, hidden_channels, out_channels):
    method reset_parameters (line 27) | def reset_parameters(self):
    method forward (line 31) | def forward(self, x, edge_index, edge_weight=None, **kwargs):
  class WeightedGATConv (line 47) | class WeightedGATConv(GATConv):
    method edge_update (line 49) | def edge_update(self, alpha_j: Tensor, alpha_i: Optional[Tensor],
  class GAT (line 69) | class GAT(torch.nn.Module):
    method __init__ (line 70) | def __init__(self, in_channels, hidden_channels, out_channels):
    method reset_parameters (line 78) | def reset_parameters(self):
    method forward (line 82) | def forward(self, x, edge_index, edge_weight=None):
  function train (line 89) | def train(model, data, epochs=200, lr=0.01, weight_decay=5e-4):
  function accuracy (line 100) | def accuracy(pred, y, mask):
  function test (line 105) | def test(model, data):
  function metric (line 112) | def metric(*args, **kwargs):

FILE: examples/contrib/rbcd_attack_poisoning.py
  class PoisoningPRBCDAttack (line 43) | class PoisoningPRBCDAttack(PRBCDAttack):
    method _forward (line 44) | def _forward(self, x: Tensor, edge_index: Tensor, edge_weight: Tensor,
    method _forward_and_gradient (line 57) | def _forward_and_gradient(self, x: Tensor, labels: Tensor,

FILE: examples/cora.py
  class Net (line 24) | class Net(torch.nn.Module):
    method __init__ (line 25) | def __init__(self):
    method forward (line 30) | def forward(self):
  function train (line 44) | def train():
  function test (line 52) | def test():

FILE: examples/correct_and_smooth.py
  function train (line 33) | def train():
  function test (line 44) | def test(out=None):

FILE: examples/cpp/main.cpp
  function main (line 7) | int main(int argc, const char *argv[]) {

FILE: examples/cpp/save_model.py
  class GIN (line 11) | class GIN(torch.nn.Module):
    method __init__ (line 12) | def __init__(self, in_channels: int, hidden_channels: int,
    method forward (line 30) | def forward(

FILE: examples/datapipe.py
  function molecule_datapipe (line 29) | def molecule_datapipe() -> IterDataPipe:
  class MeshOpener (line 48) | class MeshOpener(IterDataPipe):
    method __init__ (line 50) | def __init__(self, dp: IterDataPipe) -> None:
    method __iter__ (line 62) | def __iter__(self):
  function mesh_datapipe (line 80) | def mesh_datapipe() -> IterDataPipe:

FILE: examples/dgcnn_classification.py
  class Net (line 91) | class Net(torch.nn.Module):
    method __init__ (line 92) | def __init__(self, out_channels, k=20, aggr='max'):
    method forward (line 101) | def forward(self, data):
  function train (line 117) | def train():
  function test (line 132) | def test(loader):

FILE: examples/dgcnn_segmentation.py
  class Net (line 32) | class Net(torch.nn.Module):
    method __init__ (line 33) | def __init__(self, out_channels, k=30, aggr='max'):
    method forward (line 43) | def forward(self, data):
  function train (line 59) | def train():
  function test (line 81) | def test(loader):

FILE: examples/dir_gnn.py
  class DirGNN (line 42) | class DirGNN(torch.nn.Module):
    method __init__ (line 43) | def __init__(self, in_channels, hidden_channels, out_channels, alpha):
    method forward (line 51) | def forward(self, x, edge_index):
  function train (line 67) | def train():
  function test (line 78) | def test():

FILE: examples/distributed/graphlearn_for_pytorch/dist_train_sage_supervised.py
  function test (line 18) | def test(model, test_loader, dataset_name):
  function run_training_proc (line 41) | def run_training_proc(

FILE: examples/distributed/graphlearn_for_pytorch/partition_ogbn_dataset.py
  function partition_dataset (line 10) | def partition_dataset(

FILE: examples/distributed/kuzu/papers_100M/train.py
  class GraphSAGE (line 62) | class GraphSAGE(torch.nn.Module):
    method __init__ (line 63) | def __init__(self, in_channels, hidden_channels, out_channels, num_lay...
    method forward (line 87) | def forward(self, x, edge_index):

FILE: examples/dna.py
  function gen_uniform_20_20_60_split (line 17) | def gen_uniform_20_20_60_split(data):
  class Net (line 29) | class Net(torch.nn.Module):
    method __init__ (line 30) | def __init__(self, in_channels, hidden_channels, out_channels, num_lay...
    method reset_parameters (line 41) | def reset_parameters(self):
    method forward (line 47) | def forward(self, x, edge_index):
  function train (line 74) | def train():
  function test (line 84) | def test():

FILE: examples/egc.py
  class Net (line 40) | class Net(torch.nn.Module):
    method __init__ (line 41) | def __init__(self, hidden_channels, num_layers, num_heads, num_bases):
    method forward (line 68) | def forward(self, x, adj_t, batch):
  function train (line 93) | def train():
  function evaluate (line 113) | def evaluate(loader):

FILE: examples/explain/captum_explainer.py
  class GCN (line 16) | class GCN(torch.nn.Module):
    method __init__ (line 17) | def __init__(self):
    method forward (line 22) | def forward(self, x, edge_index):

FILE: examples/explain/captum_explainer_hetero_link.py
  class GNNEncoder (line 38) | class GNNEncoder(torch.nn.Module):
    method __init__ (line 39) | def __init__(self, hidden_channels, out_channels):
    method forward (line 44) | def forward(self, x, edge_index):
  class EdgeDecoder (line 50) | class EdgeDecoder(torch.nn.Module):
    method __init__ (line 51) | def __init__(self, hidden_channels):
    method forward (line 56) | def forward(self, z_dict, edge_label_index):
  class Model (line 65) | class Model(torch.nn.Module):
    method __init__ (line 66) | def __init__(self, hidden_channels):
    method forward (line 72) | def forward(self, x_dict, edge_index_dict, edge_label_index):

FILE: examples/explain/gnn_explainer.py
  class GCN (line 16) | class GCN(torch.nn.Module):
    method __init__ (line 17) | def __init__(self):
    method forward (line 22) | def forward(self, x, edge_index):

FILE: examples/explain/gnn_explainer_ba_shapes.py
  function train (line 32) | def train():
  function test (line 44) | def test():

FILE: examples/explain/gnn_explainer_link_pred.py
  class GCN (line 30) | class GCN(torch.nn.Module):
    method __init__ (line 31) | def __init__(self, in_channels, hidden_channels, out_channels):
    method encode (line 36) | def encode(self, x, edge_index):
    method decode (line 41) | def decode(self, z, edge_label_index):
    method forward (line 45) | def forward(self, x, edge_index, edge_label_index):
  function train (line 54) | def train():
  function test (line 67) | def test(data):

FILE: examples/explain/graphmask_explainer.py
  class GCN (line 19) | class GCN(torch.nn.Module):
    method __init__ (line 20) | def __init__(self):
    method forward (line 25) | def forward(self, x, edge_index):
  class GAT (line 63) | class GAT(torch.nn.Module):
    method __init__ (line 64) | def __init__(self):
    method forward (line 69) | def forward(self, x, edge_index):

FILE: examples/faust.py
  class Net (line 24) | class Net(torch.nn.Module):
    method __init__ (line 25) | def __init__(self):
    method forward (line 36) | def forward(self, data):
  function train (line 56) | def train(epoch):
  function test (line 69) | def test():

FILE: examples/film.py
  class Net (line 21) | class Net(torch.nn.Module):
    method __init__ (line 22) | def __init__(self, in_channels, hidden_channels, out_channels, num_lay...
    method forward (line 37) | def forward(self, x, edge_index):
  function train (line 59) | def train():
  function test (line 74) | def test(loader):

FILE: examples/gat.py
  class GAT (line 38) | class GAT(torch.nn.Module):
    method __init__ (line 39) | def __init__(self, in_channels, hidden_channels, out_channels, heads):
    method forward (line 46) | def forward(self, x, edge_index):
  function train (line 59) | def train():
  function test (line 70) | def test():

FILE: examples/gcn.py
  class GCN (line 49) | class GCN(torch.nn.Module):
    method __init__ (line 50) | def __init__(self, in_channels, hidden_channels, out_channels):
    method forward (line 57) | def forward(self, x, edge_index, edge_weight=None):
  function train (line 77) | def train():
  function test (line 88) | def test():

FILE: examples/gcn2_cora.py
  class Net (line 19) | class Net(torch.nn.Module):
    method __init__ (line 20) | def __init__(self, hidden_channels, num_layers, alpha, theta,
    method forward (line 36) | def forward(self, x, adj_t):
  function train (line 61) | def train():
  function test (line 72) | def test():

FILE: examples/gcn2_ppi.py
  class Net (line 24) | class Net(torch.nn.Module):
    method __init__ (line 25) | def __init__(self, hidden_channels, num_layers, alpha, theta,
    method forward (line 41) | def forward(self, x, adj_t):
  function train (line 64) | def train():
  function test (line 80) | def test(loader):

FILE: examples/geniepath.py
  class Breadth (line 30) | class Breadth(torch.nn.Module):
    method __init__ (line 31) | def __init__(self, in_dim, out_dim):
    method forward (line 35) | def forward(self, x, edge_index):
  class Depth (line 40) | class Depth(torch.nn.Module):
    method __init__ (line 41) | def __init__(self, in_dim, hidden):
    method forward (line 45) | def forward(self, x, h, c):
  class GeniePathLayer (line 50) | class GeniePathLayer(torch.nn.Module):
    method __init__ (line 51) | def __init__(self, in_dim):
    method forward (line 56) | def forward(self, x, edge_index, h, c):
  class GeniePath (line 64) | class GeniePath(torch.nn.Module):
    method __init__ (line 65) | def __init__(self, in_dim, out_dim):
    method forward (line 72) | def forward(self, x, edge_index):
  class GeniePathLazy (line 82) | class GeniePathLazy(torch.nn.Module):
    method __init__ (line 83) | def __init__(self, in_dim, out_dim):
    method forward (line 92) | def forward(self, x, edge_index):
  function train (line 115) | def train():
  function test (line 131) | def test(loader):

FILE: examples/glnn.py
  function train_teacher (line 40) | def train_teacher():
  function test_teacher (line 51) | def test_teacher():
  function train_student (line 77) | def train_student():
  function test_student (line 91) | def test_student():

FILE: examples/gpse.py
  function load_ZINC (line 25) | def load_ZINC(args):
  class IdentityNodeEncoder (line 66) | class IdentityNodeEncoder(torch.nn.Module):
    method __init__ (line 67) | def __init__(self, emb_dim):
    method forward (line 70) | def forward(self, batch):
  class LinearNodeEncoder (line 74) | class LinearNodeEncoder(torch.nn.Module):
    method __init__ (line 75) | def __init__(self, emb_dim, emb_pe_out, bias=True):
    method forward (line 79) | def forward(self, batch):
  class TypeDictNodeEncoder (line 85) | class TypeDictNodeEncoder(torch.nn.Module):
    method __init__ (line 86) | def __init__(self, emb_dim, num_types=28):
    method forward (line 95) | def forward(self, batch):
  class GNNStackStage (line 102) | class GNNStackStage(torch.nn.Module):
    method __init__ (line 115) | def __init__(self, dim_in, dim_out, num_layers, conv_type='gcn',
    method forward (line 131) | def forward(self, batch):
  class GPSEPlusGNN (line 145) | class GPSEPlusGNN(torch.nn.Module):
    method __init__ (line 177) | def __init__(self, dim_emb, dim_conv, conv_type, num_layers, dim_pe_in,
    method forward (line 194) | def forward(self, batch):
  function train (line 205) | def train(loader):
  function test (line 225) | def test(loader):

FILE: examples/graph_gps.py
  class GPS (line 39) | class GPS(torch.nn.Module):
    method __init__ (line 40) | def __init__(self, channels: int, pe_dim: int, num_layers: int,
    method forward (line 71) | def forward(self, x, pe, edge_index, edge_attr, batch):
  class RedrawProjection (line 82) | class RedrawProjection:
    method __init__ (line 83) | def __init__(self, model: torch.nn.Module,
    method redraw_projections (line 89) | def redraw_projections(self):
  function train (line 113) | def train():
  function test (line 131) | def test(loader):

FILE: examples/graph_sage_unsup.py
  function train (line 43) | def train():
  function test (line 63) | def test():

FILE: examples/graph_sage_unsup_ppi.py
  function train (line 48) | def train():
  function encode (line 72) | def encode(loader):
  function test (line 84) | def test():

FILE: examples/graph_saint.py
  class Net (line 32) | class Net(torch.nn.Module):
    method __init__ (line 33) | def __init__(self, hidden_channels):
    method set_aggr (line 42) | def set_aggr(self, aggr):
    method forward (line 47) | def forward(self, x0, edge_index, edge_weight=None):
  function train (line 64) | def train():
  function test (line 90) | def test():

FILE: examples/graph_unet.py
  class Net (line 16) | class Net(torch.nn.Module):
    method __init__ (line 17) | def __init__(self):
    method forward (line 23) | def forward(self):
  function train (line 38) | def train():
  function test (line 46) | def test():

FILE: examples/hetero/bipartite_sage.py
  class MovieGNNEncoder (line 51) | class MovieGNNEncoder(torch.nn.Module):
    method __init__ (line 52) | def __init__(self, hidden_channels, out_channels):
    method forward (line 59) | def forward(self, x, edge_index):
  class UserGNNEncoder (line 65) | class UserGNNEncoder(torch.nn.Module):
    method __init__ (line 66) | def __init__(self, hidden_channels, out_channels):
    method forward (line 73) | def forward(self, x_dict, edge_index_dict):
  class EdgeDecoder (line 92) | class EdgeDecoder(torch.nn.Module):
    method __init__ (line 93) | def __init__(self, hidden_channels):
    method forward (line 98) | def forward(self, z_src, z_dst, edge_label_index):
  class Model (line 107) | class Model(torch.nn.Module):
    method __init__ (line 108) | def __init__(self, num_users, hidden_channels, out_channels):
    method forward (line 115) | def forward(self, x_dict, edge_index_dict, edge_label_index):
  function train (line 131) | def train():
  function test (line 146) | def test(data):

FILE: examples/hetero/bipartite_sage_unsup.py
  class ItemGNNEncoder (line 109) | class ItemGNNEncoder(torch.nn.Module):
    method __init__ (line 110) | def __init__(self, hidden_channels, out_channels):
    method forward (line 116) | def forward(self, x, edge_index):
  class UserGNNEncoder (line 122) | class UserGNNEncoder(torch.nn.Module):
    method __init__ (line 123) | def __init__(self, hidden_channels, out_channels):
    method forward (line 130) | def forward(self, x_dict, edge_index_dict):
  class EdgeDecoder (line 149) | class EdgeDecoder(torch.nn.Module):
    method __init__ (line 150) | def __init__(self, hidden_channels):
    method forward (line 155) | def forward(self, z_src, z_dst, edge_label_index):
  class Model (line 164) | class Model(torch.nn.Module):
    method __init__ (line 165) | def __init__(self, num_users, num_items, hidden_channels, out_channels):
    method forward (line 173) | def forward(self, x_dict, edge_index_dict, edge_label_index):
  function train (line 195) | def train():
  function test (line 220) | def test(loader):

FILE: examples/hetero/dmgi_unsup.py
  class DMGI (line 27) | class DMGI(torch.nn.Module):
    method __init__ (line 28) | def __init__(self, num_nodes, in_channels, out_channels, num_relations):
    method reset_parameters (line 36) | def reset_parameters(self):
    method forward (line 43) | def forward(self, x, edge_indices):
    method loss (line 59) | def loss(self, pos_hs, neg_hs, summaries):
  function train (line 90) | def train():
  function test (line 103) | def test():

FILE: examples/hetero/han_imdb.py
  class HAN (line 22) | class HAN(nn.Module):
    method __init__ (line 23) | def __init__(self, in_channels: Union[int, Dict[str, int]],
    method forward (line 30) | def forward(self, x_dict, edge_index_dict):
  function train (line 51) | def train() -> float:
  function test (line 63) | def test() -> List[float]:

FILE: examples/hetero/hetero_conv_dblp.py
  class HeteroGNN (line 17) | class HeteroGNN(torch.nn.Module):
    method __init__ (line 18) | def __init__(self, metadata, hidden_channels, out_channels, num_layers):
    method forward (line 31) | def forward(self, x_dict, edge_index_dict):
  function train (line 54) | def train():
  function test (line 66) | def test():

FILE: examples/hetero/hetero_link_pred.py
  function weighted_mse_loss (line 50) | def weighted_mse_loss(pred, target, weight=None):
  class GNNEncoder (line 55) | class GNNEncoder(torch.nn.Module):
    method __init__ (line 56) | def __init__(self, hidden_channels, out_channels):
    method forward (line 61) | def forward(self, x, edge_index):
  class EdgeDecoder (line 67) | class EdgeDecoder(torch.nn.Module):
    method __init__ (line 68) | def __init__(self, hidden_channels):
    method forward (line 73) | def forward(self, z_dict, edge_label_index):
  class Model (line 82) | class Model(torch.nn.Module):
    method __init__ (line 83) | def __init__(self, hidden_channels):
    method forward (line 89) | def forward(self, x_dict, edge_index_dict, edge_label_index):
  function train (line 98) | def train():
  function test (line 111) | def test(data):

FILE: examples/hetero/hgt_dblp.py
  class HGT (line 17) | class HGT(torch.nn.Module):
    method __init__ (line 18) | def __init__(self, hidden_channels, out_channels, num_heads, num_layers):
    method forward (line 33) | def forward(self, x_dict, edge_index_dict):
  function train (line 60) | def train():
  function test (line 72) | def test():

FILE: examples/hetero/hierarchical_sage.py
  class HierarchicalHeteroGraphSage (line 33) | class HierarchicalHeteroGraphSage(torch.nn.Module):
    method __init__ (line 34) | def __init__(self, edge_types, hidden_channels, out_channels, num_laye...
    method forward (line 48) | def forward(self, x_dict, edge_index_dict, num_sampled_edges_dict,
  function train (line 93) | def train():
  function test (line 121) | def test(loader):

FILE: examples/hetero/load_csv.py
  function load_node_csv (line 17) | def load_node_csv(path, index_col, encoders=None, **kwargs):
  function load_edge_csv (line 29) | def load_edge_csv(path, src_index_col, src_mapping, dst_index_col, dst_m...
  class SequenceEncoder (line 45) | class SequenceEncoder:
    method __init__ (line 47) | def __init__(self, model_name='all-MiniLM-L6-v2', device=None):
    method __call__ (line 52) | def __call__(self, df):
  class GenresEncoder (line 58) | class GenresEncoder:
    method __init__ (line 61) | def __init__(self, sep='|'):
    method __call__ (line 64) | def __call__(self, df):
  class IdentityEncoder (line 75) | class IdentityEncoder:
    method __init__ (line 78) | def __init__(self, dtype=None):
    method __call__ (line 81) | def __call__(self, df):

FILE: examples/hetero/metapath2vec.py
  function train (line 37) | def train(epoch, log_steps=100, eval_steps=2000):
  function test (line 60) | def test(train_ratio=0.1):

FILE: examples/hetero/recommender_system.py
  class GNN (line 93) | class GNN(torch.nn.Module):
    method __init__ (line 94) | def __init__(self, hidden_channels):
    method forward (line 100) | def forward(self, x, edge_index):
  class InnerProductDecoder (line 107) | class InnerProductDecoder(torch.nn.Module):
    method forward (line 108) | def forward(self, x_dict, edge_label_index):
  class Model (line 114) | class Model(torch.nn.Module):
    method __init__ (line 115) | def __init__(self, hidden_channels):
    method forward (line 121) | def forward(self, x_dict, edge_index_dict, edge_label_index):
  function train (line 130) | def train():
  function test (line 156) | def test(edge_label_index, exclude_links):

FILE: examples/hetero/temporal_link_pred.py
  class GNNEncoder (line 63) | class GNNEncoder(torch.nn.Module):
    method __init__ (line 64) | def __init__(self, hidden_channels, out_channels):
    method forward (line 69) | def forward(self, x, edge_index):
  class EdgeDecoder (line 75) | class EdgeDecoder(torch.nn.Module):
    method __init__ (line 76) | def __init__(self, hidden_channels):
    method forward (line 81) | def forward(self, z_dict, edge_label_index):
  class Model (line 90) | class Model(torch.nn.Module):
    method __init__ (line 91) | def __init__(self, hidden_channels):
    method forward (line 97) | def forward(self, x_dict, edge_index_dict, edge_label_index):
  function train (line 106) | def train():
  function test (line 129) | def test(loader):

FILE: examples/hetero/to_hetero_mag.py
  function init_params (line 53) | def init_params():
  function train (line 60) | def train():
  function test (line 80) | def test(loader):

FILE: examples/hierarchical_sampling.py
  function train (line 32) | def train(trim=False):

FILE: examples/infomax_inductive.py
  class Encoder (line 21) | class Encoder(torch.nn.Module):
    method __init__ (line 22) | def __init__(self, in_channels, hidden_channels):
    method forward (line 37) | def forward(self, x, edge_index, batch_size):
  function corruption (line 44) | def corruption(x, edge_index, batch_size):
  function train (line 57) | def train(epoch):
  function test (line 75) | def test():

FILE: examples/infomax_transductive.py
  class Encoder (line 13) | class Encoder(torch.nn.Module):
    method __init__ (line 14) | def __init__(self, in_channels, hidden_channels):
    method forward (line 19) | def forward(self, x, edge_index):
  function corruption (line 25) | def corruption(x, edge_index):
  function train (line 46) | def train():
  function test (line 56) | def test():

FILE: examples/jit/film.py
  class FiLM (line 22) | class FiLM(torch.nn.Module):
    method __init__ (line 23) | def __init__(self, in_channels: int, hidden_channels: int,
    method forward (line 39) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  function train (line 55) | def train():
  function test (line 70) | def test(loader):

FILE: examples/jit/gat.py
  class GAT (line 16) | class GAT(torch.nn.Module):
    method __init__ (line 17) | def __init__(self):
    method forward (line 24) | def forward(self, x, edge_index):
  function train (line 38) | def train():
  function test (line 49) | def test():

FILE: examples/jit/gcn.py
  class GCN (line 17) | class GCN(torch.nn.Module):
    method __init__ (line 18) | def __init__(self, in_channels: int, hidden_channels: int,
    method forward (line 24) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  function train (line 41) | def train():
  function test (line 52) | def test():

FILE: examples/jit/gin.py
  class GIN (line 22) | class GIN(torch.nn.Module):
    method __init__ (line 23) | def __init__(self, in_channels, hidden_channels, out_channels, num_lay...
    method forward (line 47) | def forward(self, x, edge_index, batch):
  function train (line 64) | def train():
  function test (line 80) | def test(loader):

FILE: examples/kge_fb15k_237.py
  function train (line 54) | def train():
  function test (line 68) | def test(data):

FILE: examples/lcm_aggr_2nd_min.py
  class RandomPermutation (line 18) | class RandomPermutation(BaseTransform):
    method forward (line 19) | def forward(self, data: Data) -> Data:
  class Random2ndMinimumDataset (line 24) | class Random2ndMinimumDataset(InMemoryDataset):
    method __init__ (line 29) | def __init__(
    method get_data (line 43) | def get_data(
  class BitwiseEmbedding (line 79) | class BitwiseEmbedding(torch.nn.Module):
    method __init__ (line 80) | def __init__(self, emb_dim: int):
    method forward (line 85) | def forward(self, x: Tensor) -> Tensor:
  class LCM (line 90) | class LCM(torch.nn.Module):
    method __init__ (line 91) | def __init__(self, emb_dim: int, dropout: float = 0.25):
    method forward (line 110) | def forward(self, x: Tensor, batch: Tensor) -> Tensor:
  function train (line 122) | def train():
  function test (line 137) | def test(loader):

FILE: examples/lightgcn.py
  function train (line 36) | def train():
  function test (line 70) | def test(k: int):

FILE: examples/link_pred.py
  class Net (line 32) | class Net(torch.nn.Module):
    method __init__ (line 33) | def __init__(self, in_channels, hidden_channels, out_channels):
    method encode (line 38) | def encode(self, x, edge_index):
    method decode (line 42) | def decode(self, z, edge_label_index):
    method decode_all (line 45) | def decode_all(self, z):
  function train (line 55) | def train():
  function test (line 82) | def test(data):

FILE: examples/linkx.py
  function train (line 26) | def train():
  function test (line 38) | def test():

FILE: examples/llm/g_retriever.py
  function adjust_learning_rate (line 28) | def adjust_learning_rate(param_group: dict, LR: float, epoch: int,
  function save_params_dict (line 52) | def save_params_dict(model, save_path):
  function load_params_dict (line 77) | def load_params_dict(model, save_path):
  function normalize_batch_dtype (line 88) | def normalize_batch_dtype(batch):
  function get_loss (line 94) | def get_loss(model, batch, model_save_name="gnn+llm") -> Tensor:
  function inference_step (line 122) | def inference_step(model, batch, model_save_name="gnn+llm",

FILE: examples/llm/git_mol.py
  function eval (line 20) | def eval(model, data_loader):
  function train (line 32) | def train(

FILE: examples/llm/glem.py
  function get_n_params (line 32) | def get_n_params(model):
  function main (line 42) | def main(args):

FILE: examples/llm/molecule_gpt.py
  function save_params_dict (line 20) | def save_params_dict(model, save_path):
  function eval (line 33) | def eval(model, data_loader):
  function train (line 45) | def train(

FILE: examples/llm/protein_mpnn.py
  function loss_smoothed (line 17) | def loss_smoothed(y, logits, mask, weight=0.1):
  function loss_nll (line 30) | def loss_nll(y, logits, mask):
  class NoamOpt (line 41) | class NoamOpt:
    method __init__ (line 43) | def __init__(self, model_size, factor, warmup, optimizer, step):
    method param_groups (line 52) | def param_groups(self):
    method step (line 56) | def step(self):
    method rate (line 65) | def rate(self, step=None):
    method zero_grad (line 72) | def zero_grad(self):
  function train (line 76) | def train(model, optimizer, data_loader, device, scaler):
  function eval (line 130) | def eval(model, data_loader, device):
  function main (line 156) | def main(args):

FILE: examples/llm/txt2kg_rag.py
  function parse_args (line 71) | def parse_args():
  function _process_and_chunk_text (line 208) | def _process_and_chunk_text(text, chunk_size, doc_parsing_mode):
  function get_data (line 232) | def get_data(args):
  function index_kg (line 306) | def index_kg(args, context_docs):
  function update_data_lists (line 379) | def update_data_lists(args, data_lists):
  function make_dataset (line 428) | def make_dataset(args):
  function train (line 570) | def train(args, train_loader, val_loader):
  function test (line 720) | def test(model, test_loader, args):

FILE: examples/lpformer.py
  function train_epoch (line 74) | def train_epoch():
  function test (line 128) | def test():
  function set_seeds (line 158) | def set_seeds(seed):

FILE: examples/mem_pool.py
  class Net (line 27) | class Net(torch.nn.Module):
    method __init__ (line 28) | def __init__(self, in_channels, hidden_channels, out_channels, dropout):
    method forward (line 45) | def forward(self, x, edge_index, batch):
  function train (line 67) | def train():
  function test (line 93) | def test(loader):

FILE: examples/mixhop.py
  class MixHop (line 21) | class MixHop(torch.nn.Module):
    method __init__ (line 22) | def __init__(self):
    method forward (line 35) | def forward(self, x, edge_index):
  function train (line 59) | def train():
  function test (line 71) | def test():

FILE: examples/mnist_graclus.py
  function normalized_cut_2d (line 33) | def normalized_cut_2d(edge_index, pos):
  class Net (line 39) | class Net(torch.nn.Module):
    method __init__ (line 40) | def __init__(self):
    method forward (line 47) | def forward(self, data):
  function train (line 70) | def train(epoch):
  function test (line 88) | def test():

FILE: examples/mnist_nn_conv.py
  function normalized_cut_2d (line 32) | def normalized_cut_2d(edge_index, pos):
  class Net (line 38) | class Net(torch.nn.Module):
    method __init__ (line 39) | def __init__(self):
    method forward (line 58) | def forward(self, data):
  function train (line 81) | def train(epoch):
  function test (line 99) | def test():

FILE: examples/mnist_voxel_grid.py
  class Net (line 24) | class Net(torch.nn.Module):
    method __init__ (line 25) | def __init__(self):
    method forward (line 33) | def forward(self, data):
  function train (line 63) | def train(epoch):
  function test (line 81) | def test():

FILE: examples/multi_gpu/distributed_batching.py
  class GIN (line 21) | class GIN(torch.nn.Module):
    method __init__ (line 22) | def __init__(
    method forward (line 47) | def forward(
  function run (line 66) | def run(rank: int, world_size: int, dataset_name: str, root: str) -> None:

FILE: examples/multi_gpu/distributed_sampling.py
  class SAGE (line 18) | class SAGE(torch.nn.Module):
    method __init__ (line 19) | def __init__(
    method forward (line 33) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  function test (line 43) | def test(
  function run (line 61) | def run(rank: int, world_size: int, dataset: Reddit) -> None:

FILE: examples/multi_gpu/distributed_sampling_multinode.py
  class SAGE (line 17) | class SAGE(torch.nn.Module):
    method __init__ (line 18) | def __init__(
    method forward (line 32) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
    method inference (line 41) | def inference(
  function run (line 69) | def run(world_size: int, rank: int, local_rank: int):

FILE: examples/multi_gpu/distributed_sampling_xpu.py
  class GAT (line 37) | class GAT(torch.nn.Module):
    method __init__ (line 38) | def __init__(
    method forward (line 67) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
    method inference (line 75) | def inference(
  function train_step (line 108) | def train_step(model: Any, optimizer: Any, x: Tensor, edge_index: Tensor,
  function run (line 118) | def run(rank: int, world_size: int, dataset: PygNodePropPredDataset):
  function get_dist_params (line 188) | def get_dist_params() -> Tuple[int, int, str]:

FILE: examples/multi_gpu/mag240m_graphsage.py
  function common_step (line 17) | def common_step(batch, model):
  function training_step (line 25) | def training_step(batch, acc, model):
  function validation_step (line 32) | def validation_step(batch, acc, model):
  class HeteroSAGEConv (line 37) | class HeteroSAGEConv(torch.nn.Module):
    method __init__ (line 38) | def __init__(self, in_channels, out_channels, dropout, node_types,
    method forward (line 55) | def forward(self, x_dict, edge_index_dict):
  class HeteroGraphSAGE (line 65) | class HeteroGraphSAGE(torch.nn.Module):
    method __init__ (line 66) | def __init__(self, in_channels, hidden_channels, num_layers, out_chann...
    method forward (line 98) | def forward(self, x_dict, edge_index_dict):
  function run (line 104) | def run(

FILE: examples/multi_gpu/model_parallel.py
  class GCN (line 19) | class GCN(torch.nn.Module):
    method __init__ (line 20) | def __init__(self, in_channels, out_channels, device1, device2):
    method forward (line 28) | def forward(self, x, edge_index):
  function train (line 47) | def train():
  function test (line 58) | def test():

FILE: examples/multi_gpu/papers100m_gcn.py
  function get_num_workers (line 18) | def get_num_workers(world_size):
  function run_train (line 30) | def run_train(rank, data, world_size, model, epochs, batch_size, fan_out,

FILE: examples/multi_gpu/papers100m_gcn_multinode.py
  function get_num_workers (line 24) | def get_num_workers() -> int:
  function run (line 36) | def run(world_size, data, split_idx, model, acc, wall_clock_start):

FILE: examples/multi_gpu/pcqm4m_ogb.py
  function ogb_from_smiles_wrapper (line 41) | def ogb_from_smiles_wrapper(smiles, *args, **kwargs):
  class GINConv (line 54) | class GINConv(MessagePassing):
    method __init__ (line 55) | def __init__(self, emb_dim):
    method forward (line 71) | def forward(self, x, edge_index, edge_attr):
    method message (line 77) | def message(self, x_j, edge_attr):
    method update (line 80) | def update(self, aggr_out):
  class GCNConv (line 84) | class GCNConv(MessagePassing):
    method __init__ (line 85) | def __init__(self, emb_dim):
    method forward (line 91) | def forward(self, x, edge_index, edge_attr):
    method message (line 103) | def message(self, x_j, edge_attr, norm):
    method update (line 106) | def update(self, aggr_out):
  class GNNNode (line 110) | class GNNNode(torch.nn.Module):
    method __init__ (line 111) | def __init__(self, num_layers, emb_dim, drop_ratio=0.5, JK="last",
    method forward (line 145) | def forward(self, batched_data):
  class GNNNodeVirtualNode (line 179) | class GNNNodeVirtualNode(torch.nn.Module):
    method __init__ (line 181) | def __init__(self, num_layers, emb_dim, drop_ratio=0.5, JK="last",
    method forward (line 221) | def forward(self, batched_data):
  class GNN (line 282) | class GNN(torch.nn.Module):
    method __init__ (line 283) | def __init__(
    method forward (line 361) | def forward(self, batched_data):
  function train (line 372) | def train(model, rank, device, loader, optimizer):
  function eval (line 388) | def eval(model, device, loader, evaluator):
  function test (line 406) | def test(model, device, loader):
  function run (line 420) | def run(rank, dataset, args):

FILE: examples/multi_gpu/taobao.py
  class ItemGNNEncoder (line 23) | class ItemGNNEncoder(torch.nn.Module):
    method __init__ (line 24) | def __init__(self, hidden_channels, out_channels):
    method forward (line 30) | def forward(self, x, edge_index):
  class UserGNNEncoder (line 36) | class UserGNNEncoder(torch.nn.Module):
    method __init__ (line 37) | def __init__(self, hidden_channels, out_channels):
    method forward (line 44) | def forward(self, x_dict, edge_index_dict):
  class EdgeDecoder (line 63) | class EdgeDecoder(torch.nn.Module):
    method __init__ (line 64) | def __init__(self, hidden_channels):
    method forward (line 69) | def forward(self, z_src, z_dst, edge_label_index):
  class Model (line 78) | class Model(torch.nn.Module):
    method __init__ (line 79) | def __init__(self, num_users, num_items, hidden_channels, out_channels):
    method forward (line 87) | def forward(self, x_dict, edge_index_dict, edge_label_index):
  function run_train (line 100) | def run_train(rank, data, train_data, val_data, test_data, args, world_s...
  function pre_transform (line 240) | def pre_transform(data):

FILE: examples/mutag_gin.py
  class GIN (line 48) | class GIN(torch.nn.Module):
    method __init__ (line 49) | def __init__(self, in_channels, hidden_channels, out_channels, num_lay...
    method forward (line 61) | def forward(self, x, edge_index, batch):
  function train (line 77) | def train():
  function test (line 93) | def test(loader):

FILE: examples/node2vec.py
  function train (line 33) | def train():
  function test (line 46) | def test():
  function plot_points (line 66) | def plot_points(colors):

FILE: examples/ogbn_proteins_deepgcn.py
  class DeeperGCN (line 32) | class DeeperGCN(torch.nn.Module):
    method __init__ (line 33) | def __init__(self, hidden_channels, num_layers):
    method forward (line 52) | def forward(self, x, edge_index, edge_attr):
  function train (line 74) | def train(epoch):
  function test (line 100) | def test():

FILE: examples/ogbn_train.py
  function get_loader (line 109) | def get_loader(input_nodes: dict[str, Tensor]) -> NeighborLoader:
  function train (line 127) | def train(epoch: int) -> tuple[Tensor, float]:
  function test (line 161) | def test(loader: NeighborLoader) -> float:
  function get_model (line 182) | def get_model(model_name: str) -> torch.nn.Module:

FILE: examples/ogc.py
  class LinearNeuralNetwork (line 57) | class LinearNeuralNetwork(torch.nn.Module):
    method __init__ (line 58) | def __init__(self, num_features: int, num_classes: int, bias: bool = T...
    method forward (line 62) | def forward(self, x: Tensor) -> Tensor:
    method test (line 66) | def test(self, U: Tensor, y_one_hot: Tensor, data: Data):
    method update_W (line 82) | def update_W(self, U: Tensor, y_one_hot: Tensor, data: Data):
  function update_U (line 102) | def update_U(U: Tensor, y_one_hot: Tensor, pred: Tensor, W: Tensor):
  function ogc (line 116) | def ogc() -> float:

FILE: examples/pmlp.py
  function train (line 28) | def train():
  function test (line 39) | def test():

FILE: examples/pna.py
  class Net (line 36) | class Net(torch.nn.Module):
    method __init__ (line 37) | def __init__(self):
    method forward (line 59) | def forward(self, x, edge_index, edge_attr, batch):
  function train (line 82) | def train(epoch):
  function test (line 98) | def test(loader):

FILE: examples/point_transformer_classification.py
  class TransformerBlock (line 32) | class TransformerBlock(torch.nn.Module):
    method __init__ (line 33) | def __init__(self, in_channels, out_channels):
    method forward (line 47) | def forward(self, x, pos, edge_index):
  class TransitionDown (line 54) | class TransitionDown(torch.nn.Module):
    method __init__ (line 58) | def __init__(self, in_channels, out_channels, ratio=0.25, k=16):
    method forward (line 64) | def forward(self, x, pos, batch):
  class Net (line 87) | class Net(torch.nn.Module):
    method __init__ (line 88) | def __init__(self, in_channels, out_channels, dim_model, k=16):
    method forward (line 117) | def forward(self, x, pos, batch=None):
  function train (line 144) | def train():
  function test (line 160) | def test(loader):

FILE: examples/point_transformer_segmentation.py
  class TransitionUp (line 35) | class TransitionUp(torch.nn.Module):
    method __init__ (line 39) | def __init__(self, in_channels, out_channels):
    method forward (line 44) | def forward(self, x, x_sub, pos, pos_sub, batch=None, batch_sub=None):
  class Net (line 57) | class Net(torch.nn.Module):
    method __init__ (line 58) | def __init__(self, in_channels, out_channels, dim_model, k=16):
    method forward (line 111) | def forward(self, x, pos, batch=None):
  function train (line 172) | def train():
  function test (line 193) | def test(loader):

FILE: examples/pointnet2_classification.py
  class SAModule (line 16) | class SAModule(torch.nn.Module):
    method __init__ (line 17) | def __init__(self, ratio, r, nn):
    method forward (line 23) | def forward(self, x, pos, batch):
  class GlobalSAModule (line 34) | class GlobalSAModule(torch.nn.Module):
    method __init__ (line 35) | def __init__(self, nn):
    method forward (line 39) | def forward(self, x, pos, batch):
  class Net (line 47) | class Net(torch.nn.Module):
    method __init__ (line 48) | def __init__(self):
    method forward (line 58) | def forward(self, data):
  function train (line 68) | def train(epoch):
  function test (line 79) | def test(loader):

FILE: examples/pointnet2_segmentation.py
  class FPModule (line 37) | class FPModule(torch.nn.Module):
    method __init__ (line 38) | def __init__(self, k, nn):
    method forward (line 43) | def forward(self, x, pos, batch, x_skip, pos_skip, batch_skip):
  class Net (line 51) | class Net(torch.nn.Module):
    method __init__ (line 52) | def __init__(self, num_classes):
    method forward (line 70) | def forward(self, data):
  function train (line 88) | def train():
  function test (line 110) | def test(loader):

FILE: examples/ppi.py
  class Net (line 21) | class Net(torch.nn.Module):
    method __init__ (line 22) | def __init__(self):
    method forward (line 30) | def forward(self, x, edge_index):
  function train (line 43) | def train():
  function test (line 58) | def test(loader):

FILE: examples/proteins_diff_pool.py
  class GNN (line 33) | class GNN(torch.nn.Module):
    method __init__ (line 34) | def __init__(self, in_channels, hidden_channels, out_channels,
    method bn (line 51) | def bn(self, i, x):
    method forward (line 59) | def forward(self, x, adj, mask=None):
  class Net (line 75) | class Net(torch.nn.Module):
    method __init__ (line 76) | def __init__(self):
    method forward (line 92) | def forward(self, x, adj, mask=None):
  function train (line 122) | def train(epoch):
  function test (line 138) | def test(loader):

FILE: examples/proteins_dmon_pool.py
  class Net (line 26) | class Net(torch.nn.Module):
    method __init__ (line 27) | def __init__(self, in_channels, out_channels, hidden_channels=32):
    method forward (line 43) | def forward(self, x, edge_index, batch):
  function train (line 68) | def train(train_loader):
  function test (line 84) | def test(loader):

FILE: examples/proteins_gmt.py
  class Net (line 25) | class Net(torch.nn.Module):
    method __init__ (line 26) | def __init__(self):
    method forward (line 38) | def forward(self, x0, edge_index, batch):
  function train (line 58) | def train():
  function test (line 74) | def test(loader):

FILE: examples/proteins_mincut_pool.py
  class Net (line 26) | class Net(torch.nn.Module):
    method __init__ (line 27) | def __init__(self, in_channels, out_channels, hidden_channels=32):
    method forward (line 43) | def forward(self, x, edge_index, batch):
  function train (line 70) | def train(epoch):
  function test (line 86) | def test(loader):

FILE: examples/proteins_topk_pool.py
  class Net (line 22) | class Net(torch.nn.Module):
    method __init__ (line 23) | def __init__(self):
    method forward (line 37) | def forward(self, data):
  function train (line 67) | def train(epoch):
  function test (line 82) | def test(loader):

FILE: examples/pytorch_ignite/gin.py
  class Model (line 16) | class Model(torch.nn.Module):
    method __init__ (line 17) | def __init__(self, in_channels: int, out_channels: int,
    method forward (line 28) | def forward(self, data):
  function main (line 35) | def main():

FILE: examples/pytorch_lightning/gin.py
  class Model (line 14) | class Model(pl.LightningModule):
    method __init__ (line 15) | def __init__(self, in_channels: int, out_channels: int,
    method forward (line 29) | def forward(self, x, edge_index, batch):
    method training_step (line 35) | def training_step(self, data, batch_idx):
    method validation_step (line 43) | def validation_step(self, data, batch_idx):
    method test_step (line 49) | def test_step(self, data, batch_idx):
    method configure_optimizers (line 55) | def configure_optimizers(self):

FILE: examples/pytorch_lightning/graph_sage.py
  class Model (line 14) | class Model(pl.LightningModule):
    method __init__ (line 15) | def __init__(self, in_channels: int, out_channels: int,
    method forward (line 27) | def forward(self, x, edge_index):
    method training_step (line 30) | def training_step(self, data, batch_idx):
    method validation_step (line 39) | def validation_step(self, data, batch_idx):
    method test_step (line 46) | def test_step(self, data, batch_idx):
    method configure_optimizers (line 53) | def configure_optimizers(self):

FILE: examples/pytorch_lightning/relational_gnn.py
  class GNN (line 20) | class GNN(torch.nn.Module):
    method __init__ (line 21) | def __init__(self, hidden_channels: int, out_channels: int,
    method forward (line 30) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  class RelationalGNN (line 38) | class RelationalGNN(LightningModule):
    method __init__ (line 39) | def __init__(
    method forward (line 58) | def forward(
    method common_step (line 65) | def common_step(self, batch: Batch) -> Tuple[Tensor, Tensor]:
    method training_step (line 71) | def training_step(self, batch: Batch, batch_idx: int) -> Tensor:
    method validation_step (line 79) | def validation_step(self, batch: Batch, batch_idx: int):
    method test_step (line 85) | def test_step(self, batch: Batch, batch_idx: int):
    method configure_optimizers (line 91) | def configure_optimizers(self):
  function main (line 95) | def main():

FILE: examples/qm9_nn_conv.py
  class MyTransform (line 18) | class MyTransform:
    method __call__ (line 19) | def __call__(self, data):
  class Complete (line 25) | class Complete:
    method __call__ (line 26) | def __call__(self, data):
  class Net (line 71) | class Net(torch.nn.Module):
    method __init__ (line 72) | def __init__(self):
    method forward (line 84) | def forward(self, data):
  function train (line 107) | def train(epoch):
  function test (line 121) | def test(loader):

FILE: examples/quiver/multi_gpu_quiver.py
  class SAGE (line 19) | class SAGE(torch.nn.Module):
    method __init__ (line 20) | def __init__(self, in_channels, hidden_channels, out_channels,
    method forward (line 31) | def forward(self, x, adjs):
    method inference (line 41) | def inference(self, x_all, device, subgraph_loader):
  function run (line 65) | def run(rank, world_size, dataset, quiver_feature, quiver_sampler):

FILE: examples/quiver/single_gpu_quiver.py
  class SAGE (line 41) | class SAGE(torch.nn.Module):
    method __init__ (line 42) | def __init__(self, in_channels, hidden_channels, out_channels):
    method forward (line 51) | def forward(self, x, adjs):
    method inference (line 66) | def inference(self, x_all):
  function train (line 109) | def train(epoch):
  function test (line 144) | def test():

FILE: examples/randlanet_classification.py
  class SharedMLP (line 32) | class SharedMLP(MLP):
    method __init__ (line 34) | def __init__(self, *args, **kwargs):
  class LocalFeatureAggregation (line 46) | class LocalFeatureAggregation(MessagePassing):
    method __init__ (line 48) | def __init__(self, channels):
    method forward (line 55) | def forward(self, edge_index, x, pos):
    method message (line 60) | def message(self, x_j: Tensor, pos_i: Tensor, pos_j: Tensor,
  class DilatedResidualBlock (line 92) | class DilatedResidualBlock(torch.nn.Module):
    method __init__ (line 93) | def __init__(
    method forward (line 116) | def forward(self, x, pos, batch):
  function decimate (line 129) | def decimate(tensors, ptr: Tensor, decimation_factor: int):
  class Net (line 136) | class Net(torch.nn.Module):
    method __init__ (line 137) | def __init__(
    method forward (line 158) | def forward(self, x, pos, batch, ptr):
  function train (line 175) | def train(epoch):
  function test (line 191) | def test(loader):

FILE: examples/randlanet_segmentation.py
  class FPModule (line 54) | class FPModule(torch.nn.Module):
    method __init__ (line 56) | def __init__(self, k, nn):
    method forward (line 61) | def forward(self, x, pos, batch, x_skip, pos_skip, batch_skip):
  class Net (line 68) | class Net(torch.nn.Module):
    method __init__ (line 69) | def __init__(
    method forward (line 102) | def forward(self, x, pos, batch, ptr):
  function train (line 143) | def train():
  function test (line 165) | def test(loader):

FILE: examples/rdl.py
  class GloveTextEmbedding (line 44) | class GloveTextEmbedding:
    method __init__ (line 46) | def __init__(self, device: Optional[torch.device] = None) -> None:
    method __call__ (line 52) | def __call__(self, sentences: List[str]) -> Tensor:
  class HeteroEncoder (line 56) | class HeteroEncoder(torch.nn.Module):
    method __init__ (line 72) | def __init__(
    method reset_parameters (line 106) | def reset_parameters(self) -> None:
    method forward (line 111) | def forward(
  class HeteroTemporalEncoder (line 131) | class HeteroTemporalEncoder(torch.nn.Module):
    method __init__ (line 155) | def __init__(self, node_types: List[NodeType], channels: int) -> None:
    method reset_parameters (line 168) | def reset_parameters(self) -> None:
    method forward (line 175) | def forward(
  class HeteroGraphSAGE (line 204) | class HeteroGraphSAGE(torch.nn.Module):
    method __init__ (line 226) | def __init__(
    method reset_parameters (line 255) | def reset_parameters(self) -> None:
    method forward (line 263) | def forward(
  class Model (line 285) | class Model(torch.nn.Module):
    method __init__ (line 307) | def __init__(
    method reset_parameters (line 346) | def reset_parameters(self) -> None:
    method forward (line 353) | def forward(
  class AttachTargetTransform (line 391) | class AttachTargetTransform:
    method __init__ (line 400) | def __init__(self, entity: str, target: Tensor) -> None:
    method __call__ (line 404) | def __call__(self, batch: HeteroData) -> HeteroData:
  class TrainingTableInput (line 409) | class TrainingTableInput(NamedTuple):
  function get_task_type_params (line 431) | def get_task_type_params(
  function to_unix_time (line 461) | def to_unix_time(ser: pd.Series) -> np.ndarray:
  function get_train_table_input (line 477) | def get_train_table_input(
  function train (line 523) | def train(
  function test (line 555) | def test(
  function main (line 572) | def main():

FILE: examples/reddit.py
  class SAGE (line 35) | class SAGE(torch.nn.Module):
    method __init__ (line 36) | def __init__(self, in_channels, hidden_channels, out_channels):
    method forward (line 42) | def forward(self, x, edge_index):
    method inference (line 51) | def inference(self, x_all, subgraph_loader):
  function train (line 76) | def train(epoch):
  function test (line 101) | def test():

FILE: examples/renet.py
  function train (line 52) | def train():
  function test (line 68) | def test(loader):

FILE: examples/rev_gnn.py
  class GNNBlock (line 22) | class GNNBlock(torch.nn.Module):
    method __init__ (line 23) | def __init__(self, in_channels, out_channels):
    method reset_parameters (line 28) | def reset_parameters(self):
    method forward (line 32) | def forward(self, x, edge_index, dropout_mask=None):
  class RevGNN (line 39) | class RevGNN(torch.nn.Module):
    method __init__ (line 40) | def __init__(self, in_channels, hidden_channels, out_channels, num_lay...
    method reset_parameters (line 59) | def reset_parameters(self):
    method forward (line 66) | def forward(self, x, edge_index):
  function train (line 112) | def train(epoch):
  function test (line 139) | def test(epoch):

FILE: examples/rgat.py
  class RGAT (line 16) | class RGAT(torch.nn.Module):
    method __init__ (line 17) | def __init__(self, in_channels, hidden_channels, out_channels,
    method forward (line 24) | def forward(self, x, edge_index, edge_type):
  function train (line 37) | def train():
  function test (line 48) | def test():

FILE: examples/rgcn.py
  class Net (line 42) | class Net(torch.nn.Module):
    method __init__ (line 43) | def __init__(self):
    method forward (line 50) | def forward(self, edge_index, edge_type):
  function train (line 68) | def train():
  function test (line 79) | def test():

FILE: examples/rgcn_link_pred.py
  class RGCNEncoder (line 27) | class RGCNEncoder(torch.nn.Module):
    method __init__ (line 28) | def __init__(self, num_nodes, hidden_channels, num_relations):
    method reset_parameters (line 37) | def reset_parameters(self):
    method forward (line 42) | def forward(self, edge_index, edge_type):
  class DistMultDecoder (line 50) | class DistMultDecoder(torch.nn.Module):
    method __init__ (line 51) | def __init__(self, num_relations, hidden_channels):
    method reset_parameters (line 56) | def reset_parameters(self):
    method forward (line 59) | def forward(self, z, edge_index, edge_type):
  function negative_sampling (line 73) | def negative_sampling(edge_index, num_nodes):
  function train (line 86) | def train():
  function test (line 111) | def test():
  function compute_rank (line 122) | def compute_rank(ranks):
  function compute_mrr (line 132) | def compute_mrr(z, edge_index, edge_type):

FILE: examples/seal_link_pred.py
  class SEALDataset (line 21) | class SEALDataset(InMemoryDataset):
    method __init__ (line 22) | def __init__(self, dataset, num_hops, split='train'):
    method processed_file_names (line 30) | def processed_file_names(self):
    method process (line 33) | def process(self):
    method extract_enclosing_subgraphs (line 70) | def extract_enclosing_subgraphs(self, edge_index, edge_label_index, y):
    method drnl_node_labeling (line 92) | def drnl_node_labeling(self, edge_index, src, dst, num_nodes=None):
  class DGCNN (line 139) | class DGCNN(torch.nn.Module):
    method __init__ (line 140) | def __init__(self, hidden_channels, num_layers, GNN=GCNConv, k=0.6):
    method forward (line 167) | def forward(self, x, edge_index, batch):
  function train (line 190) | def train():
  function test (line 207) | def test(loader):

FILE: examples/sgc.py
  class Net (line 15) | class Net(torch.nn.Module):
    method __init__ (line 16) | def __init__(self):
    method forward (line 25) | def forward(self):
  function train (line 42) | def train():
  function test (line 50) | def test():

FILE: examples/shadow.py
  class GNN (line 23) | class GNN(torch.nn.Module):
    method __init__ (line 24) | def __init__(self, in_channels, hidden_channels, out_channels):
    method forward (line 31) | def forward(self, x, edge_index, batch, root_n_id):
  function train (line 51) | def train():
  function test (line 67) | def test(loader):

FILE: examples/sign.py
  class Net (line 26) | class Net(torch.nn.Module):
    method __init__ (line 27) | def __init__(self):
    method forward (line 35) | def forward(self, xs):
  function train (line 51) | def train():
  function test (line 73) | def test(loader):

FILE: examples/signed_gcn.py
  function train (line 37) | def train():
  function test (line 47) | def test():

FILE: examples/super_gat.py
  class Net (line 17) | class Net(torch.nn.Module):
    method __init__ (line 18) | def __init__(self):
    method forward (line 29) | def forward(self, x, edge_index):
  function train (line 44) | def train(data):
  function test (line 55) | def test(data):

FILE: examples/tagcn.py
  class Net (line 16) | class Net(torch.nn.Module):
    method __init__ (line 17) | def __init__(self):
    method forward (line 22) | def forward(self):
  function train (line 41) | def train():
  function test (line 49) | def test():

FILE: examples/tensorboard_logging.py
  class Net (line 17) | class Net(torch.nn.Module):
    method __init__ (line 18) | def __init__(self):
    method forward (line 23) | def forward(self, x, edge_index):
  function train (line 41) | def train():
  function test (line 52) | def test():

FILE: examples/tgn.py
  class GraphAttentionEmbedding (line 60) | class GraphAttentionEmbedding(torch.nn.Module):
    method __init__ (line 61) | def __init__(self, in_channels, out_channels, msg_dim, time_enc):
    method forward (line 68) | def forward(self, x, last_update, edge_index, t, msg):
  class LinkPredictor (line 75) | class LinkPredictor(torch.nn.Module):
    method __init__ (line 76) | def __init__(self, in_channels):
    method forward (line 82) | def forward(self, z_src, z_dst):
  function train (line 117) | def train():
  function test (line 156) | def test(loader):

FILE: examples/triangles_sag_pool.py
  class HandleNodeAttention (line 17) | class HandleNodeAttention:
    method __call__ (line 18) | def __call__(self, data):
  class Net (line 35) | class Net(torch.nn.Module):
    method __init__ (line 36) | def __init__(self, in_channels):
    method forward (line 47) | def forward(self, data):
  function train (line 74) | def train():
  function test (line 90) | def test(loader):

FILE: examples/unimp_arxiv.py
  class UniMP (line 15) | class UniMP(torch.nn.Module):
    method __init__ (line 16) | def __init__(self, in_channels, num_classes, hidden_channels, num_layers,
    method forward (line 39) | def forward(self, x, y, edge_index, label_mask):
  function train (line 59) | def train(label_rate=0.65):  # How many labels to use for propagation.
  function test (line 75) | def test():

FILE: examples/upfd.py
  class Net (line 32) | class Net(torch.nn.Module):
    method __init__ (line 33) | def __init__(self, model, in_channels, hidden_channels, out_channels,
    method forward (line 51) | def forward(self, x, edge_index, batch):
  function train (line 74) | def train():
  function test (line 91) | def test(loader):

FILE: examples/wl_kernel.py
  class WL (line 27) | class WL(torch.nn.Module):
    method __init__ (line 28) | def __init__(self, num_layers):
    method forward (line 32) | def forward(self, x, edge_index, batch=None):

FILE: graphgym/agg_batch.py
  function parse_args (line 6) | def parse_args():

FILE: graphgym/configs_gen.py
  function parse_args (line 19) | def parse_args():
  function get_fname (line 44) | def get_fname(string):
  function grid2list (line 51) | def grid2list(grid):
  function lists_distance (line 62) | def lists_distance(l1, l2):
  function grid2list_sample (line 71) | def grid2list_sample(grid, sample=10):
  function load_config (line 82) | def load_config(fname):
  function load_search_file (line 90) | def load_search_file(fname):
  function load_alias_file (line 112) | def load_alias_file(fname):
  function exclude_list_id (line 120) | def exclude_list_id(list, id):
  function gen_grid (line 124) | def gen_grid(args, config, config_budget=None):
  function gen_grid_sample (line 166) | def gen_grid_sample(args, config, config_budget=None, compare_alias_list...

FILE: graphgym/custom_graphgym/act/example.py
  class SWISH (line 10) | class SWISH(nn.Module):
    method __init__ (line 11) | def __init__(self, inplace=False):
    method forward (line 15) | def forward(self, x):

FILE: graphgym/custom_graphgym/config/example.py
  function set_cfg_example (line 7) | def set_cfg_example(cfg):

FILE: graphgym/custom_graphgym/encoder/example.py
  class ExampleNodeEncoder (line 11) | class ExampleNodeEncoder(torch.nn.Module):
    method __init__ (line 18) | def __init__(self, emb_dim, num_classes=None):
    method forward (line 24) | def forward(self, batch):
  class ExampleEdgeEncoder (line 32) | class ExampleEdgeEncoder(torch.nn.Module):
    method __init__ (line 33) | def __init__(self, emb_dim):
    method forward (line 44) | def forward(self, batch):

FILE: graphgym/custom_graphgym/head/example.py
  class ExampleNodeHead (line 7) | class ExampleNodeHead(nn.Module):
    method __init__ (line 9) | def __init__(self, dim_in, dim_out):
    method _apply_index (line 13) | def _apply_index(self, batch):
    method forward (line 20) | def forward(self, batch):

FILE: graphgym/custom_graphgym/layer/example.py
  class ExampleConv1 (line 17) | class ExampleConv1(MessagePassing):
    method __init__ (line 19) | def __init__(self, in_channels, out_channels, bias=True, **kwargs):
    method reset_parameters (line 34) | def reset_parameters(self):
    method forward (line 38) | def forward(self, batch):
    method message (line 46) | def message(self, x_j):
    method update (line 49) | def update(self, aggr_out):
  class ExampleConv2Layer (line 57) | class ExampleConv2Layer(MessagePassing):
    method __init__ (line 59) | def __init__(self, in_channels, out_channels, bias=True, **kwargs):
    method reset_parameters (line 74) | def reset_parameters(self):
    method forward (line 78) | def forward(self, x, edge_index):
    method message (line 83) | def message(self, x_j):
    method update (line 86) | def update(self, aggr_out):
  class ExampleConv2 (line 93) | class ExampleConv2(nn.Module):
    method __init__ (line 94) | def __init__(self, dim_in, dim_out, bias=False, **kwargs):
    method forward (line 98) | def forward(self, batch):

FILE: graphgym/custom_graphgym/loader/example.py
  function load_dataset_example (line 6) | def load_dataset_example(format, name, dataset_dir):

FILE: graphgym/custom_graphgym/loss/example.py
  function loss_example (line 8) | def loss_example(pred, true):

FILE: graphgym/custom_graphgym/network/example.py
  class ExampleGNN (line 13) | class ExampleGNN(torch.nn.Module):
    method __init__ (line 14) | def __init__(self, dim_in, dim_out, num_layers=2, model_type='GCN'):
    method build_conv_model (line 26) | def build_conv_model(self, model_type):
    method forward (line 36) | def forward(self, batch):

FILE: graphgym/custom_graphgym/optimizer/example.py
  function adagrad_optimizer (line 11) | def adagrad_optimizer(params: Iterator[Parameter], base_lr: float,
  function plateau_scheduler (line 17) | def plateau_scheduler(optimizer: Optimizer, patience: int,

FILE: graphgym/custom_graphgym/pooling/example.py
  function global_example_pool (line 6) | def global_example_pool(x, batch, size=None):

FILE: graphgym/custom_graphgym/stage/example.py
  function GNNLayer (line 9) | def GNNLayer(dim_in, dim_out, has_act=True):
  class GNNStackStage (line 14) | class GNNStackStage(nn.Module):
    method __init__ (line 16) | def __init__(self, dim_in, dim_out, num_layers):
    method forward (line 24) | def forward(self, batch):

FILE: graphgym/custom_graphgym/train/example.py
  function train_epoch (line 17) | def train_epoch(logger, loader, model, optimizer, scheduler):
  function eval_epoch (line 36) | def eval_epoch(logger, loader, model):
  function train_example (line 51) | def train_example(loggers, loaders, model, optimizer, scheduler):

FILE: test/conftest.py
  function load_dataset (line 14) | def load_dataset(root: str, name: str, *args, **kwargs) -> Dataset:
  function get_dataset (line 50) | def get_dataset() -> Callable:
  function enable_extensions (line 64) | def enable_extensions():  # Nothing to do.
  function disable_extensions (line 69) | def disable_extensions():
  function without_extensions (line 89) | def without_extensions(request):
  function spawn_context (line 95) | def spawn_context():

FILE: test/contrib/explain/test_pgm_explainer.py
  class GCN (line 12) | class GCN(torch.nn.Module):
    method __init__ (line 13) | def __init__(self, model_config: ModelConfig):
    method forward (line 25) | def forward(self, x, edge_index, edge_weight=None, batch=None, **kwargs):
  function test_pgm_explainer_classification (line 59) | def test_pgm_explainer_classification(node_idx, task_level, perturbation...
  class DummyModel (line 93) | class DummyModel(torch.nn.Module):
    method forward (line 94) | def forward(self, x, edge_index, **kwargs):
  function test_batch_perturb_features_on_node (line 98) | def test_batch_perturb_features_on_node():

FILE: test/contrib/nn/models/test_rbcd_attack.py
  class GCN (line 10) | class GCN(torch.nn.Module):
    method __init__ (line 11) | def __init__(self):
    method forward (line 16) | def forward(self, x, edge_index, edge_weight):
  class GNN (line 22) | class GNN(torch.nn.Module):
    method __init__ (line 23) | def __init__(self):
    method forward (line 29) | def forward(self, x, edge_index, edge_weight, batch=None):
  function test_prbcd_attack (line 43) | def test_prbcd_attack(model, budget, loss, is_undirected, with_early_sto...
  function test_grbcd_attack (line 82) | def test_grbcd_attack(model, budget, is_undirected):

FILE: test/data/lightning/test_datamodule.py
  class LinearGraphModule (line 35) | class LinearGraphModule(LightningModule):
    method __init__ (line 36) | def __init__(self, in_channels: int, hidden_channels: int,
    method forward (line 48) | def forward(self, x: Tensor, batch: Data) -> Tensor:
    method training_step (line 57) | def training_step(self, data: Data, batch_idx: int):
    method validation_step (line 65) | def validation_step(self, data: Data, batch_idx: int):
    method test_step (line 70) | def test_step(self, data: Data, batch_idx: int):
    method configure_optimizers (line 75) | def configure_optimizers(self):
  function test_lightning_dataset (line 84) | def test_lightning_dataset(get_dataset, strategy_type):
  class LinearNodeModule (line 164) | class LinearNodeModule(LightningModule):
    method __init__ (line 165) | def __init__(self, in_channels: int, out_channels: int):
    method forward (line 175) | def forward(self, x: Tensor) -> Tensor:
    method training_step (line 181) | def training_step(self, data: Data, batch_idx: int):
    method validation_step (line 190) | def validation_step(self, data: Data, batch_idx: int):
    method test_step (line 196) | def test_step(self, data: Data, batch_idx: int):
    method configure_optimizers (line 202) | def configure_optimizers(self):
  function test_lightning_node_data (line 213) | def test_lightning_node_data(get_dataset, strategy_type, loader):
  class LinearHeteroNodeModule (line 273) | class LinearHeteroNodeModule(LightningModule):
    method __init__ (line 274) | def __init__(self, in_channels: int, out_channels: int):
    method forward (line 284) | def forward(self, x: Tensor) -> Tensor:
    method training_step (line 290) | def training_step(self, data: HeteroData, batch_idx: int):
    method validation_step (line 299) | def validation_step(self, data: HeteroData, batch_idx: int):
    method test_step (line 305) | def test_step(self, data: HeteroData, batch_idx: int):
    method configure_optimizers (line 311) | def configure_optimizers(self):
  function preserve_context (line 316) | def preserve_context():
  function test_lightning_hetero_node_data (line 328) | def test_lightning_hetero_node_data(preserve_context, get_dataset):
  function test_lightning_data_custom_sampler (line 353) | def test_lightning_data_custom_sampler():
  function test_lightning_hetero_link_data (line 377) | def test_lightning_hetero_link_data():
  function test_lightning_hetero_link_data_custom_store (line 437) | def test_lightning_hetero_link_data_custom_store():
  function test_eval_loader_kwargs (line 475) | def test_eval_loader_kwargs(get_dataset):

FILE: test/data/test_batch.py
  function test_batch_basic (line 15) | def test_batch_basic():
  function test_index (line 111) | def test_index():
  function test_edge_index (line 136) | def test_edge_index():
  function test_batch_with_sparse_tensor (line 177) | def test_batch_with_sparse_tensor():
  function test_batch_with_torch_coo_tensor (line 237) | def test_batch_with_torch_coo_tensor():
  function test_batching_with_new_dimension (line 279) | def test_batching_with_new_dimension():
  function test_pickling (line 321) | def test_pickling(tmp_path):
  function test_recursive_batch (line 341) | def test_recursive_batch():
  function test_batching_of_batches (line 399) | def test_batching_of_batches():
  function test_hetero_batch (line 412) | def test_hetero_batch():
  function test_pair_data_batching (line 480) | def test_pair_data_batching():
  function test_batch_with_empty_list (line 513) | def test_batch_with_empty_list():
  function test_nested_follow_batch (line 524) | def test_nested_follow_batch():
  function test_torch_sparse_batch (line 566) | def test_torch_sparse_batch(layout):
  function test_torch_nested_batch (line 588) | def test_torch_nested_batch():

FILE: test/data/test_data.py
  function test_data (line 13) | def test_data():
  function test_data_attr_cache (line 151) | def test_data_attr_cache():
  function test_data_attr_cache_not_shared (line 180) | def test_data_attr_cache_not_shared():
  function test_to_heterogeneous_empty_edge_index (line 194) | def test_to_heterogeneous_empty_edge_index():
  function test_data_subgraph (line 216) | def test_data_subgraph():
  function test_data_subgraph_with_list_field (line 269) | def test_data_subgraph_with_list_field():
  function test_data_empty_subgraph (line 285) | def test_data_empty_subgraph():
  function test_copy_data (line 295) | def test_copy_data():
  function test_data_sort (line 320) | def test_data_sort():
  function test_debug_data (line 350) | def test_debug_data():
  function run (line 364) | def run(rank, data_list):
  function test_data_share_memory (line 370) | def test_data_share_memory():
  function test_data_setter_properties (line 384) | def test_data_setter_properties():
  function test_data_update (line 410) | def test_data_update():
  function test_data_connected_components (line 421) | def test_data_connected_components():
  function test_data_find_parent (line 449) | def test_data_find_parent():
  function test_data_union (line 465) | def test_data_union():
  function test_basic_feature_store (line 514) | def test_basic_feature_store():
  function test_basic_graph_store (line 550) | def test_basic_graph_store():
  function test_data_generate_ids (line 587) | def test_data_generate_ids():
  function test_data_with_tensor_frame (line 601) | def test_data_with_tensor_frame():
  function test_data_time_handling (line 628) | def test_data_time_handling(num_nodes, num_edges):
  function test_data_inc (line 677) | def test_data_inc():

FILE: test/data/test_database.py
  function test_database_single_tensor (line 22) | def test_database_single_tensor(tmp_path, Database, batch_size):
  function test_database_schema (line 61) | def test_database_schema(tmp_path, Database):
  function test_index (line 153) | def test_index(tmp_path, Database):
  function test_edge_index (line 183) | def test_edge_index(tmp_path, Database):
  function test_database_syntactic_sugar (line 223) | def test_database_syntactic_sugar(tmp_path):
  function in_memory_get (line 273) | def in_memory_get(data):
  function db_get (line 277) | def db_get(db):

FILE: test/data/test_datapipes.py
  function dataset_adapter (line 12) | def dataset_adapter() -> DatasetAdapter:
  function test_dataset_adapter (line 19) | def test_dataset_adapter(dataset_adapter):
  function test_datapipe_batch_graphs (line 32) | def test_datapipe_batch_graphs(dataset_adapter):
  function test_functional_transform (line 39) | def test_functional_transform(dataset_adapter):
  function test_datapipe_parse_smiles (line 46) | def test_datapipe_parse_smiles():

FILE: test/data/test_dataset.py
  class MyTestDataset (line 14) | class MyTestDataset(InMemoryDataset):
    method __init__ (line 15) | def __init__(self, data_list, transform=None):
  class MyStoredTestDataset (line 20) | class MyStoredTestDataset(InMemoryDataset):
    method __init__ (line 21) | def __init__(self, root, data_list, transform=None):
    method processed_file_names (line 27) | def processed_file_names(self) -> str:
    method process (line 30) | def process(self):
  function test_in_memory_dataset (line 34) | def test_in_memory_dataset():
  function test_stored_in_memory_dataset (line 77) | def test_stored_in_memory_dataset(tmp_path):
  function test_stored_hetero_in_memory_dataset (line 102) | def test_stored_hetero_in_memory_dataset(tmp_path):
  function test_index (line 125) | def test_index(tmp_path):
  function test_edge_index (line 149) | def test_edge_index(tmp_path):
  function test_in_memory_num_classes (line 184) | def test_in_memory_num_classes():
  function test_in_memory_dataset_copy (line 212) | def test_in_memory_dataset_copy():
  function test_to_datapipe (line 229) | def test_to_datapipe():
  function test_in_memory_sparse_tensor_dataset (line 247) | def test_in_memory_sparse_tensor_dataset():
  function test_collate_with_new_dimension (line 264) | def test_collate_with_new_dimension():
  function test_hetero_in_memory_dataset (line 295) | def test_hetero_in_memory_dataset():
  function test_override_behavior (line 323) | def test_override_behavior():
  function test_lists_of_tensors_in_memory_dataset (line 389) | def test_lists_of_tensors_in_memory_dataset():
  function test_lists_of_sparse_tensors (line 410) | def test_lists_of_sparse_tensors():
  function test_file_names_as_property_and_method (line 432) | def test_file_names_as_property_and_method():
  function test_to_on_disk_dataset (line 460) | def test_to_on_disk_dataset(tmp_path):

FILE: test/data/test_dataset_summary.py
  function check_stats (line 9) | def check_stats(stats: Stats, expected: Tensor):
  function test_dataset_summary (line 20) | def test_dataset_summary():
  function test_dataset_summary_representation (line 35) | def test_dataset_summary_representation():
  function test_dataset_summary_hetero (line 45) | def test_dataset_summary_hetero():
  function test_dataset_summary_hetero_representation_length (line 58) | def test_dataset_summary_hetero_representation_length():
  function test_dataset_summary_hetero_per_type_check (line 70) | def test_dataset_summary_hetero_per_type_check():

FILE: test/data/test_feature_store.py
  class MyTensorAttrNoGroupName (line 12) | class MyTensorAttrNoGroupName(TensorAttr):
    method __init__ (line 13) | def __init__(self, attr_name=_FieldStatus.UNSET, index=_FieldStatus.UN...
  class MyFeatureStoreNoGroupName (line 18) | class MyFeatureStoreNoGroupName(MyFeatureStore):
    method __init__ (line 19) | def __init__(self):
  function test_feature_store (line 24) | def test_feature_store():
  function test_feature_store_override (line 94) | def test_feature_store_override():

FILE: test/data/test_graph_store.py
  function test_graph_store (line 13) | def test_graph_store():
  function test_graph_store_conversion (line 43) | def test_graph_store_conversion():

FILE: test/data/test_hetero_data.py
  function test_init_hetero_data (line 34) | def test_init_hetero_data():
  function test_hetero_data_to_from_dict (line 100) | def test_hetero_data_to_from_dict():
  function test_hetero_data_functions (line 114) | def test_hetero_data_functions():
  function test_hetero_data_set_value_dict (line 170) | def test_hetero_data_set_value_dict():
  function test_hetero_data_rename (line 182) | def test_hetero_data_rename():
  function test_dangling_types (line 203) | def test_dangling_types():
  function test_hetero_data_subgraph (line 215) | def test_hetero_data_subgraph():
  function test_hetero_data_empty_subgraph (line 336) | def test_hetero_data_empty_subgraph():
  function test_copy_hetero_data (line 356) | def test_copy_hetero_data():
  function test_to_homogeneous_and_vice_versa (line 388) | def test_to_homogeneous_and_vice_versa():
  function test_to_homogeneous_padding (line 531) | def test_to_homogeneous_padding():
  function test_hetero_data_to_canonical (line 547) | def test_hetero_data_to_canonical():
  function test_hetero_data_invalid_names (line 563) | def test_hetero_data_invalid_names():
  function test_hetero_data_update (line 576) | def test_hetero_data_update():
  function test_hetero_data_connected_components (line 597) | def test_hetero_data_connected_components():
  function test_hetero_data_connected_components_single_component (line 686) | def test_hetero_data_connected_components_single_component():
  function test_hetero_data_find_parent (line 701) | def test_hetero_data_find_parent():
  function test_hetero_data_union (line 716) | def test_hetero_data_union():
  function test_basic_feature_store (line 764) | def test_basic_feature_store():
  function test_hetero_data_with_tensor_frame (line 801) | def test_hetero_data_with_tensor_frame():
  function test_basic_graph_store (line 854) | def test_basic_graph_store():
  function test_generate_ids (line 896) | def test_generate_ids():
  function test_invalid_keys (line 914) | def test_invalid_keys():

FILE: test/data/test_hypergraph_data.py
  function test_hypergraph_data (line 9) | def test_hypergraph_data():
  function test_hypergraphdata_subgraph (line 138) | def test_hypergraphdata_subgraph():

FILE: test/data/test_inherit.py
  class MyData (line 6) | class MyData(Data):
    method __init__ (line 7) | def __init__(self, x=None, edge_index=None, arg=None):
    method random (line 10) | def random(self):
  class MyInMemoryDataset (line 14) | class MyInMemoryDataset(InMemoryDataset):
    method __init__ (line 15) | def __init__(self):
    method _download (line 25) | def _download(self):
    method _process (line 28) | def _process(self):
  class MyDataset (line 32) | class MyDataset(Dataset):
    method __init__ (line 33) | def __init__(self):
    method _download (line 36) | def _download(self):
    method _process (line 39) | def _process(self):
    method len (line 42) | def len(self):
    method get (line 45) | def get(self, idx):
  function test_inherit (line 52) | def test_inherit():

FILE: test/data/test_on_disk_dataset.py
  function test_pickle (line 11) | def test_pickle(tmp_path):
  function test_custom_schema (line 57) | def test_custom_schema(tmp_path):

FILE: test/data/test_remote_backend_utils.py
  function test_num_nodes_size (line 15) | def test_num_nodes_size(FeatureStore, GraphStore):

FILE: test/data/test_storage.py
  function test_base_storage (line 10) | def test_base_storage():
  function test_storage_tensor_methods (line 60) | def test_storage_tensor_methods():
  function test_setter_and_getter (line 93) | def test_setter_and_getter():

FILE: test/data/test_temporal.py
  function get_temporal_data (line 8) | def get_temporal_data(num_events, msg_channels):
  function test_temporal_data (line 18) | def test_temporal_data():
  function test_train_val_test_split (line 84) | def test_train_val_test_split():
  function test_temporal_indexing (line 98) | def test_temporal_indexing():

FILE: test/data/test_view.py
  function test_views (line 4) | def test_views():

FILE: test/datasets/graph_generator/test_ba_graph.py
  function test_ba_graph (line 4) | def test_ba_graph():

FILE: test/datasets/graph_generator/test_er_graph.py
  function test_er_graph (line 4) | def test_er_graph():

FILE: test/datasets/graph_generator/test_grid_graph.py
  function test_grid_graph (line 4) | def test_grid_graph():

FILE: test/datasets/graph_generator/test_tree_graph.py
  function test_tree_graph (line 7) | def test_tree_graph(undirected):

FILE: test/datasets/motif_generator/test_custom_motif.py
  function test_custom_motif_pyg_data (line 9) | def test_custom_motif_pyg_data():
  function test_custom_motif_networkx (line 22) | def test_custom_motif_networkx():
  function test_custom_motif_unknown (line 36) | def test_custom_motif_unknown():

FILE: test/datasets/motif_generator/test_cycle_motif.py
  function test_cycle_motif (line 4) | def test_cycle_motif():

FILE: test/datasets/motif_generator/test_grid_motif.py
  function test_grid_motif (line 4) | def test_grid_motif():

FILE: test/datasets/motif_generator/test_house_motif.py
  function test_house_motif (line 4) | def test_house_motif():

FILE: test/datasets/test_ba_shapes.py
  function test_ba_shapes (line 4) | def test_ba_shapes(get_dataset):

FILE: test/datasets/test_bzr.py
  function test_bzr (line 6) | def test_bzr(get_dataset):
  function test_bzr_with_node_attr (line 19) | def test_bzr_with_node_attr(get_dataset):

FILE: test/datasets/test_elliptic.py
  function test_elliptic_bitcoin_dataset (line 6) | def test_elliptic_bitcoin_dataset(get_dataset):

FILE: test/datasets/test_enzymes.py
  function test_enzymes (line 10) | def test_enzymes(get_dataset):
  function test_enzymes_with_node_attr (line 61) | def test_enzymes_with_node_attr(get_dataset):
  function test_cleaned_enzymes (line 69) | def test_cleaned_enzymes(get_dataset):

FILE: test/datasets/test_explainer_dataset.py
  function test_explainer_dataset_ba_house (line 17) | def test_explainer_dataset_ba_house(graph_generator, motif_generator):
  function test_explainer_dataset_reproducibility (line 38) | def test_explainer_dataset_reproducibility():

FILE: test/datasets/test_fake.py
  function test_fake_dataset (line 9) | def test_fake_dataset(num_graphs, edge_dim, task):
  function test_fake_hetero_dataset (line 47) | def test_fake_hetero_dataset(num_graphs, edge_dim, task):

FILE: test/datasets/test_git_mol_dataset.py
  function test_git_mol_dataset (line 16) | def test_git_mol_dataset(split: Tuple[int, int]) -> None:

FILE: test/datasets/test_imdb_binary.py
  function test_imdb_binary (line 6) | def test_imdb_binary(get_dataset):

FILE: test/datasets/test_infection_dataset.py
  class DummyGraph (line 9) | class DummyGraph(GraphGenerator):
    method __call__ (line 10) | def __call__(self) -> Data:
  function test_infection_dataset (line 18) | def test_infection_dataset():
  function test_infection_dataset_reproducibility (line 45) | def test_infection_dataset_reproducibility():

FILE: test/datasets/test_karate.py
  function test_karate (line 1) | def test_karate(get_dataset):

FILE: test/datasets/test_medshapenet.py
  function test_medshapenet (line 9) | def test_medshapenet():

FILE: test/datasets/test_molecule_gpt_dataset.py
  function test_molecule_gpt_dataset (line 7) | def test_molecule_gpt_dataset():

FILE: test/datasets/test_mutag.py
  function test_mutag (line 5) | def test_mutag(get_dataset):
  function test_mutag_with_node_attr (line 17) | def test_mutag_with_node_attr(get_dataset):

FILE: test/datasets/test_planetoid.py
  function test_citeseer (line 7) | def test_citeseer(get_dataset):
  function test_citeseer_with_full_split (line 36) | def test_citeseer_with_full_split(get_dataset):
  function test_citeseer_with_random_split (line 47) | def test_citeseer_with_random_split(get_dataset):

FILE: test/datasets/test_protein_mpnn_dataset.py
  function test_protein_mpnn_dataset (line 8) | def test_protein_mpnn_dataset():

FILE: test/datasets/test_snap_dataset.py
  function test_ego_facebook_snap_dataset (line 6) | def test_ego_facebook_snap_dataset(get_dataset):
  function test_soc_slashdot_snap_dataset (line 35) | def test_soc_slashdot_snap_dataset(get_dataset):
  function test_wiki_vote_snap_dataset (line 43) | def test_wiki_vote_snap_dataset(get_dataset):

FILE: test/datasets/test_suite_sparse.py
  function test_suite_sparse_dataset (line 6) | def test_suite_sparse_dataset(get_dataset):
  function test_illc1850_suite_sparse_dataset (line 15) | def test_illc1850_suite_sparse_dataset(get_dataset):

FILE: test/datasets/test_tag_dataset.py
  function test_tag_dataset (line 7) | def test_tag_dataset() -> None:

FILE: test/datasets/test_teeth3ds.py
  function test_teeth3ds (line 7) | def test_teeth3ds(tmp_path) -> None:

FILE: test/datasets/test_web_qsp_dataset.py
  function test_web_qsp_dataset (line 16) | def test_web_qsp_dataset(tmp_path):
  class MockSentenceTransformer (line 24) | class MockSentenceTransformer:
    method __init__ (line 25) | def __init__(self, *args, **kwargs):
    method to (line 28) | def to(self, device):
    method eval (line 31) | def eval(self):
    method encode (line 34) | def encode(self, sentences, batch_size=None, output_device=None):
  function create_mock_graphs (line 45) | def create_mock_graphs(tmp_path: str, train_size: int, val_size: int,
  function test_kgqa_base_dataset (line 144) | def test_kgqa_base_dataset(tmp_path, monkeypatch):

FILE: test/distributed/test_dist_link_neighbor_loader.py
  function create_dist_data (line 22) | def create_dist_data(tmp_path: str, rank: int):
  function dist_link_neighbor_loader_homo (line 29) | def dist_link_neighbor_loader_homo(
  function dist_link_neighbor_loader_hetero (line 79) | def dist_link_neighbor_loader_hetero(
  function test_dist_link_neighbor_loader_homo (line 146) | def test_dist_link_neighbor_loader_homo(
  function test_dist_link_neighbor_loader_hetero (line 187) | def test_dist_link_neighbor_loader_hetero(

FILE: test/distributed/test_dist_link_neighbor_sampler.py
  function create_data (line 27) | def create_data(rank, world_size, time_attr: Optional[str] = None):
  function create_hetero_data (line 78) | def create_hetero_data(tmp_path: str, rank: int):
  function dist_link_neighbor_sampler (line 86) | def dist_link_neighbor_sampler(
  function dist_link_neighbor_sampler_temporal (line 164) | def dist_link_neighbor_sampler_temporal(
  function dist_link_neighbor_sampler_hetero (line 252) | def dist_link_neighbor_sampler_hetero(
  function dist_link_neighbor_sampler_temporal_hetero (line 343) | def dist_link_neighbor_sampler_temporal_hetero(
  function test_dist_link_neighbor_sampler (line 441) | def test_dist_link_neighbor_sampler(disjoint):
  function test_dist_link_neighbor_sampler_temporal (line 459) | def test_dist_link_neighbor_sampler_temporal(seed_time, temporal_strategy):
  function test_dist_link_neighbor_sampler_edge_level_temporal (line 483) | def test_dist_link_neighbor_sampler_edge_level_temporal(
  function test_dist_link_neighbor_sampler_hetero (line 512) | def test_dist_link_neighbor_sampler_hetero(tmp_path, disjoint):
  function test_dist_link_neighbor_sampler_temporal_hetero (line 551) | def test_dist_link_neighbor_sampler_temporal_hetero(
  function test_dist_link_neighbor_sampler_edge_level_temporal_hetero (line 603) | def test_dist_link_neighbor_sampler_edge_level_temporal_hetero(

FILE: test/distributed/test_dist_neighbor_loader.py
  function create_dist_data (line 22) | def create_dist_data(tmp_path: str, rank: int):
  function dist_neighbor_loader_homo (line 29) | def dist_neighbor_loader_homo(
  function dist_neighbor_loader_hetero (line 82) | def dist_neighbor_loader_hetero(
  function test_dist_neighbor_loader_homo (line 160) | def test_dist_neighbor_loader_homo(
  function test_dist_neighbor_loader_hetero (line 197) | def test_dist_neighbor_loader_hetero(

FILE: test/distributed/test_dist_neighbor_sampler.py
  function create_data (line 25) | def create_data(rank: int, world_size: int, time_attr: Optional[str] = N...
  function create_hetero_data (line 76) | def create_hetero_data(
  function dist_neighbor_sampler (line 86) | def dist_neighbor_sampler(
  function dist_neighbor_sampler_temporal (line 152) | def dist_neighbor_sampler_temporal(
  function dist_neighbor_sampler_hetero (line 228) | def dist_neighbor_sampler_hetero(
  function dist_neighbor_sampler_temporal_hetero (line 307) | def dist_neighbor_sampler_temporal_hetero(
  function test_dist_neighbor_sampler (line 392) | def test_dist_neighbor_sampler(disjoint):
  function test_dist_neighbor_sampler_temporal (line 410) | def test_dist_neighbor_sampler_temporal(seed_time, temporal_strategy):
  function test_dist_neighbor_sampler_edge_level_temporal (line 434) | def test_dist_neighbor_sampler_edge_level_temporal(
  function test_dist_neighbor_sampler_hetero (line 463) | def test_dist_neighbor_sampler_hetero(tmp_path, disjoint):
  function test_dist_neighbor_sampler_temporal_hetero (line 501) | def test_dist_neighbor_sampler_temporal_hetero(
  function test_dist_neighbor_sampler_edge_level_temporal_hetero (line 553) | def test_dist_neighbor_sampler_edge_level_temporal_hetero(

FILE: test/distributed/test_dist_utils.py
  function test_remove_duplicates (line 9) | def test_remove_duplicates():
  function test_remove_duplicates_disjoint (line 22) | def test_remove_duplicates_disjoint():

FILE: test/distributed/test_local_feature_store.py
  function test_local_feature_store_global_id (line 8) | def test_local_feature_store_global_id():
  function test_local_feature_store_utils (line 35) | def test_local_feature_store_utils():
  function test_homogeneous_feature_store (line 64) | def test_homogeneous_feature_store():
  function test_heterogeneous_feature_store (line 94) | def test_heterogeneous_feature_store():

FILE: test/distributed/test_local_graph_store.py
  function test_local_graph_store (line 8) | def test_local_graph_store():
  function test_homogeneous_graph_store (line 39) | def test_homogeneous_graph_store():
  function test_heterogeneous_graph_store (line 69) | def test_heterogeneous_graph_store():
  function test_sorted_graph_store (line 101) | def test_sorted_graph_store():

FILE: test/distributed/test_partition.py
  function test_partition_data (line 18) | def test_partition_data(tmp_path):
  function test_partition_hetero_data (line 65) | def test_partition_hetero_data(tmp_path):
  function test_partition_data_temporal (line 100) | def test_partition_data_temporal(tmp_path):
  function test_partition_data_edge_level_temporal (line 121) | def test_partition_data_edge_level_temporal(tmp_path):
  function test_partition_hetero_data_temporal (line 144) | def test_partition_hetero_data_temporal(tmp_path):
  function test_partition_hetero_data_edge_level_temporal (line 168) | def test_partition_hetero_data_edge_level_temporal(tmp_path):
  function test_from_partition_data (line 198) | def test_from_partition_data(tmp_path):
  function test_from_partition_hetero_data (line 233) | def test_from_partition_hetero_data(tmp_path):
  function test_from_partition_temporal_data (line 261) | def test_from_partition_temporal_data(tmp_path):
  function test_from_partition_edge_level_temporal_data (line 287) | def test_from_partition_edge_level_temporal_data(tmp_path):
  function test_from_partition_hetero_temporal_data (line 315) | def test_from_partition_hetero_temporal_data(tmp_path):
  function test_from_partition_hetero_edge_level_temporal_data (line 348) | def test_from_partition_hetero_edge_level_temporal_data(tmp_path):

FILE: test/distributed/test_rpc.py
  function run_rpc_feature_test (line 12) | def run_rpc_feature_test(
  function test_dist_feature_lookup (line 84) | def test_dist_feature_lookup():

FILE: test/explain/algorithm/test_attention_explainer.py
  class AttentionGNN (line 25) | class AttentionGNN(torch.nn.Module):
    method __init__ (line 26) | def __init__(self):
    method forward (line 32) | def forward(self, x, edge_index):
  class HeteroAttentionGNN (line 39) | class HeteroAttentionGNN(torch.nn.Module):
    method __init__ (line 40) | def __init__(self, metadata, model_config=None):
    method forward (line 69) | def forward(self, x_dict, edge_index_dict, **kwargs):
  class HeteroConvAttentionGNN (line 90) | class HeteroConvAttentionGNN(torch.nn.Module):
    method __init__ (line 91) | def __init__(self, metadata, model_config=None):
    method _initialize_layers (line 128) | def _initialize_layers(self, x_dict):
    method forward (line 145) | def forward(self, x_dict, edge_index_dict):
  function test_attention_explainer (line 184) | def test_attention_explainer(index, check_explanation):
  function test_attention_explainer_supports (line 203) | def test_attention_explainer_supports(explanation_type, node_mask_type):
  function test_attention_explainer_attentive_fp (line 219) | def test_attention_explainer_attentive_fp(check_explanation):
  function test_attention_explainer_hetero (line 239) | def test_attention_explainer_hetero(index, hetero_data,
  function test_attention_explainer_hetero_conv (line 277) | def test_attention_explainer_hetero_conv(index, hetero_data,

FILE: test/explain/algorithm/test_captum.py
  function test_to_captum (line 36) | def test_to_captum(model, mask_type, output_idx):
  function test_captum_attribution_methods (line 65) | def test_captum_attribution_methods(mask_type, method):
  function test_custom_explain_message (line 109) | def test_custom_explain_message():
  function test_to_captum_input (line 135) | def test_to_captum_input(mask_type):

FILE: test/explain/algorithm/test_captum_explainer.py
  class GCN (line 38) | class GCN(torch.nn.Module):
    method __init__ (line 39) | def __init__(self, model_config: ModelConfig):
    method forward (line 54) | def forward(self, x, edge_index, batch=None, edge_label_index=None):
  function check_explanation (line 82) | def check_explanation(
  function test_unsupported_methods (line 100) | def test_unsupported_methods(method):
  function test_captum_explainer_binary_classification (line 120) | def test_captum_explainer_binary_classification(
  function test_captum_explainer_multiclass_classification (line 165) | def test_captum_explainer_multiclass_classification(
  function test_captum_hetero_data (line 218) | def test_captum_hetero_data(method, node_mask_type, edge_mask_type, index,
  function test_captum_explainer_supports (line 243) | def test_captum_explainer_supports(node_mask_type):

FILE: test/explain/algorithm/test_captum_hetero.py
  function test_captum_attribution_methods_hetero (line 35) | def test_captum_attribution_methods_hetero(mask_type, method, hetero_data,

FILE: test/explain/algorithm/test_explain_algorithm_utils.py
  class HeteroModel (line 10) | class HeteroModel(torch.nn.Module):
    method __init__ (line 11) | def __init__(self):
  class GraphSAGE (line 33) | class GraphSAGE(torch.nn.Module):
    method __init__ (line 34) | def __init__(self):
    method forward (line 39) | def forward(self, x, edge_index):
  function test_set_clear_mask (line 44) | def test_set_clear_mask(hetero_data):

FILE: test/explain/algorithm/test_gnn_explainer.py
  class GNN (line 22) | class GNN(torch.nn.Module):
    method __init__ (line 23) | def __init__(self, Conv, model_config: ModelConfig):
    method forward (line 38) | def forward(self, x, edge_index, batch=None, edge_label_index=None):
  function test_gnn_explainer_binary_classification (line 90) | def test_gnn_explainer_binary_classification(
  function test_gnn_explainer_multiclass_classification (line 152) | def test_gnn_explainer_multiclass_classification(
  function test_gnn_explainer_regression (line 205) | def test_gnn_explainer_regression(
  function test_gnn_explainer_cheb_conv (line 250) | def test_gnn_explainer_cheb_conv(check_explanation):
  function test_gnn_explainer_attentive_fp (line 272) | def test_gnn_explainer_attentive_fp(check_explanation):
  function test_gnn_explainer_hetero (line 306) | def test_gnn_explainer_hetero(

FILE: test/explain/algorithm/test_graphmask_explainer.py
  class GCN (line 15) | class GCN(torch.nn.Module):
    method __init__ (line 16) | def __init__(self, model_config: ModelConfig):
    method forward (line 28) | def forward(self, x, edge_index, batch=None, edge_label_index=None):
  function check_explanation (line 50) | def check_explanation(
  function test_graph_mask_explainer_binary_classification (line 99) | def test_graph_mask_explainer_binary_classification(
  function test_graph_mask_explainer_multiclass_classification (line 151) | def test_graph_mask_explainer_multiclass_classification(
  function test_graph_mask_explainer_regression (line 198) | def test_graph_mask_explainer_regression(

FILE: test/explain/algorithm/test_pg_explainer.py
  class GCN (line 16) | class GCN(torch.nn.Module):
    method __init__ (line 17) | def __init__(self, model_config: ModelConfig):
    method forward (line 29) | def forward(self, x, edge_index, batch=None, edge_label_index=None):
  function test_pg_explainer_node (line 43) | def test_pg_explainer_node(device, check_explanation, mode):
  function test_pg_explainer_graph (line 90) | def test_pg_explainer_graph(device, check_explanation, mode):
  function test_pg_explainer_hetero (line 141) | def test_pg_explainer_hetero(device, hetero_data, hetero_model,
  function test_pg_explainer_supports (line 229) | def test_pg_explainer_supports():
  function test_pg_explainer_native_hetero (line 287) | def test_pg_explainer_native_hetero(device, hetero_data, hetero_model_na...
  function test_pg_explainer_hetero_conv (line 387) | def test_pg_explainer_hetero_conv(device, hetero_data, hetero_model_custom,

FILE: test/explain/conftest.py
  function data (line 27) | def data():
  function hetero_data (line 36) | def hetero_data():
  function hetero_model (line 52) | def hetero_model():
  function hetero_model_custom (line 57) | def hetero_model_custom():
  class GraphSAGE (line 61) | class GraphSAGE(torch.nn.Module):
    method __init__ (line 62) | def __init__(self):
    method forward (line 67) | def forward(self, x, edge_index):
  class HeteroSAGE (line 72) | class HeteroSAGE(torch.nn.Module):
    method __init__ (line 73) | def __init__(self, metadata, model_config: Optional[ModelConfig] = None):
    method forward (line 86) | def forward(self, x_dict, edge_index_dict,
  function check_explanation (line 106) | def check_explanation():
  function check_explanation_hetero (line 138) | def check_explanation_hetero():
  class NativeHeteroGNN (line 178) | class NativeHeteroGNN(torch.nn.Module):
    method __init__ (line 179) | def __init__(self, metadata, model_config: Optional[ModelConfig] = None,
    method _initialize_layers (line 210) | def _initialize_layers(self, x_dict):
    method forward (line 227) | def forward(self, x_dict, edge_index_dict):
  function hetero_model_native (line 259) | def hetero_model_native():
  class HeteroConvModel (line 263) | class HeteroConvModel(torch.nn.Module):
    method __init__ (line 264) | def __init__(self, metadata, model_config: Optional[ModelConfig] = None):
    method forward (line 289) | def forward(self, x_dict, edge_index_dict):

FILE: test/explain/metric/test_basic_metric.py
  function test_groundtruth_metrics (line 10) | def test_groundtruth_metrics():
  function test_perfect_groundtruth_metrics (line 25) | def test_perfect_groundtruth_metrics():
  function test_groundtruth_true_negative (line 39) | def test_groundtruth_true_negative():

FILE: test/explain/metric/test_faithfulness.py
  class DummyModel (line 12) | class DummyModel(torch.nn.Module):
    method __init__ (line 13) | def __init__(self, model_config: ModelConfig):
    method forward (line 17) | def forward(self, x, edge_index):
  function test_unfaithfulness (line 29) | def test_unfaithfulness(top_k, explanation_type, node_mask_type, return_...

FILE: test/explain/metric/test_fidelity.py
  class DummyModel (line 13) | class DummyModel(torch.nn.Module):
    method forward (line 14) | def forward(self, x, edge_index):
  function test_fidelity (line 19) | def test_fidelity(explanation_type):
  function test_characterization_score (line 50) | def test_characterization_score():
  function test_fidelity_curve_auc (line 60) | def test_fidelity_curve_auc():

FILE: test/explain/test_explain_config.py
  function test_threshold_config (line 17) | def test_threshold_config(threshold_pairs):
  function test_configuration_config (line 40) | def test_configuration_config(explanation_type, mask_type):

FILE: test/explain/test_explainer.py
  class DummyModel (line 8) | class DummyModel(torch.nn.Module):
    method forward (line 9) | def forward(self, x, edge_index):
  function test_get_prediction (line 13) | def test_get_prediction(data):
  function test_forward (line 34) | def test_forward(data, target, explanation_type):
  function test_hard_threshold (line 70) | def test_hard_threshold(data, threshold_value, node_mask_type):
  function test_topk_threshold (line 96) | def test_topk_threshold(data, threshold_value, threshold_type, node_mask...

FILE: test/explain/test_explanation.py
  function create_random_explanation (line 13) | def create_random_explanation(
  function test_available_explanations (line 49) | def test_available_explanations(data, node_mask_type, edge_mask_type):
  function test_validate_explanation (line 65) | def test_validate_explanation(data):
  function test_node_mask (line 85) | def test_node_mask(data):
  function test_edge_mask (line 111) | def test_edge_mask(data):
  function test_visualize_feature_importance (line 140) | def test_visualize_feature_importance(tmp_path, data, top_k, node_mask_t...

FILE: test/explain/test_hetero_explainer.py
  class DummyModel (line 12) | class DummyModel(torch.nn.Module):
    method forward (line 13) | def forward(self, x_dict, edge_index_dict, *args) -> torch.Tensor:
  function test_get_prediction (line 17) | def test_get_prediction(hetero_data):
  function test_forward (line 39) | def test_forward(hetero_data, target, explanation_type):
  function test_hard_threshold (line 74) | def test_hard_threshold(hetero_data, threshold_value, node_mask_type):
  function test_topk_threshold (line 100) | def test_topk_threshold(hetero_data, threshold_value, threshold_type,

FILE: test/explain/test_hetero_explanation.py
  function create_random_explanation (line 13) | def create_random_explanation(
  function test_available_explanations (line 46) | def test_available_explanations(hetero_data, node_mask_type, edge_mask_t...
  function test_validate_explanation (line 62) | def test_validate_explanation(hetero_data):
  function test_node_mask (line 82) | def test_node_mask():
  function test_edge_mask (line 98) | def test_edge_mask():
  function test_visualize_feature_importance (line 126) | def test_visualize_feature_importance(
  function test_hetero_visualize_graph (line 148) | def test_hetero_visualize_graph(tmp_path, hetero_data):

FILE: test/graphgym/test_config.py
  class MyConfig (line 7) | class MyConfig:
  function my_func (line 12) | def my_func(a: int, b: int = 2) -> str:
  function test_from_config (line 16) | def test_from_config():

FILE: test/graphgym/test_graphgym.py
  function trivial_metric (line 38) | def trivial_metric(true, pred, task_type):
  function test_run_single_graphgym (line 49) | def test_run_single_graphgym(tmp_path, capfd, auto_resume, skip_train_eval,
  function test_graphgym_module (line 114) | def test_graphgym_module(tmp_path):
  function destroy_process_group (line 167) | def destroy_process_group():
  function test_train (line 176) | def test_train(destroy_process_group, tmp_path, capfd):

FILE: test/graphgym/test_logger.py
  function test_logger_callback (line 8) | def test_logger_callback():

FILE: test/graphgym/test_register.py
  function identity_act (line 8) | def identity_act(x: torch.Tensor) -> torch.Tensor:
  function test_register (line 13) | def test_register():

FILE: test/io/test_fs.py
  function tmp_fs_path (line 20) | def tmp_fs_path(request, tmp_path) -> str:
  function test_get_fs (line 28) | def test_get_fs():
  function test_normpath (line 34) | def test_normpath():
  function test_exists (line 39) | def test_exists(tmp_fs_path):
  function test_makedirs (line 47) | def test_makedirs(tmp_fs_path):
  function test_ls (line 55) | def test_ls(tmp_fs_path, detail):
  function test_cp (line 68) | def test_cp(tmp_fs_path):
  function test_extract (line 95) | def test_extract(tmp_fs_path):
  function test_torch_save_load (line 126) | def test_torch_save_load(tmp_fs_path):

FILE: test/io/test_off.py
  function test_read_off (line 12) | def test_read_off():
  function test_write_off (line 26) | def test_write_off():

FILE: test/llm/conftest.py
  function pytest_collection_modifyitems (line 8) | def pytest_collection_modifyitems(items):

FILE: test/llm/models/test_g_retriever.py
  function test_g_retriever (line 16) | def test_g_retriever(use_lora: bool) -> None:
  function test_g_retriever_many_tokens (line 63) | def test_g_retriever_many_tokens() -> None:
  class DummyHFModel (line 110) | class DummyHFModel(nn.Module):
    method __init__ (line 111) | def __init__(self, vocab_size=10):
    method forward (line 116) | def forward(self, inputs_embeds=None, **kwargs):
  class DummyLLM (line 128) | class DummyLLM:
    method __init__ (line 129) | def __init__(self, hidden_dim):
    method _get_embeds (line 135) | def _get_embeds(self, question, *args):
  class DummyGNN (line 146) | class DummyGNN(nn.Module):
    method __init__ (line 148) | def __init__(self, in_channels=4, out_channels=8):
    method forward (line 154) | def forward(self, *args, **kwargs):
  function test_gretriever_prefix_embedding_injection (line 160) | def test_gretriever_prefix_embedding_injection(batch_size):

FILE: test/llm/models/test_git_mol.py
  function test_git_mol (line 8) | def test_git_mol():

FILE: test/llm/models/test_glem.py
  function test_deal_nan_tensor_replaces_nans (line 7) | def test_deal_nan_tensor_replaces_nans():
  function test_deal_nan_non_tensor_passthrough (line 17) | def test_deal_nan_non_tensor_passthrough():
  function test_deal_nan_tensor_dtypes (line 23) | def test_deal_nan_tensor_dtypes(dtype):
  function test_deal_nan_is_non_mutating (line 43) | def test_deal_nan_is_non_mutating():

FILE: test/llm/models/test_llm.py
  function test_get_llm_kwargs (line 12) | def test_get_llm_kwargs():
  function test_llm (line 22) | def test_llm(sys_prompt, context, use_embedding) -> None:
  class DummyBatch (line 47) | class DummyBatch(dict):
    method to (line 49) | def to(self, device):
  class DummyTokenizer (line 53) | class DummyTokenizer:
    method __call__ (line 57) | def __call__(self, texts, return_tensors=None, padding=True):
  class DummyModel (line 75) | class DummyModel(torch.nn.Module):
    method get_input_embeddings (line 76) | def get_input_embeddings(self):
    method forward (line 79) | def forward(self, inputs_embeds=None, attention_mask=None, **kwargs):
  function dummy_llm (line 91) | def dummy_llm():
  function test_llm_prepare_inputs (line 100) | def test_llm_prepare_inputs(dummy_llm):
  function test_llm_single_prompt (line 120) | def test_llm_single_prompt(dummy_llm):
  function test_llm_variable_lengths (line 126) | def test_llm_variable_lengths(dummy_llm):

FILE: test/llm/models/test_llm_judge.py
  function test_llm_judge (line 6) | def test_llm_judge():

FILE: test/llm/models/test_molecule_gpt.py
  function test_molecule_gpt (line 12) | def test_molecule_gpt() -> None:

FILE: test/llm/models/test_protein_mpnn.py
  function test_protein_mpnn (line 8) | def test_protein_mpnn():

FILE: test/llm/models/test_sentence_transformer.py
  function test_sentence_transformer (line 17) | def test_sentence_transformer(batch_size, pooling_strategy, device, verb...
  function test_mean_pooling (line 48) | def test_mean_pooling():
  function test_last_pooling (line 58) | def test_last_pooling(mask):

FILE: test/llm/models/test_txt2kg.py
  function test_init_local_lm_flag (line 16) | def test_init_local_lm_flag():
  function test_parse_n_check_triples_formats (line 22) | def test_parse_n_check_triples_formats():
  function test_chunk_text_simple_sentence (line 29) | def test_chunk_text_simple_sentence():
  class DummyLLM (line 36) | class DummyLLM:
    method __init__ (line 37) | def __init__(self):
    method inference (line 40) | def inference(self, *args, **kwargs):
  function test_local_lm_integration (line 44) | def test_local_lm_integration(monkeypatch):
  function test_add_doc_empty (line 60) | def test_add_doc_empty(monkeypatch):
  function test_add_doc_to_KG (line 67) | def test_add_doc_to_KG(monkeypatch):
  function test_merge_triples_deterministically_basic (line 83) | def test_merge_triples_deterministically_basic():
  function test_merge_triples_deterministically_unicode_and_nonstring (line 101) | def test_merge_triples_deterministically_unicode_and_nonstring():
  function test_merge_triples_deterministically_empty (line 119) | def test_merge_triples_deterministically_empty():
  function test_merge_triples_deterministically_singleton (line 127) | def test_merge_triples_deterministically_singleton():
  function test_chunk_to_triples_str_cloud (line 135) | def test_chunk_to_triples_str_cloud(monkeypatch):
  function dummy_multiproc_helper (line 177) | def dummy_multiproc_helper(
  function test_extract_relevant_triples_cloud (line 191) | def test_extract_relevant_triples_cloud(monkeypatch):
  function test_multiproc_helper_success (line 202) | def test_multiproc_helper_success(monkeypatch):
  function test_multiproc_helper_retry (line 233) | def test_multiproc_helper_retry(monkeypatch):
  function test_add_doc_empty_text (line 262) | def test_add_doc_empty_text():
  function test_add_doc_empty_text_with_QA_pair (line 275) | def test_add_doc_empty_text_with_QA_pair():
  function kg_cpu (line 287) | def kg_cpu():
  function test_add_doc_empty_text_cpu (line 292) | def test_add_doc_empty_text_cpu(kg_cpu):
  function test_add_doc_empty_text_with_QA_pair_cpu (line 300) | def test_add_doc_empty_text_with_QA_pair_cpu(kg_cpu):
  function test_add_doc_nonempty_text_placeholder (line 308) | def test_add_doc_nonempty_text_placeholder(kg_cpu, monkeypatch):

FILE: test/llm/models/test_vision_transformer.py
  function test_vision_transformer (line 10) | def test_vision_transformer(device):

FILE: test/llm/test_large_graph_indexer.py
  function featurize (line 30) | def featurize(s: str) -> int:
  function sample_triplets (line 34) | def sample_triplets(amount: int = 1) -> List[TripletLike]:
  function test_basic_collate (line 43) | def test_basic_collate():
  function test_large_graph_index (line 70) | def test_large_graph_index():
  function test_save_load (line 155) | def test_save_load(tmp_path):

FILE: test/llm/test_rag_loader.py
  class MockRAGFeatureStore (line 22) | class MockRAGFeatureStore:
    method __init__ (line 24) | def __init__(self):
    method retrieve_seed_nodes (line 28) | def retrieve_seed_nodes(self, query: Any, **kwargs):
    method config (line 35) | def config(self) -> Dict[str, Any]:
    method config (line 39) | def config(self, config: Dict[str, Any]):
    method retrieve_seed_edges (line 46) | def retrieve_seed_edges(self, query: Any, **kwargs):
    method load_subgraph (line 50) | def load_subgraph(self, sample):
  class MockRAGGraphStore (line 58) | class MockRAGGraphStore:
    method __init__ (line 60) | def __init__(self):
    method sample_subgraph (line 64) | def sample_subgraph(self, seed_nodes, seed_edges=None, **kwargs):
    method config (line 71) | def config(self) -> Dict[str, Any]:
    method config (line 75) | def config(self, config: Dict[str, Any]):
    method register_feature_store (line 82) | def register_feature_store(self, feature_store):
  class TestRAGQueryLoader (line 86) | class TestRAGQueryLoader:
    method setup_method (line 88) | def setup_method(self):
    method test_initialization_basic (line 97) | def test_initialization_basic(self):
    method test_initialization_with_all_params (line 108) | def test_initialization_with_all_params(self):
    method test_bad_config (line 126) | def test_bad_config(self):
    method test_config_propagation (line 133) | def test_config_propagation(self):
    method test_basic_query_without_vector_retriever (line 140) | def test_basic_query_without_vector_retriever(self):
    method test_query_with_vector_retriever (line 156) | def test_query_with_vector_retriever(self):
    method test_query_with_subgraph_filter (line 177) | def test_query_with_subgraph_filter(self):
  function test_rag_loader_integration (line 204) | def test_rag_loader_integration(tmp_path):

FILE: test/llm/utils/test_rag_backend_utils.py
  function test_preprocess_triplet (line 19) | def test_preprocess_triplet():
  function test_batch_knn (line 25) | def test_batch_knn():
  function create_mock_data (line 43) | def create_mock_data(num_nodes=3, num_edges=2):
  function test_empty_graph (line 67) | def test_empty_graph():
  function test_topk_zero (line 83) | def test_topk_zero():
  class MockSentenceTransformer (line 96) | class MockSentenceTransformer:
    method encode (line 97) | def encode(self, sentences, **kwargs):
  function create_mock_graph_and_triples (line 101) | def create_mock_graph_and_triples():
  function test_apply_retrieval_via_pcst_isolated_node (line 121) | def test_apply_retrieval_via_pcst_isolated_node():
  class MockEmbeddingModel (line 141) | class MockEmbeddingModel:
    method __init__ (line 143) | def __init__(self, embed_dim: int = 64):
    method __call__ (line 146) | def __call__(self, texts: List[str], **kwargs) -> torch.Tensor:
  class TestCreateGraphFromTriples (line 162) | class TestCreateGraphFromTriples:
    method setup_method (line 164) | def setup_method(self):
    method test_create_graph_basic_functionality (line 171) | def test_create_graph_basic_functionality(self):
    method test_create_graph_empty_triples (line 192) | def test_create_graph_empty_triples(self):
  class TestCreateRemoteBackendFromGraphData (line 205) | class TestCreateRemoteBackendFromGraphData:
    method setup_method (line 207) | def setup_method(self):
    method test_create_backend_data_load (line 219) | def test_create_backend_data_load(self):

FILE: test/llm/utils/test_rag_feature_store.py
  class TestKNNRAGFeatureStore (line 11) | class TestKNNRAGFeatureStore:
    method setup_method (line 13) | def setup_method(self):
    method test_bad_config (line 24) | def test_bad_config(self):
    method create_feature_store (line 30) | def create_feature_store(self):
    method test_retrieve_seed_nodes_single_query (line 43) | def test_retrieve_seed_nodes_single_query(self):
    method test_retrieve_seed_nodes_multiple_queries (line 78) | def test_retrieve_seed_nodes_multiple_queries(self):
    method test_load_subgraph_valid_sample (line 112) | def test_load_subgraph_valid_sample(self, induced):

FILE: test/llm/utils/test_rag_graph_store.py
  function setup_test_fixtures (line 11) | def setup_test_fixtures():
  function test_sample_subgraph_with_valid_tensor_input (line 18) | def test_sample_subgraph_with_valid_tensor_input():
  function test_bad_config (line 65) | def test_bad_config():

FILE: test/llm/utils/test_vectorrag.py
  function sample_documents (line 8) | def sample_documents():
  function sample_model (line 18) | def sample_model():
  function test_save_load (line 34) | def test_save_load(sample_documents, sample_model, tmp_path):
  function test_query (line 47) | def test_query(sample_documents, sample_model):

FILE: test/loader/test_cache.py
  function test_cached_loader (line 11) | def test_cached_loader(device):
  function test_cached_loader_transform (line 46) | def test_cached_loader_transform(device):

FILE: test/loader/test_cluster.py
  function test_cluster_gcn (line 11) | def test_cluster_gcn():
  function test_keep_inter_cluster_edges (line 111) | def test_keep_inter_cluster_edges():
  function test_cluster_gcn_correctness (line 156) | def test_cluster_gcn_correctness(get_dataset, sparse_format):

FILE: test/loader/test_dataloader.py
  function test_dataloader (line 28) | def test_dataloader(num_workers, device):
  function test_dataloader_on_disk_dataset (line 78) | def test_dataloader_on_disk_dataset(tmp_path, num_workers):
  function test_dataloader_fallbacks (line 94) | def test_dataloader_fallbacks():
  function test_multiprocessing (line 144) | def test_multiprocessing():
  function test_pin_memory (line 159) | def test_pin_memory():
  function test_heterogeneous_dataloader (line 171) | def test_heterogeneous_dataloader(num_workers):
  function test_index_dataloader (line 193) | def test_index_dataloader(num_workers):
  function test_edge_index_dataloader (line 216) | def test_edge_index_dataloader(num_workers, sort_order):
  function test_dataloader_tensor_frame (line 247) | def test_dataloader_tensor_frame():
  function test_dataloader_sparse (line 266) | def test_dataloader_sparse():

FILE: test/loader/test_dynamic_batch_sampler.py
  function test_dataloader_with_dynamic_batches (line 10) | def test_dataloader_with_dynamic_batches():

FILE: test/loader/test_graph_saint.py
  function test_graph_saint (line 13) | def test_graph_saint():

FILE: test/loader/test_hgt_loader.py
  function is_subset (line 16) | def is_subset(subedge_index, edge_index, src_idx, dst_idx):
  function test_hgt_loader (line 25) | def test_hgt_loader():
  function test_hgt_loader_on_cora (line 141) | def test_hgt_loader_on_cora(get_dataset):
  function test_hgt_loader_disconnected (line 192) | def test_hgt_loader_disconnected():

FILE: test/loader/test_ibmb_loader.py
  function test_ibmb_batch_loader (line 20) | def test_ibmb_batch_loader(use_sparse_tensor, kwargs):
  function test_ibmb_node_loader (line 49) | def test_ibmb_node_loader(use_sparse_tensor, kwargs):

FILE: test/loader/test_imbalanced_sampler.py
  function test_dataloader_with_imbalanced_sampler (line 15) | def test_dataloader_with_imbalanced_sampler():
  function test_in_memory_dataset_imbalanced_sampler (line 51) | def test_in_memory_dataset_imbalanced_sampler():
  function test_neighbor_loader_with_imbalanced_sampler (line 67) | def test_neighbor_loader_with_imbalanced_sampler():
  function test_hetero_neighbor_loader_with_imbalanced_sampler (line 98) | def test_hetero_neighbor_loader_with_imbalanced_sampler():

FILE: test/loader/test_link_neighbor_loader.py
  function unique_edge_pairs (line 16) | def unique_edge_pairs(edge_index):
  function test_homo_link_neighbor_loader_basic (line 25) | def test_homo_link_neighbor_loader_basic(device, subgraph_type,
  function test_hetero_link_neighbor_loader_basic (line 112) | def test_hetero_link_neighbor_loader_basic(subgraph_type, neg_sampling_r...
  function test_hetero_link_neighbor_loader_loop (line 157) | def test_hetero_link_neighbor_loader_loop(subgraph_type):
  function test_link_neighbor_loader_edge_label (line 187) | def test_link_neighbor_loader_edge_label():
  function test_temporal_homo_link_neighbor_loader (line 219) | def test_temporal_homo_link_neighbor_loader(batch_size):
  function test_temporal_hetero_link_neighbor_loader (line 250) | def test_temporal_hetero_link_neighbor_loader():
  function test_custom_hetero_link_neighbor_loader (line 296) | def test_custom_hetero_link_neighbor_loader():
  function test_homo_link_neighbor_loader_no_edges (line 363) | def test_homo_link_neighbor_loader_no_edges():
  function test_hetero_link_neighbor_loader_no_edges (line 379) | def test_hetero_link_neighbor_loader_no_edges():
  function test_homo_link_neighbor_loader_triplet (line 402) | def test_homo_link_neighbor_loader_triplet(disjoint, temporal, amount):
  function test_hetero_link_neighbor_loader_triplet (line 483) | def test_hetero_link_neighbor_loader_triplet(disjoint, temporal, amount):
  function test_link_neighbor_loader_mapping (line 583) | def test_link_neighbor_loader_mapping():

FILE: test/loader/test_mixin.py
  function test_cpu_affinity_neighbor_loader (line 19) | def test_cpu_affinity_neighbor_loader(loader_cores, spawn_context):
  function init_fn (line 41) | def init_fn(worker_id):
  function test_multithreading_neighbor_loader (line 49) | def test_multithreading_neighbor_loader(spawn_context):

FILE: test/loader/test_neighbor_loader.py
  function is_subset (line 56) | def is_subset(subedge_index, edge_index, src_idx, dst_idx):
  function test_homo_neighbor_loader_basic (line 69) | def test_homo_neighbor_loader_basic(
  function test_hetero_neighbor_loader_basic (line 148) | def test_hetero_neighbor_loader_basic(subgraph_type, dtype):
  function test_homo_neighbor_loader_on_karate (line 316) | def test_homo_neighbor_loader_on_karate(get_dataset, subgraph_type):
  function test_hetero_neighbor_loader_on_karate (line 362) | def test_hetero_neighbor_loader_on_karate(get_dataset, subgraph_type):
  function test_temporal_hetero_neighbor_loader_on_karate (line 408) | def test_temporal_hetero_neighbor_loader_on_karate(get_dataset):
  function test_custom_neighbor_loader (line 426) | def test_custom_neighbor_loader():
  function test_custom_hetero_neighbor_loader (line 471) | def test_custom_hetero_neighbor_loader():
  function test_custom_hetero_neighbor_loader_duplicate (line 552) | def test_custom_hetero_neighbor_loader_duplicate():
  function test_temporal_custom_neighbor_loader_on_karate (line 583) | def test_temporal_custom_neighbor_loader_on_karate(get_dataset):
  function test_pyg_lib_and_torch_sparse_homo_equality (line 644) | def test_pyg_lib_and_torch_sparse_homo_equality():
  function test_pyg_lib_and_torch_sparse_hetero_equality (line 665) | def test_pyg_lib_and_torch_sparse_hetero_equality():
  function test_memmap_neighbor_loader (line 716) | def test_memmap_neighbor_loader(tmp_path):
  function test_homo_neighbor_loader_sampled_info (line 737) | def test_homo_neighbor_loader_sampled_info():
  function test_hetero_neighbor_loader_sampled_info (line 758) | def test_hetero_neighbor_loader_sampled_info():
  function test_neighbor_loader_mapping (line 798) | def test_neighbor_loader_mapping():
  function test_weighted_homo_neighbor_loader (line 823) | def test_weighted_homo_neighbor_loader():
  function test_weighted_hetero_neighbor_loader (line 853) | def test_weighted_hetero_neighbor_loader():
  function test_edge_level_temporal_homo_neighbor_loader (line 887) | def test_edge_level_temporal_homo_neighbor_loader():
  function test_edge_level_temporal_hetero_neighbor_loader (line 914) | def test_edge_level_temporal_hetero_neighbor_loader():
  function test_neighbor_loader_with_tensor_frame (line 944) | def test_neighbor_loader_with_tensor_frame(device):
  function test_neighbor_loader_input_id (line 972) | def test_neighbor_loader_input_id():
  function test_temporal_neighbor_loader_single_link (line 1001) | def test_temporal_neighbor_loader_single_link():

FILE: test/loader/test_neighbor_sampler.py
  function test_neighbor_sampler_basic (line 12) | def test_neighbor_sampler_basic():
  function test_neighbor_sampler_invalid_kwargs (line 44) | def test_neighbor_sampler_invalid_kwargs():
  function test_neighbor_sampler_on_cora (line 52) | def test_neighbor_sampler_on_cora(get_dataset):

FILE: test/loader/test_prefetch.py
  function test_prefetch_loader (line 9) | def test_prefetch_loader(device):

FILE: test/loader/test_random_node_loader.py
  function test_random_node_loader (line 8) | def test_random_node_loader():
  function test_heterogeneous_random_node_loader (line 27) | def test_heterogeneous_random_node_loader():

FILE: test/loader/test_shadow.py
  function test_shadow_k_hop_sampler (line 10) | def test_shadow_k_hop_sampler():

FILE: test/loader/test_temporal_dataloader.py
  function test_temporal_dataloader (line 9) | def test_temporal_dataloader(batch_size, drop_last):

FILE: test/loader/test_utils.py
  function test_index_select (line 7) | def test_index_select():
  function test_index_select_out_of_range (line 14) | def test_index_select_out_of_range():

FILE: test/loader/test_zip_loader.py
  function test_zip_loader (line 11) | def test_zip_loader(filter_per_worker):

FILE: test/metrics/test_link_pred_metric.py
  function test_precision (line 28) | def test_precision(num_src_nodes, num_dst_nodes, num_edges, batch_size, k):
  function test_recall (line 70) | def test_recall():
  function test_f1 (line 108) | def test_f1():
  function test_map (line 124) | def test_map():
  function test_ndcg (line 140) | def test_ndcg():
  function test_mrr (line 177) | def test_mrr():
  function test_hit_ratio (line 194) | def test_hit_ratio():
  function test_coverage (line 211) | def test_coverage():
  function test_diversity (line 234) | def test_diversity():
  function test_personalization (line 249) | def test_personalization(device):
  function test_average_popularity (line 270) | def test_average_popularity():
  function test_metric_collection (line 287) | def test_metric_collection(num_src_nodes, num_dst_nodes, num_edges):
  function test_empty_ground_truth (line 331) | def test_empty_ground_truth():

FILE: test/nn/aggr/test_aggr_utils.py
  function test_multihead_attention_block (line 13) | def test_multihead_attention_block(device: torch.device):
  function test_multihead_attention_block_dropout (line 34) | def test_multihead_attention_block_dropout(device: torch.device):
  function test_set_attention_block (line 41) | def test_set_attention_block():
  function test_induced_set_attention_block (line 57) | def test_induced_set_attention_block():
  function test_pooling_by_multihead_attention (line 72) | def test_pooling_by_multihead_attention():

FILE: test/nn/aggr/test_attention.py
  function test_attentional_aggregation (line 10) | def test_attentional_aggregation(dim):

FILE: test/nn/aggr/test_basic.py
  function test_validate (line 18) | def test_validate():
  function test_basic_aggregation (line 44) | def test_basic_aggregation(Aggregation):
  function test_var_aggregation (line 66) | def test_var_aggregation():
  function test_empty_std_aggregation (line 78) | def test_empty_std_aggregation():
  function test_learnable_aggregation (line 94) | def test_learnable_aggregation(Aggregation, learn):
  function test_learnable_channels_aggregation (line 122) | def test_learnable_channels_aggregation(Aggregation):

FILE: test/nn/aggr/test_deep_sets.py
  function test_deep_sets_aggregation (line 6) | def test_deep_sets_aggregation():

FILE: test/nn/aggr/test_equilibrium.py
  function test_equilibrium (line 9) | def test_equilibrium(iter, alpha):
  function test_equilibrium_batch (line 28) | def test_equilibrium_batch(iter, alpha):

FILE: test/nn/aggr/test_fused.py
  function test_fused_aggregation (line 18) | def test_fused_aggregation(aggrs):
  function test_empty_fused_std_aggregation (line 45) | def test_empty_fused_std_aggregation():
  function naive_aggr (line 75) | def naive_aggr(x, index, dim_size):
  function fused_aggr (line 79) | def fused_aggr(x, index, dim_size):

FILE: test/nn/aggr/test_gmt.py
  function test_graph_multiset_transformer (line 7) | def test_graph_multiset_transformer():

FILE: test/nn/aggr/test_gru.py
  function test_gru_aggregation (line 6) | def test_gru_aggregation():

FILE: test/nn/aggr/test_lcm.py
  function test_lcm_aggregation_with_project (line 10) | def test_lcm_aggregation_with_project():
  function test_lcm_aggregation_without_project (line 21) | def test_lcm_aggregation_without_project():
  function test_lcm_aggregation_error_handling (line 32) | def test_lcm_aggregation_error_handling():

FILE: test/nn/aggr/test_lstm.py
  function test_lstm_aggregation (line 7) | def test_lstm_aggregation():

FILE: test/nn/aggr/test_mlp_aggr.py
  function test_mlp_aggregation (line 6) | def test_mlp_aggregation():

FILE: test/nn/aggr/test_multi.py
  function test_multi_aggr (line 21) | def test_multi_aggr(multi_aggr_tuple):

FILE: test/nn/aggr/test_patch_transformer.py
  function test_patch_transformer_aggregation (line 8) | def test_patch_transformer_aggregation(device: torch.device) -> None:

FILE: test/nn/aggr/test_quantile.py
  function test_quantile_aggregation (line 12) | def test_quantile_aggregation(q, interpolation, dim, dim_size, fill_value):
  function test_median_aggregation (line 41) | def test_median_aggregation():
  function test_quantile_aggregation_multi (line 80) | def test_quantile_aggregation_multi():
  function test_quantile_aggregation_validate (line 103) | def test_quantile_aggregation_validate():

FILE: test/nn/aggr/test_scaler.py
  function test_degree_scaler_aggregation (line 8) | def test_degree_scaler_aggregation(train_norm):

FILE: test/nn/aggr/test_set2set.py
  function test_set2set (line 6) | def test_set2set():

FILE: test/nn/aggr/test_set_transformer.py
  function test_set_transformer_aggregation (line 10) | def test_set_transformer_aggregation():

FILE: test/nn/aggr/test_sort.py
  function test_sort_aggregation (line 6) | def test_sort_aggregation():
  function test_sort_aggregation_smaller_than_k (line 30) | def test_sort_aggregation_smaller_than_k():
  function test_sort_aggregation_dim_size (line 56) | def test_sort_aggregation_dim_size():

FILE: test/nn/aggr/test_variance_preserving.py
  function test_variance_preserving (line 12) | def test_variance_preserving():

FILE: test/nn/attention/test_performer_attention.py
  function test_performer_attention (line 6) | def test_performer_attention():

FILE: test/nn/attention/test_polynormer_attention.py
  function test_performer_attention (line 6) | def test_performer_attention():

FILE: test/nn/attention/test_qformer.py
  function test_qformer (line 6) | def test_qformer():

FILE: test/nn/conv/cugraph/test_cugraph_gat_conv.py
  function test_gat_conv_equality (line 17) | def test_gat_conv_equality(bias, bipartite, concat, edge_attr, heads,

FILE: test/nn/conv/cugraph/test_cugraph_rgcn_conv.py
  function test_rgcn_conv_equality (line 18) | def test_rgcn_conv_equality(aggr, bias, bipartite, max_num_neighbors,

FILE: test/nn/conv/cugraph/test_cugraph_sage_conv.py
  function test_sage_conv_equality (line 17) | def test_sage_conv_equality(aggr, bias, bipartite, max_num_neighbors,

FILE: test/nn/conv/test_agnn_conv.py
  function test_agnn_conv (line 12) | def test_agnn_conv(requires_grad):

FILE: test/nn/conv/test_antisymmetric_conv.py
  function test_antisymmetric_conv (line 9) | def test_antisymmetric_conv():

FILE: test/nn/conv/test_appnp.py
  function test_appnp (line 10) | def test_appnp():
  function test_appnp_dropout (line 45) | def test_appnp_dropout():

FILE: test/nn/conv/test_arma_conv.py
  function test_arma_conv (line 11) | def test_arma_conv():
  function test_lazy_arma_conv (line 35) | def test_lazy_arma_conv():

FILE: test/nn/conv/test_cg_conv.py
  function test_cg_conv (line 12) | def test_cg_conv(batch_norm):
  function test_cg_conv_with_edge_features (line 55) | def test_cg_conv_with_edge_features():

FILE: test/nn/conv/test_cheb_conv.py
  function test_cheb_conv (line 8) | def test_cheb_conv():
  function test_cheb_conv_batch (line 50) | def test_cheb_conv_batch():

FILE: test/nn/conv/test_cluster_gcn_conv.py
  function test_cluster_gcn_conv (line 10) | def test_cluster_gcn_conv():

FILE: test/nn/conv/test_create_gnn.py
  class GCNConv (line 7) | class GCNConv(MessagePassing):
    method __init__ (line 8) | def __init__(self, in_channels, out_channels):
    method forward (line 12) | def forward(self, x, edge_index):
    method message (line 24) | def message(self, x_j, norm):
    method update (line 27) | def update(self, aggr_out):
  function test_create_gnn (line 31) | def test_create_gnn():

FILE: test/nn/conv/test_dir_gnn_conv.py
  function test_dir_gnn_conv (line 6) | def test_dir_gnn_conv():
  function test_static_dir_gnn_conv (line 17) | def test_static_dir_gnn_conv():

FILE: test/nn/conv/test_dna_conv.py
  function test_dna_conv (line 13) | def test_dna_conv(channels, num_layers):
  function test_dna_conv_sparse_tensor (line 48) | def test_dna_conv_sparse_tensor(channels, num_layers):

FILE: test/nn/conv/test_edge_conv.py
  function test_edge_conv_conv (line 13) | def test_edge_conv_conv():
  function test_dynamic_edge_conv (line 66) | def test_dynamic_edge_conv():

FILE: test/nn/conv/test_eg_conv.py
  function test_eg_conv_with_error (line 11) | def test_eg_conv_with_error():
  function test_eg_conv (line 24) | def test_eg_conv(aggregators, add_self_loops):
  function test_eg_conv_with_sparse_input_feature (line 63) | def test_eg_conv_with_sparse_input_feature():

FILE: test/nn/conv/test_fa_conv.py
  function test_fa_conv (line 13) | def test_fa_conv():

FILE: test/nn/conv/test_feast_conv.py
  function test_feast_conv (line 10) | def test_feast_conv():

FILE: test/nn/conv/test_film_conv.py
  function test_film_conv (line 9) | def test_film_conv():

FILE: test/nn/conv/test_fused_gat_conv.py
  function test_to_graph_format (line 7) | def test_to_graph_format() -> None:
  function test_fused_gat_conv (line 26) | def test_fused_gat_conv() -> None:

FILE: test/nn/conv/test_gat_conv.py
  function test_gat_conv (line 15) | def test_gat_conv(residual):
  function test_gat_conv_with_edge_attr (line 157) | def test_gat_conv_with_edge_attr():
  function test_gat_conv_empty_edge_index (line 195) | def test_gat_conv_empty_edge_index(device):

FILE: test/nn/conv/test_gated_graph_conv.py
  function test_gated_graph_conv (line 10) | def test_gated_graph_conv():

FILE: test/nn/conv/test_gatv2_conv.py
  function test_gatv2_conv (line 15) | def test_gatv2_conv(residual):
  function test_gatv2_conv_with_edge_attr (line 143) | def test_gatv2_conv_with_edge_attr():

FILE: test/nn/conv/test_gcn2_conv.py
  function test_gcn2_conv (line 10) | def test_gcn2_conv():

FILE: test/nn/conv/test_gcn_conv.py
  function test_gcn_conv (line 12) | def test_gcn_conv():
  function test_gcn_conv_with_decomposed_layers (line 57) | def test_gcn_conv_with_decomposed_layers():
  function test_gcn_conv_with_sparse_input_feature (line 81) | def test_gcn_conv_with_sparse_input_feature():
  function test_static_gcn_conv (line 93) | def test_static_gcn_conv():
  function test_gcn_conv_error (line 102) | def test_gcn_conv_error():
  function test_gcn_conv_flow (line 107) | def test_gcn_conv_flow():
  function test_gcn_norm_gradient (line 120) | def test_gcn_norm_gradient(requires_grad, layout):

FILE: test/nn/conv/test_gen_conv.py
  function test_gen_conv (line 16) | def test_gen_conv(aggr):

FILE: test/nn/conv/test_general_conv.py
  function test_general_conv (line 19) | def test_general_conv(kwargs):

FILE: test/nn/conv/test_gin_conv.py
  function test_gin_conv (line 13) | def test_gin_conv():
  function test_gine_conv (line 71) | def test_gine_conv():
  function test_gine_conv_edge_dim (line 126) | def test_gine_conv_edge_dim():
  function test_static_gin_conv (line 142) | def test_static_gin_conv():
  function test_static_gine_conv (line 152) | def test_static_gine_conv():

FILE: test/nn/conv/test_gmm_conv.py
  function test_gmm_conv (line 12) | def test_gmm_conv(separate_gaussians):
  function test_lazy_gmm_conv (line 77) | def test_lazy_gmm_conv(separate_gaussians):

FILE: test/nn/conv/test_gps_conv.py
  function test_gps_conv (line 12) | def test_gps_conv(norm, attn_type):

FILE: test/nn/conv/test_graph_conv.py
  function test_graph_conv (line 11) | def test_graph_conv():
  class EdgeGraphConv (line 132) | class EdgeGraphConv(GraphConv):
    method message (line 133) | def message(self, x_j, edge_weight):
  function test_inheritance (line 137) | def test_inheritance():

FILE: test/nn/conv/test_gravnet_conv.py
  function test_gravnet_conv (line 8) | def test_gravnet_conv():

FILE: test/nn/conv/test_han_conv.py
  function test_han_conv (line 9) | def test_han_conv():
  function test_han_conv_lazy (line 71) | def test_han_conv_lazy():
  function test_han_conv_empty_tensor (line 117) | def test_han_conv_empty_tensor():

FILE: test/nn/conv/test_heat_conv.py
  function test_heat_conv (line 11) | def test_heat_conv(concat):

FILE: test/nn/conv/test_hetero_conv.py
  function test_hetero_conv (line 27) | def test_hetero_conv(aggr):
  function test_gcn2_hetero_conv (line 74) | def test_gcn2_hetero_conv():
  class CustomConv (line 99) | class CustomConv(MessagePassing):
    method __init__ (line 100) | def __init__(self, out_channels):
    method forward (line 104) | def forward(self, x, edge_index, y, z):
    method message (line 107) | def message(self, x_j, y_j, z_j):
  function test_hetero_conv_with_custom_conv (line 111) | def test_hetero_conv_with_custom_conv():
  class MessagePassingLoops (line 136) | class MessagePassingLoops(MessagePassing):
    method __init__ (line 137) | def __init__(self):
  function test_hetero_conv_self_loop_error (line 142) | def test_hetero_conv_self_loop_error():
  function test_hetero_conv_with_dot_syntax_node_types (line 148) | def test_hetero_conv_with_dot_syntax_node_types():
  function test_compile_hetero_conv_graph_breaks (line 184) | def test_compile_hetero_conv_graph_breaks(device):
  function gen_args (line 221) | def gen_args():
  class HeteroGNN (line 225) | class HeteroGNN(torch.nn.Module):
    method __init__ (line 226) | def __init__(self, channels: int = 32, num_layers: int = 2):
    method forward (line 253) | def forward(self, x_dict, edge_index_dict):

FILE: test/nn/conv/test_hgt_conv.py
  function test_hgt_conv_same_dimensions (line 12) | def test_hgt_conv_same_dimensions():
  function test_hgt_conv_different_dimensions (line 62) | def test_hgt_conv_different_dimensions():
  function test_hgt_conv_lazy (line 112) | def test_hgt_conv_lazy():
  function test_hgt_conv_out_of_place (line 159) | def test_hgt_conv_out_of_place():
  function test_hgt_conv_missing_dst_node_type (line 181) | def test_hgt_conv_missing_dst_node_type():
  function test_hgt_conv_missing_input_node_type (line 199) | def test_hgt_conv_missing_input_node_type():
  function test_hgt_conv_missing_edge_type (line 217) | def test_hgt_conv_missing_edge_type():

FILE: test/nn/conv/test_hypergraph_conv.py
  function test_hypergraph_conv_with_more_nodes_than_edges (line 6) | def test_hypergraph_conv_with_more_nodes_than_edges():
  function test_hypergraph_conv_with_more_edges_than_nodes (line 35) | def test_hypergraph_conv_with_more_edges_than_nodes():

FILE: test/nn/conv/test_le_conv.py
  function test_le_conv (line 10) | def test_le_conv():

FILE: test/nn/conv/test_lg_conv.py
  function test_lg_conv (line 10) | def test_lg_conv():

FILE: test/nn/conv/test_meshcnn_conv.py
  function test_meshcnn_conv (line 15) | def test_meshcnn_conv(in_channels: int, out_channels: int):

FILE: test/nn/conv/test_message_passing.py
  class MyConv (line 28) | class MyConv(MessagePassing):
    method __init__ (line 29) | def __init__(self, in_channels: Union[int, Tuple[int, int]],
    method forward (line 39) | def forward(
    method message (line 61) | def message(self, x_j: Tensor, edge_weight: Optional[Tensor]) -> Tensor:
    method message_and_aggregate (line 64) | def message_and_aggregate(self, adj_t: Adj, x: OptPairTensor) -> Tensor:
  class MyConvWithSelfLoops (line 68) | class MyConvWithSelfLoops(MessagePassing):
    method __init__ (line 69) | def __init__(self, aggr: str = 'add'):
    method forward (line 72) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  function test_my_conv_basic (line 79) | def test_my_conv_basic():
  function test_my_conv_save (line 132) | def test_my_conv_save(tmp_path):
  function test_my_conv_edge_index (line 148) | def test_my_conv_edge_index():
  class MyCommentedConv (line 159) | class MyCommentedConv(MessagePassing):
    method __init__ (line 161) | def __init__(self) -> None:
    method forward (line 164) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  function test_my_commented_conv (line 169) | def test_my_commented_conv():
  class MyKwargsConv (line 182) | class MyKwargsConv(MessagePassing):
    method __init__ (line 183) | def __init__(self) -> None:
    method forward (line 186) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  function test_my_kwargs_conv (line 190) | def test_my_kwargs_conv():
  function test_my_conv_out_of_bounds (line 201) | def test_my_conv_out_of_bounds():
  function test_my_conv_jit (line 216) | def test_my_conv_jit():
  function test_my_conv_jit_save (line 257) | def test_my_conv_jit_save(tmp_path):
  function test_my_conv_aggr (line 267) | def test_my_conv_aggr(aggr):
  function test_my_static_graph_conv (line 277) | def test_my_static_graph_conv():
  class MyMultipleAggrConv (line 306) | class MyMultipleAggrConv(MessagePassing):
    method __init__ (line 307) | def __init__(self, **kwargs):
    method forward (line 310) | def forward(self, x: Tensor, edge_index: Adj) -> Tensor:
  function test_my_multiple_aggr_conv (line 319) | def test_my_multiple_aggr_conv(multi_aggr_tuple):
  function test_my_multiple_aggr_conv_jit (line 338) | def test_my_multiple_aggr_conv_jit():
  function test_copy (line 353) | def test_copy():
  class MyEdgeConv (line 371) | class MyEdgeConv(MessagePassing):
    method __init__ (line 372) | def __init__(self):
    method forward (line 375) | def forward(self, x: Tensor, edge_index: Adj) -> Tensor:
    method edge_update (line 383) | def edge_update(self, x_j: Tensor, x_i: Tensor) -> Tensor:
    method message (line 386) | def message(self, edge_attr: Tensor) -> Tensor:
  function test_my_edge_conv (line 390) | def test_my_edge_conv():
  function test_my_edge_conv_jit (line 409) | def test_my_edge_conv_jit():
  function test_message_passing_hooks (line 428) | def test_message_passing_hooks():
  function test_modified_message_passing_hook (line 517) | def test_modified_message_passing_hook():
  class MyDefaultArgConv (line 539) | class MyDefaultArgConv(MessagePassing):
    method __init__ (line 540) | def __init__(self):
    method forward (line 544) | def forward(self, x: Tensor, edge_index: Adj) -> Tensor:
    method message (line 547) | def message(self, x_j, zeros: bool = True):
  function test_my_default_arg_conv (line 551) | def test_my_default_arg_conv():
  class MyMultipleOutputConv (line 569) | class MyMultipleOutputConv(MessagePassing):
    method __init__ (line 570) | def __init__(self):
    method forward (line 573) | def forward(self, x: Tensor, edge_index: Tensor) -> Tuple[Tensor, Tens...
    method message (line 577) | def message(self, x_j: Tensor) -> Tuple[Tensor, Tensor]:
    method aggregate (line 580) | def aggregate(self, inputs: Tuple[Tensor, Tensor],
    method update (line 585) | def update(self, inputs: Tuple[Tensor, Tensor]) -> Tuple[Tensor, Tensor]:
  function test_tuple_output (line 589) | def test_tuple_output():
  function test_tuple_output_jit (line 599) | def test_tuple_output_jit():
  class MyExplainConv (line 615) | class MyExplainConv(MessagePassing):
    method __init__ (line 616) | def __init__(self):
    method forward (line 619) | def forward(self, x: Tensor, edge_index: Adj) -> Tensor:
  function test_explain_message (line 623) | def test_explain_message():
  class MyAggregatorConv (line 652) | class MyAggregatorConv(MessagePassing):
    method __init__ (line 653) | def __init__(self, **kwargs):
    method forward (line 656) | def forward(self, x: Tensor, edge_index: Adj) -> Tensor:
  function test_message_passing_with_aggr_module (line 669) | def test_message_passing_with_aggr_module(aggr_module):
  function test_message_passing_int32_edge_index (line 686) | def test_message_passing_int32_edge_index():
  function test_traceable_my_conv_with_self_loops (line 706) | def test_traceable_my_conv_with_self_loops(num_nodes):
  function test_pickle (line 733) | def test_pickle(tmp_path):
  class MyOptionalEdgeAttrConv (line 744) | class MyOptionalEdgeAttrConv(MessagePassing):
    method __init__ (line 745) | def __init__(self):
    method forward (line 748) | def forward(self, x, edge_index, edge_attr=None):
    method message (line 751) | def message(self, x_j, edge_attr=None):
  function test_my_optional_edge_attr_conv (line 755) | def test_my_optional_edge_attr_conv():

FILE: test/nn/conv/test_mf_conv.py
  function test_mf_conv (line 9) | def test_mf_conv():

FILE: test/nn/conv/test_mixhop_conv.py
  function test_mixhop_conv (line 10) | def test_mixhop_conv():

FILE: test/nn/conv/test_nn_conv.py
  function test_nn_conv (line 14) | def test_nn_conv(device):

FILE: test/nn/conv/test_pan_conv.py
  function test_pan_conv (line 11) | def test_pan_conv():

FILE: test/nn/conv/test_pdn_conv.py
  function test_pdn_conv (line 9) | def test_pdn_conv():
  function test_pdn_conv_with_sparse_node_input_feature (line 32) | def test_pdn_conv_with_sparse_node_input_feature():

FILE: test/nn/conv/test_pna_conv.py
  function test_pna_conv (line 18) | def test_pna_conv(divide_input):
  function test_pna_conv_get_degree_histogram_neighbor_loader (line 44) | def test_pna_conv_get_degree_histogram_neighbor_loader():
  function test_pna_conv_get_degree_histogram_dataloader (line 58) | def test_pna_conv_get_degree_histogram_dataloader():

FILE: test/nn/conv/test_point_conv.py
  function test_point_net_conv (line 13) | def test_point_net_conv():

FILE: test/nn/conv/test_point_gnn_conv.py
  function test_point_gnn_conv (line 10) | def test_point_gnn_conv():

FILE: test/nn/conv/test_point_transformer_conv.py
  function test_point_transformer_conv (line 11) | def test_point_transformer_conv():

FILE: test/nn/conv/test_ppf_conv.py
  function test_ppf_conv (line 14) | def test_ppf_conv():

FILE: test/nn/conv/test_res_gated_graph_conv.py
  function test_res_gated_graph_conv (line 12) | def test_res_gated_graph_conv(edge_dim):

FILE: test/nn/conv/test_rgat_conv.py
  function test_rgat_conv (line 27) | def test_rgat_conv(mod, attention_mechanism, attention_mode, concat, edg...
  function test_rgat_conv_jit (line 101) | def test_rgat_conv_jit():

FILE: test/nn/conv/test_rgcn_conv.py
  function test_rgcn_conv_equality (line 15) | def test_rgcn_conv_equality(conf, device):
  function test_rgcn_conv_basic (line 52) | def test_rgcn_conv_basic(cls, conf, device):

FILE: test/nn/conv/test_sage_conv.py
  function test_sage_conv (line 18) | def test_sage_conv(project, aggr):
  function test_lazy_sage_conv (line 60) | def test_lazy_sage_conv(project):
  function test_lstm_aggr_sage_conv (line 75) | def test_lstm_aggr_sage_conv():
  function test_mlp_sage_conv (line 90) | def test_mlp_sage_conv():
  function test_multi_aggr_sage_conv (line 116) | def test_multi_aggr_sage_conv(aggr_kwargs):
  function test_compile_multi_aggr_sage_conv (line 130) | def test_compile_multi_aggr_sage_conv(device):

FILE: test/nn/conv/test_sg_conv.py
  function test_sg_conv (line 10) | def test_sg_conv():

FILE: test/nn/conv/test_signed_conv.py
  function test_signed_conv (line 10) | def test_signed_conv():

FILE: test/nn/conv/test_simple_conv.py
  function test_simple_conv (line 17) | def test_simple_conv(aggr, combine_root):

FILE: test/nn/conv/test_spline_conv.py
  function test_spline_conv (line 12) | def test_spline_conv():
  function test_lazy_spline_conv (line 68) | def test_lazy_spline_conv():

FILE: test/nn/conv/test_ssg_conv.py
  function test_ssg_conv (line 10) | def test_ssg_conv():

FILE: test/nn/conv/test_static_graph.py
  class MyConv (line 7) | class MyConv(MessagePassing):
    method forward (line 8) | def forward(self, x, edge_index):
  function test_static_graph (line 12) | def test_static_graph():

FILE: test/nn/conv/test_supergat_conv.py
  function test_supergat_conv (line 10) | def test_supergat_conv(att_type):

FILE: test/nn/conv/test_tag_conv.py
  function test_tag_conv (line 10) | def test_tag_conv():
  function test_static_tag_conv (line 44) | def test_static_tag_conv():

FILE: test/nn/conv/test_transformer_conv.py
  function test_transformer_conv (line 16) | def test_transformer_conv(edge_dim, concat):

FILE: test/nn/conv/test_wl_conv.py
  function test_wl_conv (line 9) | def test_wl_conv():

FILE: test/nn/conv/test_wl_conv_continuous.py
  function test_wl_conv (line 9) | def test_wl_conv():

FILE: test/nn/conv/test_x_conv.py
  function test_x_conv (line 8) | def test_x_conv():

FILE: test/nn/conv/utils/test_gnn_cheatsheet.py
  function test_gnn_cheatsheet (line 4) | def test_gnn_cheatsheet():

FILE: test/nn/dense/test_dense_gat_conv.py
  function test_dense_gat_conv (line 10) | def test_dense_gat_conv(heads, concat):
  function test_dense_gat_conv_with_broadcasting (line 53) | def test_dense_gat_conv_with_broadcasting():

FILE: test/nn/dense/test_dense_gcn_conv.py
  function test_dense_gcn_conv (line 7) | def test_dense_gcn_conv():
  function test_dense_gcn_conv_with_broadcasting (line 51) | def test_dense_gcn_conv_with_broadcasting():

FILE: test/nn/dense/test_dense_gin_conv.py
  function test_dense_gin_conv (line 10) | def test_dense_gin_conv():
  function test_dense_gin_conv_with_broadcasting (line 57) | def test_dense_gin_conv_with_broadcasting():

FILE: test/nn/dense/test_dense_graph_conv.py
  function test_dense_graph_conv (line 10) | def test_dense_graph_conv(aggr):
  function test_dense_graph_conv_batch (line 41) | def test_dense_graph_conv_batch(aggr):
  function test_dense_graph_conv_with_broadcasting (line 81) | def test_dense_graph_conv_with_broadcasting(aggr):

FILE: test/nn/dense/test_dense_sage_conv.py
  function test_dense_sage_conv (line 7) | def test_dense_sage_conv():
  function test_dense_sage_conv_with_broadcasting (line 51) | def test_dense_sage_conv_with_broadcasting():

FILE: test/nn/dense/test_diff_pool.py
  function test_dense_diff_pool (line 10) | def test_dense_diff_pool():

FILE: test/nn/dense/test_dmon_pool.py
  function test_dmon_pooling (line 8) | def test_dmon_pooling():

FILE: test/nn/dense/test_linear.py
  function test_linear (line 25) | def test_linear(weight, bias, device):
  function test_lazy_linear (line 36) | def test_lazy_linear(weight, bias, device):
  function test_load_lazy_linear (line 57) | def test_load_lazy_linear(dim1, dim2, bias, device):
  function test_identical_linear_default_initialization (line 89) | def test_identical_linear_default_initialization(lazy):
  function test_copy_unintialized_parameter (line 104) | def test_copy_unintialized_parameter():
  function test_copy_linear (line 111) | def test_copy_linear(lazy, device):
  function test_hetero_linear_basic (line 135) | def test_hetero_linear_basic(device):
  function test_hetero_linear_initializer (line 149) | def test_hetero_linear_initializer():
  function test_hetero_linear_amp (line 162) | def test_hetero_linear_amp(device, use_segment_matmul):
  function test_lazy_hetero_linear (line 180) | def test_lazy_hetero_linear(device):
  function test_hetero_dict_linear (line 193) | def test_hetero_dict_linear(bias, device):
  function test_hetero_dict_linear_jit (line 223) | def test_hetero_dict_linear_jit():
  function test_lazy_hetero_dict_linear (line 236) | def test_lazy_hetero_dict_linear(device):
  function test_hetero_linear_sort (line 257) | def test_hetero_linear_sort(type_vec, device):
  function get_xs (line 287) | def get_xs(mean: float, std: float, num_types: int,
  function sequential (line 299) | def sequential(xs: List[Tensor], weights: List[Tensor]) -> List[Tensor]:
  function nested (line 302) | def nested(xs: List[Tensor], weights: List[Tensor]) -> List[Tensor]:
  function grouped (line 307) | def grouped(x: Tensor, ptr: Tensor, weight: Tensor) -> Tensor:
  function padded (line 310) | def padded(x: Tensor, weight: Tensor) -> Tensor:
  function dgl_mm (line 313) | def dgl_mm(x: Tensor, count: Tensor, weight: Tensor) -> Tensor:

FILE: test/nn/dense/test_mincut_pool.py
  function test_dense_mincut_pool (line 9) | def test_dense_mincut_pool():

FILE: test/nn/functional/test_bro.py
  function test_bro (line 6) | def test_bro():

FILE: test/nn/functional/test_gini.py
  function test_gini (line 6) | def test_gini():

FILE: test/nn/kge/test_complex.py
  function test_complex_scoring (line 6) | def test_complex_scoring():
  function test_complex (line 40) | def test_complex():

FILE: test/nn/kge/test_distmult.py
  function test_distmult (line 6) | def test_distmult():

FILE: test/nn/kge/test_rotate.py
  function test_rotate (line 6) | def test_rotate():

FILE: test/nn/kge/test_transe.py
  function test_transe (line 6) | def test_transe():

FILE: test/nn/models/test_attentive_fp.py
  function test_attentive_fp (line 7) | def test_attentive_fp():

FILE: test/nn/models/test_attract_repel.py
  function test_ar_link_predictor (line 6) | def test_ar_link_predictor():
  function test_ar_link_predictor_with_custom_ratio (line 31) | def test_ar_link_predictor_with_custom_ratio():

FILE: test/nn/models/test_autoencoder.py
  function test_gae (line 10) | def test_gae():
  function test_vgae (line 52) | def test_vgae():
  function test_arga (line 68) | def test_arga():
  function test_argva (line 85) | def test_argva():
  function test_init (line 100) | def test_init():

FILE: test/nn/models/test_basic_gnn.py
  function test_gcn (line 36) | def test_gcn(out_dim, dropout, act, norm, jk):
  function test_graph_sage (line 52) | def test_graph_sage(out_dim, dropout, act, norm, jk):
  function test_gin (line 68) | def test_gin(out_dim, dropout, act, norm, jk):
  function test_gat (line 84) | def test_gat(out_dim, dropout, act, norm, jk):
  function test_pna (line 106) | def test_pna(out_dim, dropout, act, norm, jk):
  function test_edge_cnn (line 128) | def test_edge_cnn(out_dim, dropout, act, norm, jk):
  function test_jit (line 139) | def test_jit():
  function test_one_layer_gnn (line 151) | def test_one_layer_gnn(out_dim, jk):
  function test_batch (line 166) | def test_batch(norm):
  function test_basic_gnn_inference (line 185) | def test_basic_gnn_inference(get_dataset, jk):
  function test_compile_basic (line 208) | def test_compile_basic(device):
  function test_packaging (line 220) | def test_packaging():
  function test_onnx (line 254) | def test_onnx(tmp_path: str) -> None:
  function test_trim_to_layer (line 315) | def test_trim_to_layer():
  function test_compile_graph_breaks (line 350) | def test_compile_graph_breaks(Model, device):
  function test_basic_gnn_cache (line 378) | def test_basic_gnn_cache():
  function gen_args (line 416) | def gen_args():

FILE: test/nn/models/test_correct_and_smooth.py
  function test_correct_and_smooth (line 10) | def test_correct_and_smooth():

FILE: test/nn/models/test_deep_graph_infomax.py
  function test_infomax (line 8) | def test_infomax(device):
  function test_infomax_predefined_model (line 47) | def test_infomax_predefined_model(device):

FILE: test/nn/models/test_deepgcn.py
  function test_deepgcn (line 13) | def test_deepgcn(block_tuple, ckpt_grad):

FILE: test/nn/models/test_dimenet.py
  function test_dimenet_modules (line 14) | def test_dimenet_modules():
  function test_dimenet (line 32) | def test_dimenet(Model):

FILE: test/nn/models/test_gnnff.py
  function test_gnnff (line 9) | def test_gnnff():

FILE: test/nn/models/test_gpse.py
  function test_gpse_training (line 16) | def test_gpse_training():
  function test_gpse_from_pretrained (line 49) | def test_gpse_from_pretrained():
  function test_gpse_node_encoder (line 65) | def test_gpse_node_encoder(expand_x):

FILE: test/nn/models/test_graph_mixer.py
  function test_node_encoder (line 10) | def test_node_encoder():
  function test_link_encoder (line 34) | def test_link_encoder():
  function test_latest_k_edge_attr (line 58) | def test_latest_k_edge_attr():

FILE: test/nn/models/test_graph_unet.py
  function test_graph_unet (line 8) | def test_graph_unet():

FILE: test/nn/models/test_jumping_knowledge.py
  function test_jumping_knowledge (line 7) | def test_jumping_knowledge():
  function test_hetero_jumping_knowledge (line 43) | def test_hetero_jumping_knowledge():

FILE: test/nn/models/test_label_prop.py
  function test_label_prop (line 8) | def test_label_prop():

FILE: test/nn/models/test_lightgcn.py
  function test_lightgcn_ranking (line 11) | def test_lightgcn_ranking(embedding_dim, with_edge_weight, lambda_reg, a...
  function test_lightgcn_link_prediction (line 47) | def test_lightgcn_link_prediction(embedding_dim, with_edge_weight, alpha):

FILE: test/nn/models/test_linkx.py
  function test_linkx (line 11) | def test_linkx(num_edge_layers):

FILE: test/nn/models/test_lpformer.py
  function test_lpformer (line 9) | def test_lpformer():

FILE: test/nn/models/test_mask_label.py
  function test_mask_label (line 6) | def test_mask_label():
  function test_ratio_mask (line 24) | def test_ratio_mask():

FILE: test/nn/models/test_meta.py
  function test_meta_layer (line 16) | def test_meta_layer():
  function test_meta_layer_example (line 41) | def test_meta_layer_example():

FILE: test/nn/models/test_metapath2vec.py
  function test_metapath2vec (line 8) | def test_metapath2vec(device):
  function test_metapath2vec_empty_edges (line 45) | def test_metapath2vec_empty_edges():

FILE: test/nn/models/test_mlp.py
  function test_mlp (line 10) | def test_mlp(norm, act_first, plain_last):
  function test_batch (line 46) | def test_batch(norm):
  function test_mlp_return_emb (line 67) | def test_mlp_return_emb():
  function test_fine_grained_mlp (line 82) | def test_fine_grained_mlp(plain_last):

FILE: test/nn/models/test_neural_fingerprint.py
  function test_neural_fingerprint (line 11) | def test_neural_fingerprint(batch):

FILE: test/nn/models/test_node2vec.py
  function test_node2vec (line 18) | def test_node2vec(device, p, q):

FILE: test/nn/models/test_pmlp.py
  function test_pmlp (line 7) | def test_pmlp():

FILE: test/nn/models/test_polynormer.py
  function test_polynormer (line 11) | def test_polynormer(local_attn, qk_shared, pre_ln, post_bn):

FILE: test/nn/models/test_re_net.py
  class MyTestEventDataset (line 9) | class MyTestEventDataset(EventDataset):
    method __init__ (line 10) | def __init__(self, root, seq_len):
    method num_nodes (line 15) | def num_nodes(self):
    method num_rels (line 19) | def num_rels(self):
    method processed_file_names (line 23) | def processed_file_names(self):
    method _download (line 26) | def _download(self):
    method process_events (line 29) | def process_events(self):
    method process (line 36) | def process(self):
  function test_re_net (line 41) | def test_re_net(tmp_path):

FILE: test/nn/models/test_rect.py
  function test_rect (line 9) | def test_rect():

FILE: test/nn/models/test_rev_gnn.py
  function test_revgnn_forward_inverse (line 10) | def test_revgnn_forward_inverse(num_groups):
  function test_revgnn_backward (line 35) | def test_revgnn_backward(num_groups):
  function test_revgnn_multi_backward (line 50) | def test_revgnn_multi_backward(num_groups):
  function test_revgnn_diable (line 69) | def test_revgnn_diable(num_groups):
  function test_revgnn_with_args (line 90) | def test_revgnn_with_args(num_groups):

FILE: test/nn/models/test_schnet.py
  function generate_data (line 10) | def generate_data():
  function test_schnet (line 21) | def test_schnet(use_interaction_graph, use_atomref):
  function test_schnet_batch (line 53) | def test_schnet_batch():

FILE: test/nn/models/test_sgformer.py
  function test_sgformer (line 6) | def test_sgformer():

FILE: test/nn/models/test_signed_gcn.py
  function test_signed_gcn (line 8) | def test_signed_gcn():

FILE: test/nn/models/test_tgn.py
  function test_tgn (line 15) | def test_tgn(neg_sampling_ratio):

FILE: test/nn/models/test_visnet.py
  function test_visnet (line 13) | def test_visnet(kwargs):

FILE: test/nn/norm/test_batch_norm.py
  function test_batch_norm (line 10) | def test_batch_norm(device, conf):
  function test_batch_norm_single_element (line 26) | def test_batch_norm_single_element():
  function test_hetero_batch_norm (line 44) | def test_hetero_batch_norm(device, conf):

FILE: test/nn/norm/test_diff_group_norm.py
  function test_diff_group_norm (line 8) | def test_diff_group_norm(device):
  function test_group_distance_ratio (line 31) | def test_group_distance_ratio():

FILE: test/nn/norm/test_graph_norm.py
  function test_graph_norm (line 8) | def test_graph_norm(device):

FILE: test/nn/norm/test_graph_size_norm.py
  function test_graph_size_norm (line 7) | def test_graph_size_norm():

FILE: test/nn/norm/test_instance_norm.py
  function test_instance_norm (line 10) | def test_instance_norm(conf, device):

FILE: test/nn/norm/test_layer_norm.py
  function test_layer_norm (line 11) | def test_layer_norm(device, affine, mode):
  function test_hetero_layer_norm (line 32) | def test_hetero_layer_norm(device, affine):

FILE: test/nn/norm/test_mean_subtraction_norm.py
  function test_mean_subtraction_norm (line 7) | def test_mean_subtraction_norm():

FILE: test/nn/norm/test_msg_norm.py
  function test_message_norm (line 8) | def test_message_norm(device):

FILE: test/nn/norm/test_pair_norm.py
  function test_pair_norm (line 9) | def test_pair_norm(scale_individually):

FILE: test/nn/pool/connect/test_filter_edges.py
  function test_filter_edges (line 8) | def test_filter_edges():

FILE: test/nn/pool/select/test_select_topk.py
  function test_topk_ratio (line 12) | def test_topk_ratio():
  function test_select_topk (line 39) | def test_select_topk(min_score):

FILE: test/nn/pool/test_approx_knn.py
  function to_set (line 9) | def to_set(edge_index):
  function test_approx_knn (line 15) | def test_approx_knn():
  function test_approx_knn_graph (line 45) | def test_approx_knn_graph():

FILE: test/nn/pool/test_asap.py
  function test_asap (line 10) | def test_asap():
  function test_asap_jit_save (line 42) | def test_asap_jit_save():

FILE: test/nn/pool/test_avg_pool.py
  function test_avg_pool_x (line 8) | def test_avg_pool_x():
  function test_avg_pool (line 46) | def test_avg_pool():
  function test_avg_pool_neighbor_x (line 81) | def test_avg_pool_neighbor_x():

FILE: test/nn/pool/test_cluster_pool.py
  function test_cluster_pooling (line 14) | def test_cluster_pooling(edge_score_method):

FILE: test/nn/pool/test_consecutive.py
  function test_consecutive_cluster (line 6) | def test_consecutive_cluster():

FILE: test/nn/pool/test_decimation.py
  function test_decimation_basic (line 6) | def test_decimation_basic():
  function test_decimation_single_cloud (line 20) | def test_decimation_single_cloud():
  function test_decimation_almost_empty (line 32) | def test_decimation_almost_empty():

FILE: test/nn/pool/test_edge_pool.py
  function test_compute_edge_score_softmax (line 8) | def test_compute_edge_score_softmax():
  function test_compute_edge_score_tanh (line 26) | def test_compute_edge_score_tanh():
  function test_compute_edge_score_sigmoid (line 39) | def test_compute_edge_score_sigmoid():
  function test_edge_pooling (line 52) | def test_edge_pooling():

FILE: test/nn/pool/test_glob.py
  function test_global_pool (line 10) | def test_global_pool():
  function test_permuted_global_pool (line 43) | def test_permuted_global_pool():
  function test_dense_global_pool (line 70) | def test_dense_global_pool():

FILE: test/nn/pool/test_graclus.py
  function test_graclus (line 8) | def test_graclus():

FILE: test/nn/pool/test_knn.py
  function test_l2 (line 16) | def test_l2(device, k):
  function test_mips (line 40) | def test_mips(device, k):
  function test_approx_l2 (line 65) | def test_approx_l2(device, k, reserve):
  function test_approx_mips (line 89) | def test_approx_mips(device, k, reserve):
  function test_mips_exclude (line 112) | def test_mips_exclude(device, k):

FILE: test/nn/pool/test_max_pool.py
  function test_max_pool_x (line 8) | def test_max_pool_x():
  function test_max_pool (line 46) | def test_max_pool():
  function test_max_pool_neighbor_x (line 81) | def test_max_pool_neighbor_x():

FILE: test/nn/pool/test_mem_pool.py
  function test_mem_pool (line 7) | def test_mem_pool():

FILE: test/nn/pool/test_pan_pool.py
  function test_pan_pooling (line 8) | def test_pan_pooling():

FILE: test/nn/pool/test_pool.py
  function test_radius_graph_jit (line 12) | def test_radius_graph_jit():

FILE: test/nn/pool/test_sag_pool.py
  function test_sag_pooling (line 13) | def test_sag_pooling():

FILE: test/nn/pool/test_topk_pool.py
  function test_filter_adj (line 8) | def test_filter_adj():
  function test_topk_pooling (line 26) | def test_topk_pooling():

FILE: test/nn/pool/test_voxel_grid.py
  function test_voxel_grid (line 9) | def test_voxel_grid():
  function test_single_voxel_grid (line 30) | def test_single_voxel_grid():

FILE: test/nn/test_compile_basic.py
  function gather_scatter (line 14) | def gather_scatter(x, edge_index, reduce='sum'):
  function gather_cat_scatter (line 20) | def gather_cat_scatter(x, edge_index, reduce='sum'):
  function gather_weight_scatter (line 26) | def gather_weight_scatter(x, edge_index, edge_weight, reduce='sum'):
  function gather_transform_scatter (line 32) | def gather_transform_scatter(x, edge_index, matrix, reduce='sum'):
  function fused_gather_scatter (line 38) | def fused_gather_scatter(x, edge_index, reduce=('sum', 'mean', 'max')):
  function test_torch_compile (line 49) | def test_torch_compile(device):

FILE: test/nn/test_compile_conv.py
  class MySAGEConv (line 17) | class MySAGEConv(torch.nn.Module):
    method __init__ (line 18) | def __init__(self, in_channels: int, out_channels: int):
    method forward (line 23) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  function test_compile_conv (line 34) | def test_compile_conv(device, Conv):
  function test_compile_conv_edge_index (line 57) | def test_compile_conv_edge_index(device, Conv):

FILE: test/nn/test_compile_dynamic.py
  class MySAGEConv (line 16) | class MySAGEConv(torch.nn.Module):
    method __init__ (line 17) | def __init__(self, in_channels: int, out_channels: int):
    method forward (line 22) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  function test_dynamic_torch_compile (line 32) | def test_dynamic_torch_compile(device):

FILE: test/nn/test_data_parallel.py
  function test_data_parallel_single_gpu (line 10) | def test_data_parallel_single_gpu():
  function test_data_parallel_multi_gpu (line 20) | def test_data_parallel_multi_gpu():

FILE: test/nn/test_encoding.py
  function test_positional_encoding (line 8) | def test_positional_encoding(device):
  function test_temporal_encoding (line 17) | def test_temporal_encoding(device):

FILE: test/nn/test_fvcore.py
  function test_fvcore (line 8) | def test_fvcore():

FILE: test/nn/test_fx.py
  function test_dropout (line 6) | def test_dropout():

FILE: test/nn/test_inits.py
  function test_inits (line 16) | def test_inits():
  function test_reset (line 51) | def test_reset():

FILE: test/nn/test_model_hub.py
  class DummyModel (line 18) | class DummyModel(GCN, PyGModelHubMixin):
    method __init__ (line 19) | def __init__(self, model_name, dataset_name, model_kwargs):
  function model (line 25) | def model():
  function test_model_init (line 30) | def test_model_init():
  function test_save_pretrained (line 39) | def test_save_pretrained(model, tmp_path):
  function test_save_pretrained_internal (line 48) | def test_save_pretrained_internal(model, tmp_path):
  function test_save_pretrained_with_push_to_hub (line 56) | def test_save_pretrained_with_push_to_hub(model, tmp_path):
  function test_from_pretrained (line 87) | def test_from_pretrained(model, tmp_path):
  function test_from_pretrained_internal (line 96) | def test_from_pretrained_internal(model, monkeypatch):

FILE: test/nn/test_model_summary.py
  class GraphSAGE (line 14) | class GraphSAGE(torch.nn.Module):
    method __init__ (line 15) | def __init__(self):
    method forward (line 21) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  class ModuleDictModel (line 28) | class ModuleDictModel(nn.Module):
    method __init__ (line 29) | def __init__(self):
    method forward (line 36) | def forward(self, x: torch.Tensor, act_type: str) -> torch.Tensor:
  function gcn (line 41) | def gcn():
  function test_summary_basic (line 56) | def test_summary_basic(gcn):
  function test_summary_with_sparse_tensor (line 76) | def test_summary_with_sparse_tensor(gcn):
  function test_lazy_gcn (line 96) | def test_lazy_gcn():
  function test_summary_with_max_depth (line 120) | def test_summary_with_max_depth(gcn):
  function test_summary_with_leaf_module (line 141) | def test_summary_with_leaf_module(gcn):
  function test_summary_with_reusing_layers (line 170) | def test_summary_with_reusing_layers():
  function test_summary_with_to_hetero_model (line 186) | def test_summary_with_to_hetero_model():
  function test_summary_with_module_dict_model (line 220) | def test_summary_with_module_dict_model():
  function test_summary_with_jit_model (line 238) | def test_summary_with_jit_model():

FILE: test/nn/test_module_dict.py
  function test_internal_external_key_conversion (line 6) | def test_internal_external_key_conversion():
  function test_dot_syntax_keys (line 21) | def test_dot_syntax_keys():
  function test_tuple_keys (line 39) | def test_tuple_keys():
  function test_reserved_keys (line 56) | def test_reserved_keys():

FILE: test/nn/test_parameter_dict.py
  function test_internal_external_key_conversion (line 6) | def test_internal_external_key_conversion():
  function test_dot_syntax_keys (line 21) | def test_dot_syntax_keys():
  function test_tuple_keys (line 40) | def test_tuple_keys():
  function test_reserved_keys (line 58) | def test_reserved_keys():

FILE: test/nn/test_reshape.py
  function test_reshape (line 6) | def test_reshape():

FILE: test/nn/test_resolver.py
  function test_activation_resolver (line 15) | def test_activation_resolver():
  function test_aggregation_resolver (line 37) | def test_aggregation_resolver(aggr_tuple):
  function test_multi_aggregation_resolver (line 43) | def test_multi_aggregation_resolver():
  function test_normalization_resolver (line 66) | def test_normalization_resolver(norm_tuple):
  function test_optimizer_resolver (line 74) | def test_optimizer_resolver():
  function test_lr_scheduler_resolver (line 99) | def test_lr_scheduler_resolver(scheduler_args):

FILE: test/nn/test_sequential.py
  function test_sequential_basic (line 20) | def test_sequential_basic():
  function test_sequential_jit (line 70) | def test_sequential_jit():
  function symbolic_trace (line 96) | def symbolic_trace(module):
  function test_sequential_tracable (line 105) | def test_sequential_tracable():
  function test_sequential_with_multiple_return_values (line 117) | def test_sequential_with_multiple_return_values():
  function test_sequential_with_ordered_dict (line 132) | def test_sequential_with_ordered_dict():
  function test_sequential_to_hetero (line 149) | def test_sequential_to_hetero():

FILE: test/nn/test_to_fixed_size_transformer.py
  class Model (line 7) | class Model(torch.nn.Module):
    method __init__ (line 8) | def __init__(self):
    method forward (line 12) | def forward(self, x, batch):
  function test_to_fixed_size (line 16) | def test_to_fixed_size():

FILE: test/nn/test_to_hetero_module.py
  function test_to_hetero_linear (line 13) | def test_to_hetero_linear(LinearCls):
  function test_to_hetero_message_passing (line 32) | def test_to_hetero_message_passing():

FILE: test/nn/test_to_hetero_transformer.py
  class Net1 (line 34) | class Net1(torch.nn.Module):
    method __init__ (line 35) | def __init__(self):
    method forward (line 40) | def forward(self, x: Tensor, edge_attr: Tensor) -> Tuple[Tensor, Tensor]:
  class Net2 (line 46) | class Net2(torch.nn.Module):
    method __init__ (line 47) | def __init__(self):
    method forward (line 53) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  class Net3 (line 60) | class Net3(torch.nn.Module):
    method __init__ (line 61) | def __init__(self):
    method forward (line 66) | def forward(self, x: Tensor, edge_index: Tensor,
  class Net4 (line 72) | class Net4(torch.nn.Module):
    method __init__ (line 73) | def __init__(self):
    method forward (line 79) | def forward(self, x0: Tensor, edge_index: Tensor) -> Tensor:
  class Net5 (line 85) | class Net5(torch.nn.Module):
    method __init__ (line 86) | def __init__(self, num_layers):
    method forward (line 94) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  class Net6 (line 100) | class Net6(torch.nn.Module):
    method __init__ (line 101) | def __init__(self, num_layers):
    method forward (line 109) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  class Net7 (line 115) | class Net7(torch.nn.Module):
    method __init__ (line 116) | def __init__(self):
    method forward (line 121) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  class Net8 (line 127) | class Net8(torch.nn.Module):
    method __init__ (line 128) | def __init__(self):
    method forward (line 132) | def forward(self, x: Tensor) -> Tensor:
  class Net9 (line 137) | class Net9(torch.nn.Module):
    method __init__ (line 138) | def __init__(self):
    method forward (line 142) | def forward(self, x: Tensor) -> Tensor:
  class Net10 (line 146) | class Net10(torch.nn.Module):
    method __init__ (line 147) | def __init__(self):
    method forward (line 151) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  class Net11 (line 157) | class Net11(torch.nn.Module):
    method __init__ (line 158) | def __init__(self):
    method forward (line 163) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  class Net12 (line 170) | class Net12(torch.nn.Module):
    method __init__ (line 171) | def __init__(self):
    method forward (line 175) | def forward(self, x: Tensor) -> Tensor:
  function test_to_hetero_basic (line 179) | def test_to_hetero_basic():
  class GCN (line 311) | class GCN(torch.nn.Module):
    method __init__ (line 312) | def __init__(self):
    method forward (line 317) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  function test_to_hetero_with_gcn (line 323) | def test_to_hetero_with_gcn():
  function test_to_hetero_with_basic_model (line 340) | def test_to_hetero_with_basic_model():
  class GraphConv (line 367) | class GraphConv(MessagePassing):
    method __init__ (line 368) | def __init__(self, in_channels, out_channels):
    method reset_parameters (line 372) | def reset_parameters(self):
    method forward (line 375) | def forward(self, x, edge_index):
  class RGCN (line 381) | class RGCN(torch.nn.Module):
    method __init__ (line 382) | def __init__(self, in_channels, out_channels):
    method forward (line 387) | def forward(self, x, edge_index):
  function test_to_hetero_and_rgcn_equal_output (line 391) | def test_to_hetero_and_rgcn_equal_output():
  class GraphLevelGNN (line 453) | class GraphLevelGNN(torch.nn.Module):
    method __init__ (line 454) | def __init__(self):
    method forward (line 460) | def forward(self, x: Tensor, edge_index: Tensor, batch: Tensor) -> Ten...
  function test_graph_level_to_hetero (line 467) | def test_graph_level_to_hetero():
  class MessagePassingLoops (line 491) | class MessagePassingLoops(MessagePassing):
    method __init__ (line 492) | def __init__(self):
    method forward (line 496) | def forward(self, x):
  class ModelLoops (line 500) | class ModelLoops(torch.nn.Module):
    method __init__ (line 501) | def __init__(self):
    method forward (line 505) | def forward(self, x):
  function test_hetero_transformer_self_loop_error (line 509) | def test_hetero_transformer_self_loop_error():
  function test_to_hetero_validate (line 516) | def test_to_hetero_validate():
  function test_to_hetero_on_static_graphs (line 524) | def test_to_hetero_on_static_graphs():
  function test_to_hetero_lazy_cuda (line 544) | def test_to_hetero_lazy_cuda():

FILE: test/nn/test_to_hetero_with_bases_transformer.py
  class Net1 (line 20) | class Net1(torch.nn.Module):
    method __init__ (line 21) | def __init__(self):
    method forward (line 26) | def forward(self, x: Tensor, edge_attr: Tensor) -> Tuple[Tensor, Tensor]:
  class Net2 (line 32) | class Net2(torch.nn.Module):
    method __init__ (line 33) | def __init__(self):
    method forward (line 39) | def forward(self, x: Tensor, edge_index: Tensor) -> Tensor:
  class Net3 (line 46) | class Net3(torch.nn.Module):
    method __init__ (line 47) | def __init__(self):
    method forward (line 52) | def forward(self, x: Tensor, edge_index: Tensor,
  class Net4 (line 58) | class Net4(torch.nn.Module):
    method __init__ (line 59) | def __init__(self):
    method forward (line 65) | def forward(self, x0: Tensor, edge_index: Tensor) -> Tensor:
  class Net5 (line 71) | class Net5(torch.nn.Module):
    metho
Condensed preview — 1487 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,490K chars).
[
  {
    "path": ".github/CODEOWNERS",
    "chars": 585,
    "preview": "# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/ab"
  },
  {
    "path": ".github/CONTRIBUTING.md",
    "chars": 5481,
    "preview": "# Contributing to PyG\n\nIf you are interested in contributing to PyG, your contributions will likely fall into one of the"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug-report.yml",
    "chars": 2417,
    "preview": "name: \"🐛 Bug Report\"\ndescription: \"Submit a report to help us reproduce and fix the bug\"\nlabels: bug\n\nbody:\n  - type: ma"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 342,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: 🙏 Ask a Question\n    url: https://github.com/pyg-team/pytorch_geome"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/documentation.yml",
    "chars": 497,
    "preview": "name: \"📚 Typos and Doc Fixes\"\ndescription: \"Tell us about how we can improve our documentation\"\nlabels: documentation\n\nb"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature-request.yml",
    "chars": 859,
    "preview": "name: \"🚀 Feature Request\"\ndescription: \"Propose a new PyG feature\"\nlabels: feature\n\nbody:\n  - type: textarea\n    attribu"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/installation.yml",
    "chars": 1462,
    "preview": "name: \"😵 Installation\"\ndescription: \"Report an installation problem\"\nlabels: installation\n\nbody:\n  - type: markdown\n    "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/refactor.yml",
    "chars": 609,
    "preview": "name: \"🛠 Refactor\"\ndescription: \"Suggest a code refactor or deprecation\"\nlabels: refactor\n\nbody:\n  - type: textarea\n    "
  },
  {
    "path": ".github/actions/setup/action.yml",
    "chars": 3430,
    "preview": "name: Setup\n\ninputs:\n  python-version:\n    required: false\n    default: '3.10'\n  torch-version:\n    required: false\n    "
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 421,
    "preview": "# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/dependabot-options-reference\nversion: 2\nup"
  },
  {
    "path": ".github/labeler.yml",
    "chars": 1616,
    "preview": "installation:\n  - changed-files:\n      - any-glob-to-any-file: [\"pyproject.toml\"]\n\nci:\n  - changed-files:\n      - any-gl"
  },
  {
    "path": ".github/workflows/_testing.yml",
    "chars": 1732,
    "preview": "name: Reusable Testing\n\non:  # yamllint disable-line rule:truthy\n  workflow_call:\n    inputs:\n      test-matrix:\n       "
  },
  {
    "path": ".github/workflows/auto-merge.yml",
    "chars": 888,
    "preview": "name: Auto-merge Bot PRs\n\non:  # yamllint disable-line rule:truthy\n  pull_request_target:\n    types: [opened, reopened]\n"
  },
  {
    "path": ".github/workflows/building_nightly.yml",
    "chars": 1287,
    "preview": "name: Nightly Build\n\non:  # yamllint disable-line rule:truthy\n  workflow_dispatch:\n  schedule:\n    - cron: \"0 6 * * *\"  "
  },
  {
    "path": ".github/workflows/changelog.yml",
    "chars": 359,
    "preview": "name: Changelog Enforcer\n\non:  # yamllint disable-line rule:truthy\n  pull_request:\n    types: [opened, synchronize, reop"
  },
  {
    "path": ".github/workflows/documentation.yml",
    "chars": 1301,
    "preview": "name: Documentation\n\non:  # yamllint disable-line rule:truthy\n  push:\n    branches:\n      - master\n    paths:\n      - 't"
  },
  {
    "path": ".github/workflows/examples.yml",
    "chars": 1061,
    "preview": "name: Examples\n\non:  # yamllint disable-line rule:truthy\n  workflow_dispatch:\n  schedule:\n    - cron: \"0 7 * * *\"  # Eve"
  },
  {
    "path": ".github/workflows/labeler.yml",
    "chars": 788,
    "preview": "name: PR Labeler\n\non:  # yamllint disable-line rule:truthy\n  pull_request:\n\njobs:\n\n  assign-labels:\n    if: github.repos"
  },
  {
    "path": ".github/workflows/linting.yml",
    "chars": 1227,
    "preview": "name: Linting\n\non:  # yamllint disable-line rule:truthy\n  push:\n    branches:\n      - master\n    paths:\n      - 'torch_g"
  },
  {
    "path": ".github/workflows/testing.yml",
    "chars": 3883,
    "preview": "name: Testing\n\non:  # yamllint disable-line rule:truthy\n  push:\n    branches:\n      - master\n  pull_request:\n  schedule:"
  },
  {
    "path": ".github/workflows/testing_rag.yml",
    "chars": 1447,
    "preview": "name: Testing RAG\n\non:  # yamllint disable-line rule:truthy\n  push:\n    branches:\n      - master\n    paths:\n      - 'tor"
  },
  {
    "path": ".gitignore",
    "chars": 370,
    "preview": "__pycache__/\n.pytest_cache/\n.DS_Store\ndata/\nbuild/\ndist/\nalpha/\nruns/\nwandb/\n.cache/\n.eggs/\nlightning_logs/\noutputs/\ngra"
  },
  {
    "path": ".pre-commit-config.yaml",
    "chars": 2427,
    "preview": "ci:\n  # https://pre-commit.ci/#configuration\n  autofix_prs: true\n  autoupdate_commit_msg: '[pre-commit.ci] pre-commit su"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 136484,
    "preview": "# Changelog\n\nAll notable changes to this project will be documented in this file.\nThe format is based on [Keep a Changel"
  },
  {
    "path": "CITATION.cff",
    "chars": 1178,
    "preview": "---\ncff-version: 1.2.0\nmessage: \"Please cite our papers if you use this code in your own work.\"\ntitle: \"Fast Graph Repre"
  },
  {
    "path": "LICENSE",
    "chars": 1067,
    "preview": "Copyright (c) 2023 PyG Team <team@pyg.org>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "README.md",
    "chars": 60034,
    "preview": "<p align=\"center\">\n  <img height=\"150\" src=\"https://raw.githubusercontent.com/pyg-team/pyg_sphinx_theme/master/pyg_sphin"
  },
  {
    "path": "benchmark/README.md",
    "chars": 773,
    "preview": "# PyG Benchmark Suite\n\nThis benchmark suite provides evaluation scripts for **[semi-supervised node classification](http"
  },
  {
    "path": "benchmark/citation/README.md",
    "chars": 985,
    "preview": "# Semi-supervised Node Classification\n\nEvaluation scripts for various methods on the Cora, CiteSeer and PubMed citation "
  },
  {
    "path": "benchmark/citation/__init__.py",
    "chars": 183,
    "preview": "from .datasets import get_planetoid_dataset\nfrom .train_eval import random_planetoid_splits, run\n\n__all__ = [\n    'get_p"
  },
  {
    "path": "benchmark/citation/appnp.py",
    "chars": 2469,
    "preview": "import argparse\n\nimport torch\nimport torch.nn.functional as F\nfrom citation import get_planetoid_dataset, random_planeto"
  },
  {
    "path": "benchmark/citation/arma.py",
    "chars": 2751,
    "preview": "import argparse\n\nimport torch\nimport torch.nn.functional as F\nfrom citation import get_planetoid_dataset, random_planeto"
  },
  {
    "path": "benchmark/citation/cheb.py",
    "chars": 2311,
    "preview": "import argparse\n\nimport torch\nimport torch.nn.functional as F\nfrom citation import get_planetoid_dataset, random_planeto"
  },
  {
    "path": "benchmark/citation/datasets.py",
    "chars": 596,
    "preview": "import os.path as osp\n\nimport torch_geometric.transforms as T\nfrom torch_geometric.datasets import Planetoid\n\n\ndef get_p"
  },
  {
    "path": "benchmark/citation/gat.py",
    "chars": 2600,
    "preview": "import argparse\n\nimport torch\nimport torch.nn.functional as F\nfrom citation import get_planetoid_dataset, random_planeto"
  },
  {
    "path": "benchmark/citation/gcn.py",
    "chars": 2222,
    "preview": "import argparse\n\nimport torch\nimport torch.nn.functional as F\nfrom citation import get_planetoid_dataset, random_planeto"
  },
  {
    "path": "benchmark/citation/inference.sh",
    "chars": 5840,
    "preview": "#!/bin/sh\n\necho \"Cora\"\necho \"====\"\n\necho \"GCN\"\npython gcn.py --dataset=Cora --inference\npython gcn.py --dataset=Cora --r"
  },
  {
    "path": "benchmark/citation/run.sh",
    "chars": 2452,
    "preview": "#!/bin/sh\n\necho \"Cora\"\necho \"====\"\n\necho \"GCN\"\npython gcn.py --dataset=Cora\npython gcn.py --dataset=Cora --random_splits"
  },
  {
    "path": "benchmark/citation/sgc.py",
    "chars": 2001,
    "preview": "import argparse\n\nimport torch\nimport torch.nn.functional as F\nfrom citation import get_planetoid_dataset, random_planeto"
  },
  {
    "path": "benchmark/citation/statistics.py",
    "chars": 459,
    "preview": "from citation import get_planetoid_dataset\n\n\ndef print_dataset(dataset):\n    data = dataset[0]\n    print('Name', dataset"
  },
  {
    "path": "benchmark/citation/train_eval.py",
    "chars": 5956,
    "preview": "import time\n\nimport torch\nimport torch.nn.functional as F\nfrom torch import tensor\nfrom torch.optim import Adam\n\nfrom to"
  },
  {
    "path": "benchmark/inference/README.md",
    "chars": 1772,
    "preview": "# Inference Benchmark\n\n## Environment setup\n\n1. Confirm that PyG is properly installed.\n1. Install dataset package:\n   `"
  },
  {
    "path": "benchmark/inference/inference_benchmark.py",
    "chars": 15806,
    "preview": "import argparse\nimport warnings\nfrom collections import defaultdict\nfrom contextlib import nullcontext\n\nimport torch\n\nfr"
  },
  {
    "path": "benchmark/kernel/README.md",
    "chars": 1810,
    "preview": "# Graph Classification\n\nEvaluation script for various methods on [common benchmark datasets](https://chrsmrrs.github.io/"
  },
  {
    "path": "benchmark/kernel/__init__.py",
    "chars": 159,
    "preview": "from .datasets import get_dataset\nfrom .train_eval import cross_validation_with_val_set\n\n__all__ = [\n    'get_dataset',\n"
  },
  {
    "path": "benchmark/kernel/asap.py",
    "chars": 2105,
    "preview": "import torch\nimport torch.nn.functional as F\nfrom torch.nn import Linear\n\nfrom torch_geometric.nn import (\n    ASAPoolin"
  },
  {
    "path": "benchmark/kernel/datasets.py",
    "chars": 2090,
    "preview": "import os.path as osp\n\nimport torch\n\nimport torch_geometric.transforms as T\nfrom torch_geometric.datasets import TUDatas"
  },
  {
    "path": "benchmark/kernel/diff_pool.py",
    "chars": 3118,
    "preview": "from math import ceil\n\nimport torch\nimport torch.nn.functional as F\nfrom torch.nn import Linear\n\nfrom torch_geometric.nn"
  },
  {
    "path": "benchmark/kernel/edge_pool.py",
    "chars": 1869,
    "preview": "import torch\nimport torch.nn.functional as F\nfrom torch.nn import Linear\n\nfrom torch_geometric.nn import (\n    EdgePooli"
  },
  {
    "path": "benchmark/kernel/gcn.py",
    "chars": 2606,
    "preview": "import torch\nimport torch.nn.functional as F\nfrom torch.nn import Linear\n\nfrom torch_geometric.nn import GCNConv, Jumpin"
  },
  {
    "path": "benchmark/kernel/gin.py",
    "chars": 7178,
    "preview": "import torch\nimport torch.nn.functional as F\nfrom torch.nn import BatchNorm1d as BN\nfrom torch.nn import Linear, ReLU, S"
  },
  {
    "path": "benchmark/kernel/global_attention.py",
    "chars": 1339,
    "preview": "import torch\nimport torch.nn.functional as F\nfrom torch.nn import Linear\n\nfrom torch_geometric.nn import AttentionalAggr"
  },
  {
    "path": "benchmark/kernel/graclus.py",
    "chars": 1866,
    "preview": "import torch\nimport torch.nn.functional as F\nfrom torch.nn import Linear\n\nfrom torch_geometric.data import Batch\nfrom to"
  },
  {
    "path": "benchmark/kernel/graph_sage.py",
    "chars": 2620,
    "preview": "import torch\nimport torch.nn.functional as F\nfrom torch.nn import Linear\n\nfrom torch_geometric.nn import JumpingKnowledg"
  },
  {
    "path": "benchmark/kernel/main.py",
    "chars": 2528,
    "preview": "import argparse\nfrom itertools import product\n\nfrom asap import ASAP\nfrom datasets import get_dataset\nfrom diff_pool imp"
  },
  {
    "path": "benchmark/kernel/main_performance.py",
    "chars": 5544,
    "preview": "import argparse\nfrom itertools import product\n\nimport torch\nfrom datasets import get_dataset\nfrom gcn import GCN\nfrom gi"
  },
  {
    "path": "benchmark/kernel/sag_pool.py",
    "chars": 1943,
    "preview": "import torch\nimport torch.nn.functional as F\nfrom torch.nn import Linear\n\nfrom torch_geometric.nn import (\n    GraphConv"
  },
  {
    "path": "benchmark/kernel/set2set.py",
    "chars": 1326,
    "preview": "import torch\nimport torch.nn.functional as F\nfrom torch.nn import Linear\n\nfrom torch_geometric.nn import SAGEConv, Set2S"
  },
  {
    "path": "benchmark/kernel/sort_pool.py",
    "chars": 1492,
    "preview": "import torch\nimport torch.nn.functional as F\nfrom torch.nn import Conv1d, Linear\n\nfrom torch_geometric.nn import SAGECon"
  },
  {
    "path": "benchmark/kernel/statistics.py",
    "chars": 570,
    "preview": "from kernel.datasets import get_dataset\n\n\ndef print_dataset(dataset):\n    num_nodes = num_edges = 0\n    for data in data"
  },
  {
    "path": "benchmark/kernel/top_k.py",
    "chars": 1942,
    "preview": "import torch\nimport torch.nn.functional as F\nfrom torch.nn import Linear\n\nfrom torch_geometric.nn import (\n    GraphConv"
  },
  {
    "path": "benchmark/kernel/train_eval.py",
    "chars": 5451,
    "preview": "import time\n\nimport torch\nimport torch.nn.functional as F\nfrom sklearn.model_selection import StratifiedKFold\nfrom torch"
  },
  {
    "path": "benchmark/loader/neighbor_loader.py",
    "chars": 6313,
    "preview": "import argparse\nimport ast\nimport os.path as osp\nfrom contextlib import nullcontext\nfrom timeit import default_timer\n\nim"
  },
  {
    "path": "benchmark/multi_gpu/training/README.md",
    "chars": 2904,
    "preview": "# Training Benchmark\n\n## Running benchmark on CUDA GPU\n\nRun benchmark, e.g. assuming you have `n` NVIDIA GPUs:\n\n```\npyth"
  },
  {
    "path": "benchmark/multi_gpu/training/common.py",
    "chars": 9114,
    "preview": "import argparse\nimport ast\nfrom time import perf_counter\nfrom typing import Any, Callable, Tuple, Union\n\nimport torch\nim"
  },
  {
    "path": "benchmark/multi_gpu/training/training_benchmark_cuda.py",
    "chars": 1537,
    "preview": "import argparse\nimport os\nfrom typing import Union\n\nimport torch\nimport torch.distributed as dist\nimport torch.multiproc"
  },
  {
    "path": "benchmark/multi_gpu/training/training_benchmark_xpu.py",
    "chars": 1959,
    "preview": "import os\nfrom typing import Any, Tuple\n\nimport intel_extension_for_pytorch as ipex\nimport oneccl_bindings_for_pytorch  "
  },
  {
    "path": "benchmark/points/README.md",
    "chars": 730,
    "preview": "# Point Cloud classification\n\nEvaluation scripts for various methods on the ModelNet10 dataset:\n\n- **[MPNN](https://gith"
  },
  {
    "path": "benchmark/points/__init__.py",
    "chars": 107,
    "preview": "from .datasets import get_dataset\nfrom .train_eval import run\n\n__all__ = [\n    'get_dataset',\n    'run',\n]\n"
  },
  {
    "path": "benchmark/points/datasets.py",
    "chars": 636,
    "preview": "import os.path as osp\n\nimport torch_geometric.transforms as T\nfrom torch_geometric.datasets import ModelNet\n\n\ndef get_da"
  },
  {
    "path": "benchmark/points/edge_cnn.py",
    "chars": 2288,
    "preview": "import argparse\n\nimport torch\nimport torch.nn.functional as F\nfrom points.datasets import get_dataset\nfrom points.train_"
  },
  {
    "path": "benchmark/points/mpnn.py",
    "chars": 3031,
    "preview": "import argparse\n\nimport torch\nimport torch.nn.functional as F\nfrom points.datasets import get_dataset\nfrom points.train_"
  },
  {
    "path": "benchmark/points/point_cnn.py",
    "chars": 2588,
    "preview": "import argparse\n\nimport torch\nimport torch.nn.functional as F\nfrom points.datasets import get_dataset\nfrom points.train_"
  },
  {
    "path": "benchmark/points/point_net.py",
    "chars": 2761,
    "preview": "import argparse\n\nimport torch\nimport torch.nn.functional as F\nfrom points.datasets import get_dataset\nfrom points.train_"
  },
  {
    "path": "benchmark/points/spline_cnn.py",
    "chars": 2995,
    "preview": "import argparse\n\nimport torch\nimport torch.nn.functional as F\nfrom points.datasets import get_dataset\nfrom points.train_"
  },
  {
    "path": "benchmark/points/statistics.py",
    "chars": 751,
    "preview": "from points.datasets import get_dataset\n\nfrom torch_geometric.transforms import RadiusGraph\n\n\ndef print_dataset(train_da"
  },
  {
    "path": "benchmark/points/train_eval.py",
    "chars": 4068,
    "preview": "import time\n\nimport torch\nimport torch.nn.functional as F\nfrom torch.optim import Adam\n\nfrom torch_geometric.loader impo"
  },
  {
    "path": "benchmark/runtime/README.md",
    "chars": 148,
    "preview": "# Runtimes\n\nRun the test suite for PyG via\n\n```\npython main.py\n```\n\nInstall `dgl` and run the test suite for DGL via\n\n``"
  },
  {
    "path": "benchmark/runtime/__init__.py",
    "chars": 69,
    "preview": "from .train import train_runtime\n\n__all__ = [\n    'train_runtime',\n]\n"
  },
  {
    "path": "benchmark/runtime/dgl/gat.py",
    "chars": 4635,
    "preview": "import dgl.function as fn\nimport torch\nimport torch.nn.functional as F\nfrom dgl.nn.pytorch import EdgeSoftmax\nfrom torch"
  },
  {
    "path": "benchmark/runtime/dgl/gcn.py",
    "chars": 2439,
    "preview": "import dgl.function as fn\nimport torch\nimport torch.nn.functional as F\nfrom torch.nn import Parameter\n\nfrom torch_geomet"
  },
  {
    "path": "benchmark/runtime/dgl/hidden.py",
    "chars": 326,
    "preview": "import os\nimport sys\nimport warnings\n\nwarnings.filterwarnings('ignore')\n\n\nclass HiddenPrint:\n    def __enter__(self):\n  "
  },
  {
    "path": "benchmark/runtime/dgl/main.py",
    "chars": 2262,
    "preview": "from itertools import product\n\nimport dgl\nimport torch\nfrom dgl import DGLGraph\nfrom dgl.contrib.data import load_data\nf"
  },
  {
    "path": "benchmark/runtime/dgl/rgcn.py",
    "chars": 4986,
    "preview": "import dgl.function as fn\nimport torch\nimport torch.nn.functional as F\nfrom torch.nn import Parameter as Param\n\nfrom tor"
  },
  {
    "path": "benchmark/runtime/dgl/train.py",
    "chars": 1136,
    "preview": "import time\n\nimport torch\nimport torch.nn.functional as F\n\n\ndef train_runtime(model, data, epochs, device):\n    if hasat"
  },
  {
    "path": "benchmark/runtime/gat.py",
    "chars": 635,
    "preview": "import torch\nimport torch.nn.functional as F\n\nfrom torch_geometric.nn import GATConv\n\n\nclass GAT(torch.nn.Module):\n    d"
  },
  {
    "path": "benchmark/runtime/gcn.py",
    "chars": 562,
    "preview": "import torch\nimport torch.nn.functional as F\n\nfrom torch_geometric.nn import GCNConv\n\n\nclass GCN(torch.nn.Module):\n    d"
  },
  {
    "path": "benchmark/runtime/main.py",
    "chars": 1378,
    "preview": "import os.path as osp\nfrom itertools import product\n\nimport torch\nfrom runtime.gat import GAT\nfrom runtime.gcn import GC"
  },
  {
    "path": "benchmark/runtime/rgcn.py",
    "chars": 651,
    "preview": "import torch\nimport torch.nn.functional as F\n\nfrom torch_geometric.nn import FastRGCNConv\n\n\nclass RGCN(torch.nn.Module):"
  },
  {
    "path": "benchmark/runtime/train.py",
    "chars": 1004,
    "preview": "import time\n\nimport torch\nimport torch.nn.functional as F\n\n\ndef train_runtime(model, data, epochs, device):\n    optimize"
  },
  {
    "path": "benchmark/setup.py",
    "chars": 363,
    "preview": "from setuptools import find_packages, setup\n\nsetup(\n    name='torch_geometric_benchmark',\n    version='0.1.0',\n    descr"
  },
  {
    "path": "benchmark/training/README.md",
    "chars": 1755,
    "preview": "# Training Benchmark\n\n## Environment setup\n\n1. Confirm that PyG is properly installed.\n1. Install dataset package:\n   ``"
  },
  {
    "path": "benchmark/training/training_benchmark.py",
    "chars": 16565,
    "preview": "import argparse\nimport ast\nimport warnings\nfrom collections import defaultdict\nfrom contextlib import nullcontext\n\nimpor"
  },
  {
    "path": "benchmark/utils/__init__.py",
    "chars": 421,
    "preview": "from .utils import emit_itt\nfrom .utils import get_dataset, get_dataset_with_transformation\nfrom .utils import get_model"
  },
  {
    "path": "benchmark/utils/hetero_gat.py",
    "chars": 1739,
    "preview": "import torch\nfrom tqdm import tqdm\n\nfrom torch_geometric.nn import GAT, to_hetero\n\n\nclass HeteroGAT(torch.nn.Module):\n  "
  },
  {
    "path": "benchmark/utils/hetero_sage.py",
    "chars": 1683,
    "preview": "import torch\nfrom tqdm import tqdm\n\nfrom torch_geometric.nn import GraphSAGE, to_hetero\n\n\nclass HeteroGraphSAGE(torch.nn"
  },
  {
    "path": "benchmark/utils/utils.py",
    "chars": 6967,
    "preview": "import os\nimport os.path as osp\nfrom datetime import datetime\n\nimport torch\nfrom ogb.nodeproppred import PygNodePropPred"
  },
  {
    "path": "codecov.yml",
    "chars": 253,
    "preview": "# See: https://docs.codecov.io/docs/codecov-yaml\ncoverage:\n  range: 80..100\n  round: down\n  precision: 2\n  status:\n    p"
  },
  {
    "path": "docker/Dockerfile",
    "chars": 788,
    "preview": "FROM nvcr.io/nvidia/cuda-dl-base:24.09-cuda12.6-devel-ubuntu22.04\n\n# Based on NGC PyG 24.09 image:\n# https://docs.nvidia"
  },
  {
    "path": "docker/Dockerfile.xpu",
    "chars": 1412,
    "preview": "ARG BASE_IMAGE=\"intel/intel-extension-for-pytorch\"\nARG BASE_TAG=\"2.1.30-xpu\"\n\nFROM ${BASE_IMAGE}:${BASE_TAG}\n\n# meta inf"
  },
  {
    "path": "docker/README.md",
    "chars": 3707,
    "preview": "# Docker on NVIDIA GPU\n\nThe recommended way to use Docker for NVIDIA hardware is described [here](https://catalog.ngc.nv"
  },
  {
    "path": "docker/singularity",
    "chars": 1938,
    "preview": "Bootstrap: docker\nFrom: nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04\n\n%post\n  CURDIR=$(pwd)\n\n  # Set timezone to Etc/UTC fo"
  },
  {
    "path": "docs/Makefile",
    "chars": 215,
    "preview": "SPHINXBUILD   = sphinx-build\nSPHINXPROJ    = pytorch_geometric\nSOURCEDIR     = source\nBUILDDIR      = build\n\n.PHONY: hel"
  },
  {
    "path": "docs/README.md",
    "chars": 521,
    "preview": "# Building Documentation\n\nTo build the documentation:\n\n1. [Build and install](https://github.com/pyg-team/pytorch_geomet"
  },
  {
    "path": "docs/requirements.txt",
    "chars": 160,
    "preview": "https://download.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp310-cp310-manylinux_2_28_x86_64.whl\nnumpy>=1.19.5\ngit+https://g"
  },
  {
    "path": "docs/source/.gitignore",
    "chars": 11,
    "preview": "generated/\n"
  },
  {
    "path": "docs/source/_figures/.gitignore",
    "chars": 18,
    "preview": "*.aux\n*.log\n*.pdf\n"
  },
  {
    "path": "docs/source/_figures/build.sh",
    "chars": 149,
    "preview": "#!/bin/sh\n\nfor filename in *.tex; do\n  basename=$(basename $filename .tex)\n  pdflatex \"$basename.tex\"\n  pdf2svg \"$basena"
  },
  {
    "path": "docs/source/_figures/graph.tex",
    "chars": 359,
    "preview": "\\documentclass{standalone}\n\n\\usepackage{tikz}\n\n\\begin{document}\n\n\\begin{tikzpicture}\n  \\node[draw,circle,label= left:{$x"
  },
  {
    "path": "docs/source/_figures/hg_example.tex",
    "chars": 962,
    "preview": "\\documentclass{standalone}\n\n\\usepackage{tikz}\n\n\\begin{document}\n\n\\begin{tikzpicture}\n  \\node[draw,rectangle, align=cente"
  },
  {
    "path": "docs/source/_figures/to_hetero.tex",
    "chars": 3068,
    "preview": "\\documentclass{standalone}\n\n\\usepackage{tikz}\n\n\\definecolor{green}{RGB}{159,213,179}\n\\definecolor{blue}{RGB}{10,153,201}"
  },
  {
    "path": "docs/source/_figures/to_hetero_with_bases.tex",
    "chars": 3578,
    "preview": "\\documentclass{standalone}\n\n\\usepackage{tikz}\n\n\\definecolor{green}{RGB}{159,213,179}\n\\definecolor{blue}{RGB}{10,153,201}"
  },
  {
    "path": "docs/source/_static/js/version_alert.js",
    "chars": 749,
    "preview": "function warnOnLatestVersion() {\n  if (!window.READTHEDOCS_DATA || window.READTHEDOCS_DATA.version !== \"latest\") {\n    r"
  },
  {
    "path": "docs/source/_templates/autosummary/class.rst",
    "chars": 133,
    "preview": "{{ fullname | escape | underline}}\n\n.. currentmodule:: {{ module }}\n\n.. autoclass:: {{ objname }}\n   :show-inheritance:\n"
  },
  {
    "path": "docs/source/_templates/autosummary/inherited_class.rst",
    "chars": 198,
    "preview": "{{ fullname | escape | underline}}\n\n.. currentmodule:: {{ module }}\n\n.. autoclass:: {{ objname }}\n   :show-inheritance:\n"
  },
  {
    "path": "docs/source/_templates/autosummary/metrics.rst",
    "chars": 156,
    "preview": "{{ fullname | escape | underline}}\n\n.. currentmodule:: {{ module }}\n\n.. autoclass:: {{ objname }}\n   :show-inheritance:\n"
  },
  {
    "path": "docs/source/_templates/autosummary/nn.rst",
    "chars": 432,
    "preview": "{{ fullname | escape | underline}}\n\n.. currentmodule:: {{ module }}\n\n{% if objname != \"MessagePassing\" %}\n.. autoclass::"
  },
  {
    "path": "docs/source/_templates/autosummary/only_class.rst",
    "chars": 120,
    "preview": "{{ fullname | escape | underline}}\n\n.. currentmodule:: {{ module }}\n\n.. autoclass:: {{ objname }}\n   :show-inheritance:\n"
  },
  {
    "path": "docs/source/advanced/batching.rst",
    "chars": 12408,
    "preview": "Advanced Mini-Batching\n======================\n\nThe creation of mini-batching is crucial for letting the training of a de"
  },
  {
    "path": "docs/source/advanced/compile.rst",
    "chars": 6798,
    "preview": "Compiled Graph Neural Networks\n==============================\n\n:meth:`torch.compile` is the latest method to speed up yo"
  },
  {
    "path": "docs/source/advanced/cpu_affinity.rst",
    "chars": 13181,
    "preview": "CPU Affinity for PyG Workloads\n==============================\n\nThe performance of :pyg:`PyG` workloads using CPU can be "
  },
  {
    "path": "docs/source/advanced/graphgym.rst",
    "chars": 13029,
    "preview": "Managing Experiments with GraphGym\n==================================\n\nGraphGym is a platform for **designing and evalua"
  },
  {
    "path": "docs/source/advanced/hgam.rst",
    "chars": 8736,
    "preview": "Hierarchical Neighborhood Sampling\n==================================\n\nOne of the design principles of :pyg:`PyG` is tha"
  },
  {
    "path": "docs/source/advanced/jit.rst",
    "chars": 4446,
    "preview": "TorchScript Support\n===================\n\nTorchScript is a way to create serializable and optimizable models from :pytorc"
  },
  {
    "path": "docs/source/advanced/remote.rst",
    "chars": 12448,
    "preview": "Scaling Up GNNs via Remote Backends\n===================================\n\n:pyg:`PyG` (2.2 and beyond) includes numerous p"
  },
  {
    "path": "docs/source/advanced/sparse_tensor.rst",
    "chars": 8988,
    "preview": "Memory-Efficient Aggregations\n=============================\n\nThe :class:`~torch_geometric.nn.conv.message_passing.Messag"
  },
  {
    "path": "docs/source/cheatsheet/data_cheatsheet.rst",
    "chars": 4945,
    "preview": "Dataset Cheatsheet\n==================\n\n.. note::\n\n    This dataset statistics table is a **work in progress**.\n    Pleas"
  },
  {
    "path": "docs/source/cheatsheet/gnn_cheatsheet.rst",
    "chars": 5535,
    "preview": "GNN Cheatsheet\n==============\n\n* :class:`~torch_sparse.SparseTensor`: If checked (✓), supports message passing based on "
  },
  {
    "path": "docs/source/conf.py",
    "chars": 2839,
    "preview": "import datetime\nimport os.path as osp\nimport sys\n\nimport pyg_sphinx_theme\n\nimport torch_geometric\n\nauthor = 'PyG Team'\np"
  },
  {
    "path": "docs/source/external/resources.rst",
    "chars": 6448,
    "preview": "External Resources\n==================\n\n* Fey *et al.*: **PyG 2.0: Scalable Learning on Real World Graphs** [`Paper <http"
  },
  {
    "path": "docs/source/get_started/colabs.rst",
    "chars": 7778,
    "preview": "Colab Notebooks and Video Tutorials\n===================================\n\nOfficial Examples\n-----------------\n\nWe have pr"
  },
  {
    "path": "docs/source/get_started/introduction.rst",
    "chars": 16606,
    "preview": "Introduction by Example\n=======================\n\nWe shortly introduce the fundamental concepts of :pyg:`PyG` through sel"
  },
  {
    "path": "docs/source/index.rst",
    "chars": 2261,
    "preview": ":github_url: https://github.com/pyg-team/pytorch_geometric\n\nPyG Documentation\n=================\n\n:pyg:`null` **PyG** *(P"
  },
  {
    "path": "docs/source/install/installation.rst",
    "chars": 12768,
    "preview": "Installation\n============\n\n:pyg:`PyG` is available for :python:`Python 3.10` to :python:`Python 3.14`.\n\n.. note::\n   We "
  },
  {
    "path": "docs/source/install/quick-start.html",
    "chars": 3582,
    "preview": "<style>\n  .quick-start {\n    display: flex;\n    flex-direction: row;\n    flex-wrap: nowrap;\n    margin-bottom: 20px;\n  }"
  },
  {
    "path": "docs/source/modules/contrib.rst",
    "chars": 2090,
    "preview": "torch_geometric.contrib\n=======================\n\n.. currentmodule:: torch_geometric.contrib\n\n:obj:`torch_geometric.contr"
  },
  {
    "path": "docs/source/modules/data.rst",
    "chars": 1390,
    "preview": "torch_geometric.data\n====================\n\n.. contents:: Contents\n    :local:\n\nData Objects\n------------\n\n.. currentmodu"
  },
  {
    "path": "docs/source/modules/datasets.rst",
    "chars": 1832,
    "preview": "torch_geometric.datasets\n========================\n\n.. contents:: Contents\n    :local:\n\nHomogeneous Datasets\n------------"
  },
  {
    "path": "docs/source/modules/distributed.rst",
    "chars": 634,
    "preview": "torch_geometric.distributed\n===========================\n\n.. warning::\n    ``torch_geometric.distributed`` has been depre"
  },
  {
    "path": "docs/source/modules/explain.rst",
    "chars": 2882,
    "preview": "torch_geometric.explain\n=======================\n\n.. currentmodule:: torch_geometric.explain\n\n.. warning::\n\n    This modu"
  },
  {
    "path": "docs/source/modules/graphgym.rst",
    "chars": 986,
    "preview": "torch_geometric.graphgym\n========================\n\n.. contents:: Contents\n    :local:\n\nWorkflow and Register Modules\n---"
  },
  {
    "path": "docs/source/modules/llm.rst",
    "chars": 693,
    "preview": "torch_geometric.llm\n=======================\n\n.. currentmodule:: torch_geometric.llm\n\n.. autosummary::\n   :nosignatures:\n"
  },
  {
    "path": "docs/source/modules/loader.rst",
    "chars": 261,
    "preview": "torch_geometric.loader\n======================\n\n.. currentmodule:: torch_geometric.loader\n\n.. autosummary::\n   :nosignatu"
  },
  {
    "path": "docs/source/modules/metrics.rst",
    "chars": 373,
    "preview": "torch_geometric.metrics\n=======================\n\n.. contents:: Contents\n    :local:\n\nLink Prediction Metrics\n-----------"
  },
  {
    "path": "docs/source/modules/nn.rst",
    "chars": 11236,
    "preview": "torch_geometric.nn\n==================\n\n.. contents:: Contents\n    :local:\n\n.. autoclass:: torch_geometric.nn.sequential."
  },
  {
    "path": "docs/source/modules/profile.rst",
    "chars": 290,
    "preview": "torch_geometric.profile\n=======================\n\n.. currentmodule:: torch_geometric.profile\n\n.. autosummary::\n    :nosig"
  },
  {
    "path": "docs/source/modules/root.rst",
    "chars": 522,
    "preview": "torch_geometric\n===============\n\nTensor Objects\n--------------\n\n.. currentmodule:: torch_geometric\n\n.. autosummary::\n   "
  },
  {
    "path": "docs/source/modules/sampler.rst",
    "chars": 419,
    "preview": "torch_geometric.sampler\n=======================\n\n.. currentmodule:: torch_geometric.sampler\n\n.. autosummary::\n   :nosign"
  },
  {
    "path": "docs/source/modules/transforms.rst",
    "chars": 1734,
    "preview": "torch_geometric.transforms\n==========================\n\n.. contents:: Contents\n    :local:\n\nTransforms are a general way "
  },
  {
    "path": "docs/source/modules/utils.rst",
    "chars": 260,
    "preview": "torch_geometric.utils\n=====================\n\n.. currentmodule:: torch_geometric.utils\n\n.. autosummary::\n    :nosignature"
  },
  {
    "path": "docs/source/notes/batching.rst",
    "chars": 48,
    "preview": ":orphan:\n\n.. include:: ../advanced/batching.rst\n"
  },
  {
    "path": "docs/source/notes/cheatsheet.rst",
    "chars": 5285,
    "preview": ":orphan:\n\nGNN Cheatsheet\n==============\n\n* :class:`~torch_sparse.SparseTensor`: If checked (✓), supports message passing"
  },
  {
    "path": "docs/source/notes/colabs.rst",
    "chars": 49,
    "preview": ":orphan:\n\n.. include:: ../get_started/colabs.rst\n"
  },
  {
    "path": "docs/source/notes/create_dataset.rst",
    "chars": 54,
    "preview": ":orphan:\n\n.. include:: ../tutorial/create_dataset.rst\n"
  },
  {
    "path": "docs/source/notes/create_gnn.rst",
    "chars": 50,
    "preview": ":orphan:\n\n.. include:: ../tutorial/create_gnn.rst\n"
  },
  {
    "path": "docs/source/notes/data_cheatsheet.rst",
    "chars": 4955,
    "preview": ":orphan:\n\nDataset Cheatsheet\n==================\n\n.. note::\n\n    This dataset statistics table is a **work in progress**."
  },
  {
    "path": "docs/source/notes/explain.rst",
    "chars": 47,
    "preview": ":orphan:\n\n.. include:: ../tutorial/explain.rst\n"
  },
  {
    "path": "docs/source/notes/graphgym.rst",
    "chars": 48,
    "preview": ":orphan:\n\n.. include:: ../advanced/graphgym.rst\n"
  },
  {
    "path": "docs/source/notes/heterogeneous.rst",
    "chars": 53,
    "preview": ":orphan:\n\n.. include:: ../tutorial/heterogeneous.rst\n"
  },
  {
    "path": "docs/source/notes/installation.rst",
    "chars": 161,
    "preview": ":orphan:\n\n.. meta::\n   :http-equiv=refresh: 0; URL=../install/installation.html\n\nInstallation\n============\n\nThis page ha"
  },
  {
    "path": "docs/source/notes/introduction.rst",
    "chars": 55,
    "preview": ":orphan:\n\n.. include:: ../get_started/introduction.rst\n"
  },
  {
    "path": "docs/source/notes/jit.rst",
    "chars": 43,
    "preview": ":orphan:\n\n.. include:: ../advanced/jit.rst\n"
  },
  {
    "path": "docs/source/notes/load_csv.rst",
    "chars": 48,
    "preview": ":orphan:\n\n.. include:: ../tutorial/load_csv.rst\n"
  },
  {
    "path": "docs/source/notes/remote.rst",
    "chars": 46,
    "preview": ":orphan:\n\n.. include:: ../advanced/remote.rst\n"
  },
  {
    "path": "docs/source/notes/resources.rst",
    "chars": 49,
    "preview": ":orphan:\n\n.. include:: ../external/resources.rst\n"
  },
  {
    "path": "docs/source/notes/sparse_tensor.rst",
    "chars": 53,
    "preview": ":orphan:\n\n.. include:: ../advanced/sparse_tensor.rst\n"
  },
  {
    "path": "docs/source/tutorial/application.rst",
    "chars": 188,
    "preview": "Use-Cases & Applications\n========================\n\n.. nbgallery::\n    :name: rst-gallery\n\n    neighbor_loader\n    point_"
  },
  {
    "path": "docs/source/tutorial/compile.rst",
    "chars": 47,
    "preview": ":orphan:\n\n.. include:: ../advanced/compile.rst\n"
  },
  {
    "path": "docs/source/tutorial/create_dataset.rst",
    "chars": 9032,
    "preview": "Creating Graph Datasets\n=======================\n\nAlthough :pyg:`PyG` already contains a lot of useful datasets, you may "
  },
  {
    "path": "docs/source/tutorial/create_gnn.rst",
    "chars": 13226,
    "preview": "Creating Message Passing Networks\n=================================\n\nGeneralizing the convolution operator to irregular "
  },
  {
    "path": "docs/source/tutorial/dataset.rst",
    "chars": 150,
    "preview": "Working with Graph Datasets\n===========================\n\n.. nbgallery::\n    :name: rst-gallery\n\n    create_dataset\n    l"
  },
  {
    "path": "docs/source/tutorial/dataset_splitting.rst",
    "chars": 7330,
    "preview": "Dataset Splitting\n=================\n\nDataset splitting is a critical step in graph machine learning, where we divide our"
  },
  {
    "path": "docs/source/tutorial/distributed.rst",
    "chars": 185,
    "preview": ".. _distributed_tutorials:\n\nDistributed Training\n====================\n\n.. nbgallery::\n    :name: rst-gallery\n\n    multi_"
  },
  {
    "path": "docs/source/tutorial/distributed_pyg.rst",
    "chars": 18285,
    "preview": "Distributed Training in PyG\n===========================\n\n.. warning::\n    ``torch_geometric.distributed`` has been depre"
  },
  {
    "path": "docs/source/tutorial/explain.rst",
    "chars": 9402,
    "preview": "Explaining Graph Neural Networks\n================================\n\nInterpreting GNN models is crucial for many use cases"
  },
  {
    "path": "docs/source/tutorial/gnn_design.rst",
    "chars": 137,
    "preview": "Design of Graph Neural Networks\n===============================\n\n.. nbgallery::\n    :name: rst-gallery\n\n    create_gnn\n "
  },
  {
    "path": "docs/source/tutorial/graph_transformer.rst",
    "chars": 13640,
    "preview": "Graph Transformer\n=================\n\n`Transformer <https://arxiv.org/abs/1706.03762>`_ is an effictive architecture in `"
  },
  {
    "path": "docs/source/tutorial/heterogeneous.rst",
    "chars": 24705,
    "preview": "Heterogeneous Graph Learning\n============================\n\nA large set of real-world datasets are stored as heterogeneou"
  },
  {
    "path": "docs/source/tutorial/load_csv.rst",
    "chars": 10712,
    "preview": "Loading Graphs from CSV\n=======================\n\nIn this example, we will show how to load a set of :obj:`*.csv` files a"
  },
  {
    "path": "docs/source/tutorial/multi_gpu_vanilla.rst",
    "chars": 9559,
    "preview": "Multi-GPU Training in Pure PyTorch\n==================================\n\n.. note::\n    For multi-GPU training with cuGraph"
  },
  {
    "path": "docs/source/tutorial/multi_node_multi_gpu_vanilla.rst",
    "chars": 6582,
    "preview": "Multi-Node Training using SLURM\n===============================\n\n.. note::\n    For multi-GPU training with cuGraph, refe"
  },
  {
    "path": "docs/source/tutorial/neighbor_loader.rst",
    "chars": 12672,
    "preview": "Scaling GNNs via Neighbor Sampling\n==================================\n\nOne of the challenges of Graph Neural Networks is"
  },
  {
    "path": "docs/source/tutorial/point_cloud.rst",
    "chars": 13272,
    "preview": "Point Cloud Processing\n======================\n\nThis tutorial explains how to leverage Graph Neural Networks (GNNs) for o"
  },
  {
    "path": "docs/source/tutorial/shallow_node_embeddings.rst",
    "chars": 8880,
    "preview": "Shallow Node Embeddings\n=======================\n\nIn this tutorial, we will take a closer look at how to learn *shallow n"
  },
  {
    "path": "examples/README.md",
    "chars": 4985,
    "preview": "# Examples\n\nThis folder contains a plethora of examples covering different GNN use-cases.\nThis readme highlights some ke"
  },
  {
    "path": "examples/agnn.py",
    "chars": 1957,
    "preview": "import os.path as osp\n\nimport torch\nimport torch.nn.functional as F\n\nimport torch_geometric.transforms as T\nfrom torch_g"
  },
  {
    "path": "examples/ar_link_pred.py",
    "chars": 7078,
    "preview": "import argparse\nimport os.path as osp\n\nimport torch\nimport torch.nn.functional as F\n\nimport torch_geometric.transforms a"
  },
  {
    "path": "examples/argva_node_clustering.py",
    "chars": 4419,
    "preview": "import os.path as osp\n\nimport matplotlib.pyplot as plt\nimport torch\nfrom sklearn.cluster import KMeans\nfrom sklearn.mani"
  },
  {
    "path": "examples/arma.py",
    "chars": 2347,
    "preview": "import os.path as osp\n\nimport torch\nimport torch.nn.functional as F\n\nimport torch_geometric.transforms as T\nfrom torch_g"
  },
  {
    "path": "examples/attentive_fp.py",
    "chars": 5407,
    "preview": "import os.path as osp\nfrom math import sqrt\n\nimport torch\nimport torch.nn.functional as F\nfrom rdkit import Chem\n\nfrom t"
  },
  {
    "path": "examples/autoencoder.py",
    "chars": 3995,
    "preview": "import argparse\nimport os.path as osp\nimport time\n\nimport torch\n\nimport torch_geometric.transforms as T\nfrom torch_geome"
  },
  {
    "path": "examples/cluster_gcn_ppi.py",
    "chars": 3278,
    "preview": "import os.path as osp\nimport time\n\nimport torch\nimport torch.nn.functional as F\nfrom sklearn.metrics import f1_score\n\nfr"
  },
  {
    "path": "examples/cluster_gcn_reddit.py",
    "chars": 3672,
    "preview": "import time\n\nimport torch\nimport torch.nn.functional as F\nfrom torch.nn import ModuleList\nfrom tqdm import tqdm\n\nfrom to"
  },
  {
    "path": "examples/colors_topk_pool.py",
    "chars": 3825,
    "preview": "import copy\nimport os.path as osp\n\nimport torch\nimport torch.nn.functional as F\nfrom torch.nn import Linear as Lin\nfrom "
  },
  {
    "path": "examples/compile/gcn.py",
    "chars": 2667,
    "preview": "import os.path as osp\nimport time\n\nimport torch\nimport torch.nn.functional as F\n\nimport torch_geometric.transforms as T\n"
  },
  {
    "path": "examples/compile/gin.py",
    "chars": 3147,
    "preview": "import os.path as osp\nimport time\n\nimport torch\nimport torch.nn.functional as F\n\nimport torch_geometric\nfrom torch_geome"
  },
  {
    "path": "examples/contrib/README.md",
    "chars": 1393,
    "preview": "# Examples for External Contributions\n\nThis directory contains examples demonstrating functionality included in the `tor"
  },
  {
    "path": "examples/contrib/pgm_explainer_graph_classification.py",
    "chars": 4040,
    "preview": "\"\"\"This is an example of using the PGM explainer algorithm on a graph\nclassification task.\n\"\"\"\nimport os.path as osp\n\nim"
  },
  {
    "path": "examples/contrib/pgm_explainer_node_classification.py",
    "chars": 2392,
    "preview": "\"\"\"This is an example of using the PGM explainer algorithm on a node\nclassification task.\n\"\"\"\nimport os.path as osp\n\nimp"
  },
  {
    "path": "examples/contrib/rbcd_attack.py",
    "chars": 7759,
    "preview": "import copy\nimport os.path as osp\nfrom typing import Optional\n\nimport torch\nimport torch.nn.functional as F\nfrom torch i"
  }
]

// ... and 1287 more files (download for full content)

About this extraction

This page contains the full source code of the pyg-team/pytorch_geometric GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1487 files (6.8 MB), approximately 1.9M tokens, and a symbol index with 8209 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!