From e6afd74fe6f3cf21681731441e971bb2f4ec2daa Mon Sep 17 00:00:00 2001 From: Halley Fritze <97766437+hfr1tz3@users.noreply.github.com> Date: Mon, 17 Jun 2024 14:46:02 -0700 Subject: [PATCH 01/26] Challenge Scaffolding Created Necessary files for ICML challenge. --- .../graph2combinatorial/mapper_lifting.yaml | 1 + modules/transforms/data_transform.py | 1 + .../graph2combinatorial/mapper_lifting.py | 8 ++++ .../test_mapper_lifting.py | 6 +++ .../graph2combinatorial/mapper_lifting.ipynb | 42 +++++++++++++++++++ 5 files changed, 58 insertions(+) create mode 100644 configs/transforms/liftings/graph2combinatorial/mapper_lifting.yaml create mode 100644 modules/transforms/liftings/graph2combinatorial/mapper_lifting.py create mode 100644 test/transforms/liftings/graph2combinatorial/test_mapper_lifting.py create mode 100644 tutorials/graph2combinatorial/mapper_lifting.ipynb diff --git a/configs/transforms/liftings/graph2combinatorial/mapper_lifting.yaml b/configs/transforms/liftings/graph2combinatorial/mapper_lifting.yaml new file mode 100644 index 00000000..90f3de5b --- /dev/null +++ b/configs/transforms/liftings/graph2combinatorial/mapper_lifting.yaml @@ -0,0 +1 @@ +'YAML' File \ No newline at end of file diff --git a/modules/transforms/data_transform.py b/modules/transforms/data_transform.py index 59253ecf..b3647495 100755 --- a/modules/transforms/data_transform.py +++ b/modules/transforms/data_transform.py @@ -31,6 +31,7 @@ "OneHotDegreeFeatures": OneHotDegreeFeatures, "NodeFeaturesToFloat": NodeFeaturesToFloat, "KeepOnlyConnectedComponent": KeepOnlyConnectedComponent, + "MapperLifting": MapperLifting } diff --git a/modules/transforms/liftings/graph2combinatorial/mapper_lifting.py b/modules/transforms/liftings/graph2combinatorial/mapper_lifting.py new file mode 100644 index 00000000..d66c8a4d --- /dev/null +++ b/modules/transforms/liftings/graph2combinatorial/mapper_lifting.py @@ -0,0 +1,8 @@ +import numpy as np + +class MapperLifting(base): + + _hyperparameters = {} + + def __init__(): + return None \ No newline at end of file diff --git a/test/transforms/liftings/graph2combinatorial/test_mapper_lifting.py b/test/transforms/liftings/graph2combinatorial/test_mapper_lifting.py new file mode 100644 index 00000000..68f6d8ee --- /dev/null +++ b/test/transforms/liftings/graph2combinatorial/test_mapper_lifting.py @@ -0,0 +1,6 @@ +import numpy as np + +class TestMapperLifting(): + + def simple_ex(): + return None \ No newline at end of file diff --git a/tutorials/graph2combinatorial/mapper_lifting.ipynb b/tutorials/graph2combinatorial/mapper_lifting.ipynb new file mode 100644 index 00000000..0e490923 --- /dev/null +++ b/tutorials/graph2combinatorial/mapper_lifting.ipynb @@ -0,0 +1,42 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "6da220ee-dd34-4380-9c78-0f2a9e610b1f", + "metadata": {}, + "source": [ + "## Mapper Lifting Tutorial.\n", + "Based on [this paper](https://arxiv.org/pdf/2206.00606)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5e0e787d-c2e7-4933-be4d-c422c981ab95", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From fab2db77d6c2c7d558e87f0315da9661bd80981c Mon Sep 17 00:00:00 2001 From: Halley Fritze <97766437+hfr1tz3@users.noreply.github.com> Date: Fri, 21 Jun 2024 15:03:15 -0700 Subject: [PATCH 02/26] Notes on Pipeline --- .../graph2combinatorial/mapper_lifting.yaml | 1 - .../graph2hypergraph/mapper_lifting.yaml | 2 + modules/data/utils/utils.py | 16 ++-- modules/transforms/data_transform.py | 2 +- .../feature_liftings/feature_liftings.py | 4 +- .../graph2combinatorial/mapper_lifting.py | 4 +- .../test_mapper_lifting.py | 6 -- .../graph2hypergraph/test_mapper_lifting.py | 6 ++ .../graph2combinatorial/mapper_lifting.ipynb | 42 --------- .../graph2hypergraph/mapper_lifting.ipynb | 92 +++++++++++++++++++ 10 files changed, 114 insertions(+), 61 deletions(-) delete mode 100644 configs/transforms/liftings/graph2combinatorial/mapper_lifting.yaml create mode 100644 configs/transforms/liftings/graph2hypergraph/mapper_lifting.yaml delete mode 100644 test/transforms/liftings/graph2combinatorial/test_mapper_lifting.py create mode 100644 test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py delete mode 100644 tutorials/graph2combinatorial/mapper_lifting.ipynb create mode 100644 tutorials/graph2hypergraph/mapper_lifting.ipynb diff --git a/configs/transforms/liftings/graph2combinatorial/mapper_lifting.yaml b/configs/transforms/liftings/graph2combinatorial/mapper_lifting.yaml deleted file mode 100644 index 90f3de5b..00000000 --- a/configs/transforms/liftings/graph2combinatorial/mapper_lifting.yaml +++ /dev/null @@ -1 +0,0 @@ -'YAML' File \ No newline at end of file diff --git a/configs/transforms/liftings/graph2hypergraph/mapper_lifting.yaml b/configs/transforms/liftings/graph2hypergraph/mapper_lifting.yaml new file mode 100644 index 00000000..aa38e5c5 --- /dev/null +++ b/configs/transforms/liftings/graph2hypergraph/mapper_lifting.yaml @@ -0,0 +1,2 @@ +transform_type: "lifting" +transform_name: "MapperLifting" \ No newline at end of file diff --git a/modules/data/utils/utils.py b/modules/data/utils/utils.py index 93ab5021..e024ab51 100755 --- a/modules/data/utils/utils.py +++ b/modules/data/utils/utils.py @@ -50,16 +50,16 @@ def get_complex_connectivity(complex, max_rank, signed=False): ) except ValueError: # noqa: PERF203 if connectivity_info == "incidence": - connectivity[f"{connectivity_info}_{rank_idx}"] = ( - generate_zero_sparse_connectivity( - m=practical_shape[rank_idx - 1], n=practical_shape[rank_idx] - ) + connectivity[ + f"{connectivity_info}_{rank_idx}" + ] = generate_zero_sparse_connectivity( + m=practical_shape[rank_idx - 1], n=practical_shape[rank_idx] ) else: - connectivity[f"{connectivity_info}_{rank_idx}"] = ( - generate_zero_sparse_connectivity( - m=practical_shape[rank_idx], n=practical_shape[rank_idx] - ) + connectivity[ + f"{connectivity_info}_{rank_idx}" + ] = generate_zero_sparse_connectivity( + m=practical_shape[rank_idx], n=practical_shape[rank_idx] ) connectivity["shape"] = practical_shape return connectivity diff --git a/modules/transforms/data_transform.py b/modules/transforms/data_transform.py index b3647495..55f4ea0c 100755 --- a/modules/transforms/data_transform.py +++ b/modules/transforms/data_transform.py @@ -31,7 +31,7 @@ "OneHotDegreeFeatures": OneHotDegreeFeatures, "NodeFeaturesToFloat": NodeFeaturesToFloat, "KeepOnlyConnectedComponent": KeepOnlyConnectedComponent, - "MapperLifting": MapperLifting + "MapperLifting": MapperLifting, } diff --git a/modules/transforms/feature_liftings/feature_liftings.py b/modules/transforms/feature_liftings/feature_liftings.py index 687f9f1e..ae8fd287 100644 --- a/modules/transforms/feature_liftings/feature_liftings.py +++ b/modules/transforms/feature_liftings/feature_liftings.py @@ -28,7 +28,9 @@ def lift_features( ------- torch_geometric.data.Data | dict The lifted data.""" - keys = sorted([key.split("_")[1] for key in data.keys() if "incidence" in key]) # noqa : SIM118 + keys = sorted( + [key.split("_")[1] for key in data.keys() if "incidence" in key] + ) # noqa : SIM118 for elem in keys: if f"x_{elem}" not in data: idx_to_project = 0 if elem == "hyperedges" else int(elem) - 1 diff --git a/modules/transforms/liftings/graph2combinatorial/mapper_lifting.py b/modules/transforms/liftings/graph2combinatorial/mapper_lifting.py index d66c8a4d..02726963 100644 --- a/modules/transforms/liftings/graph2combinatorial/mapper_lifting.py +++ b/modules/transforms/liftings/graph2combinatorial/mapper_lifting.py @@ -1,8 +1,8 @@ import numpy as np -class MapperLifting(base): +class MapperLifting(base): _hyperparameters = {} def __init__(): - return None \ No newline at end of file + return None diff --git a/test/transforms/liftings/graph2combinatorial/test_mapper_lifting.py b/test/transforms/liftings/graph2combinatorial/test_mapper_lifting.py deleted file mode 100644 index 68f6d8ee..00000000 --- a/test/transforms/liftings/graph2combinatorial/test_mapper_lifting.py +++ /dev/null @@ -1,6 +0,0 @@ -import numpy as np - -class TestMapperLifting(): - - def simple_ex(): - return None \ No newline at end of file diff --git a/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py b/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py new file mode 100644 index 00000000..19dda1f4 --- /dev/null +++ b/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py @@ -0,0 +1,6 @@ +import numpy as np + + +class TestMapperLifting: + def simple_ex(): + return None diff --git a/tutorials/graph2combinatorial/mapper_lifting.ipynb b/tutorials/graph2combinatorial/mapper_lifting.ipynb deleted file mode 100644 index 0e490923..00000000 --- a/tutorials/graph2combinatorial/mapper_lifting.ipynb +++ /dev/null @@ -1,42 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "6da220ee-dd34-4380-9c78-0f2a9e610b1f", - "metadata": {}, - "source": [ - "## Mapper Lifting Tutorial.\n", - "Based on [this paper](https://arxiv.org/pdf/2206.00606)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5e0e787d-c2e7-4933-be4d-c422c981ab95", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.5" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb new file mode 100644 index 00000000..1dcc2524 --- /dev/null +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -0,0 +1,92 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "6da220ee-dd34-4380-9c78-0f2a9e610b1f", + "metadata": {}, + "source": [ + "## Mapper Lifting Tutorial.\n", + "Based on [this paper](https://arxiv.org/pdf/2206.00606). See [Figure 30](https://arxiv.org/pdf/2206.00606) description.\n", + "\n", + "1. Begin with graph $X$ and function $g\\colon X^0\\to [a,b]$.\n", + "2. Cover codomain with $\\mathcal{U}$. (`gtda.mapper.cover.CubicalCover`)<-- Marissa will handwrite (Halley is compromised)\n", + "3. Pullback $g^{-1}(\\mathcal{U})$ and this covers $X$. (see 4.)\n", + "4. Perform a \"clustering\" where clusters are determined by connected componenets in each pullback sets $g^{-1}(U_\\alpha)$ (`toponetx.algorithms.components.connected_compoenents`)\n", + "5. This is the hypergraph and we can color via the function $g$ (`toponetx.classes.colored_hypergraph.ColoredHypergraph`)\n", + "\n", + "6. (**optional**) Take nerve and construct $k$-mapper for simplicial complex. " + ] + }, + { + "cell_type": "markdown", + "id": "404710c4-0de7-4fee-9e58-d811314887a9", + "metadata": {}, + "source": [ + "- For weighted graphs we could do the \"clustering\" on the pullback via a thresholding on the on the weights on the original graph edges. (Can make parameter and use DBSCAN for this case or something)." + ] + }, + { + "cell_type": "markdown", + "id": "7e325d28-dad7-41ae-8706-5e5c5dae225c", + "metadata": {}, + "source": [ + "**Filter**\n", + "- Could construct colored hypergraph where the coloring is based on the filter $g$.\n", + "- For graph `torch_geometric.data.Data` have the user choose filter function. Default should be PCA on `torch_geometric.data.Data.pos`. Use can input their own filter function just check that transform is quantitative. If function is on edges, user may have to specify \"filter type\": (Node, Edge) or position. Filters we construct \"in house\" should just be some projection function (see `gtda.mapper.filter.Projection`).\n", + "- If projection is to some node or edge attribute have the user have attr: str as the parameter. Function will check if that is a node or edge attr. Maybe add extra arg to specify (default: None) or in {node, edge,pos, None} to specify attribute dictionary we should filter from.\n", + "- Filter Idea: If there is no features on the data and it is just a graph. Take graph distance for each node to random node in the graph. There is also the spectral distance (smallest nonzero eigenvector of graph laplacian and projects each node corresponding to that eigenvector) and can capture circle data in the graph. Default filter (no atts) can be spectral projection." + ] + }, + { + "cell_type": "markdown", + "id": "73dc0594-61cb-4ffd-8483-47582d2044bf", + "metadata": {}, + "source": [ + "**Cover**\n", + "- Parameters `resolution`: number of intervals to cover codomain in (int: default 10)\n", + "- `gain`: percentage overlap for each neighboring interval in the cover (float: 0.3)\n", + "- fit method. This should take input data (filtered data) and product intervals for each cover set in codomain. Could have atts: `.cover_sets` which is array of shape (n_intervals, 2)\n", + "- transform_method. This should take `.cover_sets` and produce mask (n_samples, n_cover sets) to describe which cover sets contain each data point." + ] + }, + { + "cell_type": "markdown", + "id": "935813e3-c42e-46d0-9d32-383e630cbf32", + "metadata": {}, + "source": [ + "**Hypergraph**\n", + "- This is the output.\n", + "- Transform the mask given by the cover and convert it correctly into a hypergraph colored by the filter function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b005930e-5df8-4214-a9c2-b31ab7cf845f", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ICML", + "language": "python", + "name": "icml" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From bc8e6e8feb6a67b9a937254cac7185f05f307942 Mon Sep 17 00:00:00 2001 From: Halley Fritze <97766437+hfr1tz3@users.noreply.github.com> Date: Sun, 23 Jun 2024 16:22:32 -0700 Subject: [PATCH 03/26] Skeleton Outline --- .../graph2combinatorial/mapper_lifting.py | 8 -- .../graph2hypergraph/mapper_lifting.py | 80 +++++++++++++++++++ .../graph2hypergraph/mapper_lifting.ipynb | 2 +- 3 files changed, 81 insertions(+), 9 deletions(-) delete mode 100644 modules/transforms/liftings/graph2combinatorial/mapper_lifting.py create mode 100644 modules/transforms/liftings/graph2hypergraph/mapper_lifting.py diff --git a/modules/transforms/liftings/graph2combinatorial/mapper_lifting.py b/modules/transforms/liftings/graph2combinatorial/mapper_lifting.py deleted file mode 100644 index 02726963..00000000 --- a/modules/transforms/liftings/graph2combinatorial/mapper_lifting.py +++ /dev/null @@ -1,8 +0,0 @@ -import numpy as np - - -class MapperLifting(base): - _hyperparameters = {} - - def __init__(): - return None diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py new file mode 100644 index 00000000..ebd5170a --- /dev/null +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -0,0 +1,80 @@ +import torch +import torch_geometric + +from modules.transforms.liftings.graph2hypergraph.base import Graph2HypergraphLifting + +class MapperCover(): + def __init__(): + self.resolution = resolution + self.gain = gain + + def fit_transform(self, data): + return mask + +class MapperLifting(Graph2HypergraphLifting): + + def __init__(self, projection_domain = 'pos', projection_attr = None, resolution = 10, gain = 0.3, **kwargs): + super.__init__(**kwargs) + self.projection_domain = projection_domain + self.projection_attr = projection_attr + self.resolution = resoluion + self.gain = gain + """ + Need to construct the filter functions. Slightly confused about + torch_geometric.data.Data type. data.x will give feature matrix + for nodes, but it can also have string based feature attributes? + Maybe we should just do some sort of eccentricity filter for these + feature matrices (both for edges and nodes). Maybe also for position? + """ + def _filter_graph(self, data): + verify_graph_attrs(data, self.projection_domain, self.projection_attr) + filtered_data = data.x + return filtered_data + + def _filter_pos(self, data): + if self.projection_attr = None + # PCA onto 1st principle component + _, _, V = torch.pca_lowrank(data.pos) + filtered_data = torch.matmul(data.pos, V[:,:1]) + return filtered_data + + def _filter(self, data): + if projection_domain == 'pos': + filtered_data = self._filter_pos(data) + if projection_domain == 'node': + filtered_data = self._filter_graph(data) + return filtered_data + + def lift_topology(self, data: torch_geometric.data.Data) -> dict: + r"""Lifts the topology of a graph to hypergraph domain by considering k-nearest neighbors. + + Parameters + ---------- + data : torch_geometric.data.Data + The input data to be lifted. + + Returns + ------- + dict + The lifted topology. + """ + filtered_data = self._filter(data) + cover = MapperCover(self.resolution, self.gain) + cover_mask = cover.fit_transform(filtered_data) + + return {"incidence_hyperedges": a, + "num_hyperedges": b, + "x_0": c + } + + @staticmethod + def verify_parameters(): + return None + @staticmethod + def verify_graph_attrs(data, obj, attr): + if obj == 'node': + assert data.is_node_attr(attr), \ + f'{attr} is not in {obj} attributes.' + if obj == 'edge': + data.is_edge_attr(attr), \ + f'{attr} is not in {obj} attributes.' \ No newline at end of file diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb index 1dcc2524..4550ff8e 100644 --- a/tutorials/graph2hypergraph/mapper_lifting.ipynb +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -84,7 +84,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.9.5" } }, "nbformat": 4, From d2d8373406bd30e7bab31dcd5f673e587a6fbd0c Mon Sep 17 00:00:00 2001 From: Marissa Masden Date: Mon, 24 Jun 2024 13:49:43 -0700 Subject: [PATCH 04/26] fixed small bugs, created testing ipynb --- modules/transforms/data_transform.py | 6 +++- .../graph2hypergraph/mapper_lifting.py | 35 +++++++++++++------ tutorials/graph2hypergraph/knn_lifting.ipynb | 6 ++-- .../graph2hypergraph/mapper_lifting.ipynb | 24 ++++++++++--- .../graph2simplicial/clique_lifting.ipynb | 6 ++-- 5 files changed, 55 insertions(+), 22 deletions(-) diff --git a/modules/transforms/data_transform.py b/modules/transforms/data_transform.py index 55f4ea0c..751c6b9a 100755 --- a/modules/transforms/data_transform.py +++ b/modules/transforms/data_transform.py @@ -10,12 +10,16 @@ from modules.transforms.feature_liftings.feature_liftings import ProjectionSum from modules.transforms.liftings.graph2cell.cycle_lifting import CellCycleLifting from modules.transforms.liftings.graph2hypergraph.knn_lifting import ( - HypergraphKNNLifting, + HypergraphKNNLifting +) +from modules.transforms.liftings.graph2hypergraph.mapper_lifting import ( + MapperLifting ) from modules.transforms.liftings.graph2simplicial.clique_lifting import ( SimplicialCliqueLifting, ) + TRANSFORMS = { # Graph -> Hypergraph "HypergraphKNNLifting": HypergraphKNNLifting, diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index ebd5170a..517f1912 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -4,11 +4,24 @@ from modules.transforms.liftings.graph2hypergraph.base import Graph2HypergraphLifting class MapperCover(): - def __init__(): + def __init__(self, resolution = 10, gain = 0.3): + """ Resolution: Number of intervals to cover codomain in. (Default 10) + Gain: Proportion of interval which overlaps with next interval on each end. + """ + + assert gain > 0 and gain < 0.5, "Gain must be a proportion greater than 0 and less than 0.5." + self.resolution = resolution self.gain = gain - def fit_transform(self, data): + def fit_transform(self, data_attribute): + """Inputs data: (n x 1) Tensor of values for filter ? + Outputs mask: (n x resolution) boolean Tensor + """ + data_range = torch.max(data)-torch.min(data_attribute) + + + return mask class MapperLifting(Graph2HypergraphLifting): @@ -32,7 +45,7 @@ def _filter_graph(self, data): return filtered_data def _filter_pos(self, data): - if self.projection_attr = None + if self.projection_attr == None: # PCA onto 1st principle component _, _, V = torch.pca_lowrank(data.pos) filtered_data = torch.matmul(data.pos, V[:,:1]) @@ -58,14 +71,14 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: dict The lifted topology. """ - filtered_data = self._filter(data) - cover = MapperCover(self.resolution, self.gain) - cover_mask = cover.fit_transform(filtered_data) - - return {"incidence_hyperedges": a, - "num_hyperedges": b, - "x_0": c - } + filtered_data = self._filter(data) + cover = MapperCover(self.resolution, self.gain) + cover_mask = cover.fit_transform(filtered_data) + + return {"incidence_hyperedges": a, + "num_hyperedges": b, + "x_0": c + } @staticmethod def verify_parameters(): diff --git a/tutorials/graph2hypergraph/knn_lifting.ipynb b/tutorials/graph2hypergraph/knn_lifting.ipynb index 40bf15b9..1cd66433 100644 --- a/tutorials/graph2hypergraph/knn_lifting.ipynb +++ b/tutorials/graph2hypergraph/knn_lifting.ipynb @@ -325,7 +325,7 @@ ], "metadata": { "kernelspec": { - "display_name": "venv_topox", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -339,9 +339,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.3" + "version": "3.10.12" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb index 4550ff8e..37099c07 100644 --- a/tutorials/graph2hypergraph/mapper_lifting.ipynb +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -25,6 +25,14 @@ "- For weighted graphs we could do the \"clustering\" on the pullback via a thresholding on the on the weights on the original graph edges. (Can make parameter and use DBSCAN for this case or something)." ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "28298ec9-957c-4e9a-8923-67726e597e42", + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "id": "7e325d28-dad7-41ae-8706-5e5c5dae225c", @@ -37,6 +45,14 @@ "- Filter Idea: If there is no features on the data and it is just a graph. Take graph distance for each node to random node in the graph. There is also the spectral distance (smallest nonzero eigenvector of graph laplacian and projects each node corresponding to that eigenvector) and can capture circle data in the graph. Default filter (no atts) can be spectral projection." ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "f3ccc397-ca12-4186-ac47-80ca63c824ec", + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "id": "73dc0594-61cb-4ffd-8483-47582d2044bf", @@ -45,7 +61,7 @@ "**Cover**\n", "- Parameters `resolution`: number of intervals to cover codomain in (int: default 10)\n", "- `gain`: percentage overlap for each neighboring interval in the cover (float: 0.3)\n", - "- fit method. This should take input data (filtered data) and product intervals for each cover set in codomain. Could have atts: `.cover_sets` which is array of shape (n_intervals, 2)\n", + "- fit method. This should take input data (filtered data) and produce intervals for each cover set in codomain. Could have atts: `.cover_sets` which is array of shape (n_intervals, 2)\n", "- transform_method. This should take `.cover_sets` and produce mask (n_samples, n_cover sets) to describe which cover sets contain each data point." ] }, @@ -70,9 +86,9 @@ ], "metadata": { "kernelspec": { - "display_name": "ICML", + "display_name": "Python 3 (ipykernel)", "language": "python", - "name": "icml" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -84,7 +100,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.5" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/tutorials/graph2simplicial/clique_lifting.ipynb b/tutorials/graph2simplicial/clique_lifting.ipynb index 4d551516..03243e3e 100644 --- a/tutorials/graph2simplicial/clique_lifting.ipynb +++ b/tutorials/graph2simplicial/clique_lifting.ipynb @@ -360,7 +360,7 @@ ], "metadata": { "kernelspec": { - "display_name": "venv_topox", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -374,9 +374,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.3" + "version": "3.10.12" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } From 56c61514aac3adc6cc13f0989942615c7fdce544 Mon Sep 17 00:00:00 2001 From: Marissa Masden Date: Mon, 24 Jun 2024 14:44:47 -0700 Subject: [PATCH 05/26] Created MapperCover --- .../graph2hypergraph/mapper_lifting.py | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index 517f1912..4a06726d 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -5,8 +5,10 @@ class MapperCover(): def __init__(self, resolution = 10, gain = 0.3): - """ Resolution: Number of intervals to cover codomain in. (Default 10) + """ + Resolution: Number of intervals to cover codomain in. (Default 10) Gain: Proportion of interval which overlaps with next interval on each end. + Gain Must be greater than 0 and less than 0.5. """ assert gain > 0 and gain < 0.5, "Gain must be a proportion greater than 0 and less than 0.5." @@ -14,13 +16,31 @@ def __init__(self, resolution = 10, gain = 0.3): self.resolution = resolution self.gain = gain - def fit_transform(self, data_attribute): + def fit_transform(self, filtered_data): """Inputs data: (n x 1) Tensor of values for filter ? Outputs mask: (n x resolution) boolean Tensor """ - data_range = torch.max(data)-torch.min(data_attribute) + data_min = torch.min(filtered_data) + data_max = torch.max(filtered_data) + + data_range = torch.max(filtered_data)-torch.min(filtered_data) + + cover_width = data_range/(self.resolution - (self.resolution-1)*self.gain) + + lower_endpoints = torch.linspace(data_min, data_max-cover_width, self.resolution+1) + + + upper_endpoints = lower_endpoints+cover_width + + print(torch.stack([lower_endpoints, upper_endpoints])) + + lower_values = torch.ge(filtered_data, lower_endpoints) # want a n x resolution Boolean tensor + + upper_values = torch.le(filtered_data, upper_endpoints) # want a n x resolution Boolean tensor + + mask = torch.logical_and(lower_values,upper_values) return mask From b6bbd2263d29018e96ceaf822ba7cbd90253caea Mon Sep 17 00:00:00 2001 From: Marissa Masden Date: Mon, 24 Jun 2024 15:50:57 -0700 Subject: [PATCH 06/26] Implemented Laplacian Eigenmap --- .../graph2hypergraph/mapper_lifting.py | 46 ++++++++++++++----- .../graph2hypergraph/mapper_lifting.ipynb | 16 ++++++- 2 files changed, 49 insertions(+), 13 deletions(-) diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index 4a06726d..26bd4121 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -1,9 +1,12 @@ import torch import torch_geometric +from torch_geometric.transforms import AddLaplacianEigenvectorPE + from modules.transforms.liftings.graph2hypergraph.base import Graph2HypergraphLifting class MapperCover(): + def __init__(self, resolution = 10, gain = 0.3): """ Resolution: Number of intervals to cover codomain in. (Default 10) @@ -46,11 +49,11 @@ def fit_transform(self, filtered_data): class MapperLifting(Graph2HypergraphLifting): - def __init__(self, projection_domain = 'pos', projection_attr = None, resolution = 10, gain = 0.3, **kwargs): - super.__init__(**kwargs) + def __init__(self, projection_attr = "laplacian", resolution = 10, gain = 0.3, **kwargs): + super().__init__(**kwargs) self.projection_domain = projection_domain self.projection_attr = projection_attr - self.resolution = resoluion + self.resolution = resolution self.gain = gain """ Need to construct the filter functions. Slightly confused about @@ -58,24 +61,43 @@ def __init__(self, projection_domain = 'pos', projection_attr = None, resolution for nodes, but it can also have string based feature attributes? Maybe we should just do some sort of eccentricity filter for these feature matrices (both for edges and nodes). Maybe also for position? + + + projection_attr: laplacian, sum, pca, (lambda?) + + all of these add a node feature and then + + just say: add an attribute to your data that you wnat to filter on. + then provide the key to that attribute + exmaples; pca, laplacian, etc + """ def _filter_graph(self, data): verify_graph_attrs(data, self.projection_domain, self.projection_attr) + filtered_data = data.x - return filtered_data - def _filter_pos(self, data): - if self.projection_attr == None: - # PCA onto 1st principle component - _, _, V = torch.pca_lowrank(data.pos) - filtered_data = torch.matmul(data.pos, V[:,:1]) + return filtered_data + def _filter_laplacian(self, data): + # Laplacian eigenmap + + transform = AddLaplacianEigenvectorPE(k=1) + + data = transform(data) + + filtered_data = data["laplacian_eigenvector_pe"] + + return filtered_data + def _filter(self, data): - if projection_domain == 'pos': - filtered_data = self._filter_pos(data) - if projection_domain == 'node': + if projection_attr == "laplacian": + filtered_data = self._filter_laplacian(data) + + if projection_domain == 'graph_attributes': filtered_data = self._filter_graph(data) + return filtered_data def lift_topology(self, data: torch_geometric.data.Data) -> dict: diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb index 37099c07..3d72aa0a 100644 --- a/tutorials/graph2hypergraph/mapper_lifting.ipynb +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -62,7 +62,9 @@ "- Parameters `resolution`: number of intervals to cover codomain in (int: default 10)\n", "- `gain`: percentage overlap for each neighboring interval in the cover (float: 0.3)\n", "- fit method. This should take input data (filtered data) and produce intervals for each cover set in codomain. Could have atts: `.cover_sets` which is array of shape (n_intervals, 2)\n", - "- transform_method. This should take `.cover_sets` and produce mask (n_samples, n_cover sets) to describe which cover sets contain each data point." + "- transform_method. This should take `.cover_sets` and produce mask (n_samples, n_cover sets) to describe which cover sets contain each data point.\n", + "\n", + "*Completed 6/24/2024*" ] }, { @@ -75,6 +77,18 @@ "- Transform the mask given by the cover and convert it correctly into a hypergraph colored by the filter function." ] }, + { + "cell_type": "markdown", + "id": "74e53caf-ac10-4f50-8836-6d857848820f", + "metadata": {}, + "source": [ + "**Clustering**\n", + "\n", + "* Connected components of the graph (Default)\n", + "* Torch.geometric subgraph functions (take a cover set, construct it as a subgraph, use nx.get_connected_components to get a mask on the original graph)\n", + "* " + ] + }, { "cell_type": "code", "execution_count": null, From 47ef5bd9dc279423e98e30188c0c115d4b432f6e Mon Sep 17 00:00:00 2001 From: Halley Fritze <97766437+hfr1tz3@users.noreply.github.com> Date: Tue, 25 Jun 2024 14:29:05 -0700 Subject: [PATCH 07/26] filter functiion --- .../graph2hypergraph/mapper_lifting.py | 142 +++++++++++------- .../graph2hypergraph/mapper_lifting.ipynb | 8 +- 2 files changed, 95 insertions(+), 55 deletions(-) diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index 26bd4121..f8244ce7 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -1,21 +1,25 @@ import torch import torch_geometric -from torch_geometric.transforms import AddLaplacianEigenvectorPE +from torch_geometric.transforms import AddLaplacianEigenvectorPE, SVDFeatureReduction from modules.transforms.liftings.graph2hypergraph.base import Graph2HypergraphLifting class MapperCover(): + """ The MapperCover class computes + Attributes + ---------- + left_endpoints : (resolution, 1) Tensor + right_endpoints : (resolution, 1) Tensor + """ def __init__(self, resolution = 10, gain = 0.3): """ Resolution: Number of intervals to cover codomain in. (Default 10) Gain: Proportion of interval which overlaps with next interval on each end. Gain Must be greater than 0 and less than 0.5. """ - - assert gain > 0 and gain < 0.5, "Gain must be a proportion greater than 0 and less than 0.5." - + _verify_cover_parameters(resolution, cover) self.resolution = resolution self.gain = gain @@ -36,8 +40,10 @@ def fit_transform(self, filtered_data): upper_endpoints = lower_endpoints+cover_width + self.left_endpoints = lower_endpoints + self.right_endpoints = upper_endpoints - print(torch.stack([lower_endpoints, upper_endpoints])) + # print(torch.stack([lower_endpoints, upper_endpoints])) lower_values = torch.ge(filtered_data, lower_endpoints) # want a n x resolution Boolean tensor @@ -46,24 +52,66 @@ def fit_transform(self, filtered_data): mask = torch.logical_and(lower_values,upper_values) return mask + + @staticmethod + def _verify_cover_parameters(resolution, gain): + assert gain > 0 and gain <= 0.5,/ + f"Gain must be a proportion greater than 0 and at most 0.5. Currently, gain is {gain}." + assert resolution > 0, f"Resolution should be greater than 0. Currently, + resolution is {resolution}." + assert float(resolution).is_integer(), f"Resolution must be an integer value. Currenly, resolution is {resolution}." class MapperLifting(Graph2HypergraphLifting): + r""" Lifts graphs to hypergraph domain using a Mapper construction and CC-pooling. See [Topological Deep Learning: Going Beyond Graph Data](https://arxiv.org/abs/2206.00606). + + Parameters + ---------- + filter_attr : str, optional + Explain... + resolution : int, optional + The number of intervals in the MapperCover. Default is 10. + gain : float, optional + The percentage of overlap between consectutive intervals + in MapperCover and should be value between 0 and 0.5. + Default is 0.3. + filter_func : object, optional + Filter function used for Mapper construction. + Function must output an (n_sample, 1) Tensor. Default is None. + + Attributes + ---------- + filtered_data : dict + Filtered data used to compute the Mapper lifting. Given + as a dictionary {`filter_attr`: `filter_func(data)`} + cover : MapperCover fitted to compute the Mapper lifting. + + - def __init__(self, projection_attr = "laplacian", resolution = 10, gain = 0.3, **kwargs): + """ + filter_dict = { + "laplacian" : AddLaplacianEigenvectorPE(k=1), + "svd" : SVDFeatureReduction(out_channels=1), + "pca" : lambda data : torch.pca_lowrank(data.pos, q=1), + "feature_sum" : lambda data : torch.sum(data.x, 1), + "position_sum" : lambda data : torch.sum(data.pos, 1), + } + + def __init__(self, + filter_attr = "laplacian", + resolution = 10, + gain = 0.3, + filter_func = None, + **kwargs + ): + _verify_filter_parameters(filter_attr, filter_func) super().__init__(**kwargs) - self.projection_domain = projection_domain - self.projection_attr = projection_attr + self.filter_attr = filter_attr self.resolution = resolution self.gain = gain + self.filter_func = filter_func """ - Need to construct the filter functions. Slightly confused about - torch_geometric.data.Data type. data.x will give feature matrix - for nodes, but it can also have string based feature attributes? - Maybe we should just do some sort of eccentricity filter for these - feature matrices (both for edges and nodes). Maybe also for position? - - projection_attr: laplacian, sum, pca, (lambda?) + filter_attr: laplacian, sum, svd (pca?), (lambda?) all of these add a node feature and then @@ -72,34 +120,31 @@ def __init__(self, projection_attr = "laplacian", resolution = 10, gain = 0.3, * exmaples; pca, laplacian, etc """ - def _filter_graph(self, data): - verify_graph_attrs(data, self.projection_domain, self.projection_attr) - - filtered_data = data.x - - - return filtered_data - - def _filter_laplacian(self, data): - # Laplacian eigenmap - - transform = AddLaplacianEigenvectorPE(k=1) - - data = transform(data) - - filtered_data = data["laplacian_eigenvector_pe"] - - return filtered_data def _filter(self, data): - if projection_attr == "laplacian": - filtered_data = self._filter_laplacian(data) - - if projection_domain == 'graph_attributes': - filtered_data = self._filter_graph(data) - + if self.filter_attr in filter_dict.keys(): + transform = filter_dict[self.filter_attr] + transformed_data = transform(data) + if self.filter_attr == "laplacian": + filtered_data = transformed_data["laplacian_eigenvector_pe"] + if self.filter_attr == "svd": + filtered_data = transformed_data.x + if self.filter_attr == "pca": + filtered_data = torch.matmul(data.pos, + transformed_data[2][:, :1] + ) + else: + filtered_data = transformed_data + else: + transform = self.filter_func + filtered_data = transform(data) + assert filtered_data.size[1] == 1, f'filtered data should have size [n_samples, 1]. Currently filtered data has size {filtered_data.size}.' + self.filtered_data = {self.filter_attr : filtered_data} return filtered_data + def _cluster(self, cover_mask): + return None + def lift_topology(self, data: torch_geometric.data.Data) -> dict: r"""Lifts the topology of a graph to hypergraph domain by considering k-nearest neighbors. @@ -120,16 +165,11 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: return {"incidence_hyperedges": a, "num_hyperedges": b, "x_0": c - } - - @staticmethod - def verify_parameters(): - return None + @staticmethod - def verify_graph_attrs(data, obj, attr): - if obj == 'node': - assert data.is_node_attr(attr), \ - f'{attr} is not in {obj} attributes.' - if obj == 'edge': - data.is_edge_attr(attr), \ - f'{attr} is not in {obj} attributes.' \ No newline at end of file + def _verify_filter_parameters(filter_attr, filter_func): + filter_attr_type = type(filter_attr) + assert (filter_attr_type is str or filter_attr is None), f"filter_attr must be a string or None." + if filter_func is None: + assert filter_attr in filter_dict.keys(),/ + f"Please add function to filter_func or choose filter_attr from {list(filter_dict.keys())}. Currently filter_func is {filter_func} and filter_attr is {filter_attr}." \ No newline at end of file diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb index 3d72aa0a..f2ddfa38 100644 --- a/tutorials/graph2hypergraph/mapper_lifting.ipynb +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -92,7 +92,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b005930e-5df8-4214-a9c2-b31ab7cf845f", + "id": "52811c4e-e0fb-42f8-81a7-3dbe651d72c8", "metadata": {}, "outputs": [], "source": [] @@ -100,9 +100,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "ICML", "language": "python", - "name": "python3" + "name": "icml" }, "language_info": { "codemirror_mode": { @@ -114,7 +114,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.9.5" } }, "nbformat": 4, From 04090ac6c1df7a724006fcfac21a60de8e2734f5 Mon Sep 17 00:00:00 2001 From: Halley Fritze <97766437+hfr1tz3@users.noreply.github.com> Date: Tue, 25 Jun 2024 17:03:23 -0700 Subject: [PATCH 08/26] cluster function written --- .../graph2hypergraph/mapper_lifting.py | 58 +++++++++++++------ .../graph2hypergraph/mapper_lifting.ipynb | 6 +- 2 files changed, 42 insertions(+), 22 deletions(-) diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index f8244ce7..41dffac8 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -1,7 +1,9 @@ import torch import torch_geometric +import networkx as nx from torch_geometric.transforms import AddLaplacianEigenvectorPE, SVDFeatureReduction +from torch_geometric.utils import subgraph, to_networkx from modules.transforms.liftings.graph2hypergraph.base import Graph2HypergraphLifting @@ -29,28 +31,18 @@ def fit_transform(self, filtered_data): """ data_min = torch.min(filtered_data) - data_max = torch.max(filtered_data) - data_range = torch.max(filtered_data)-torch.min(filtered_data) - cover_width = data_range/(self.resolution - (self.resolution-1)*self.gain) - - lower_endpoints = torch.linspace(data_min, data_max-cover_width, self.resolution+1) - - + lower_endpoints = torch.linspace(data_min, + data_max-cover_width, + self.resolution+1) upper_endpoints = lower_endpoints+cover_width self.left_endpoints = lower_endpoints self.right_endpoints = upper_endpoints - - # print(torch.stack([lower_endpoints, upper_endpoints])) - lower_values = torch.ge(filtered_data, lower_endpoints) # want a n x resolution Boolean tensor - upper_values = torch.le(filtered_data, upper_endpoints) # want a n x resolution Boolean tensor - mask = torch.logical_and(lower_values,upper_values) - return mask @staticmethod @@ -142,8 +134,29 @@ def _filter(self, data): self.filtered_data = {self.filter_attr : filtered_data} return filtered_data - def _cluster(self, cover_mask): - return None + def _cluster(self, data, cover_mask): + """Finds clusters in each cover set and computes the hypergraph. + """ + num_nodes = data.x.shape[0] + mapper_clusters = {} + num_clusters = 0 + # Each cover set is of the form [1, n_samples] + for i, cover_set in enumerate(cover_mask.T): + # Find indices of nodes which are in each cover set + cover_data = data.subgraph(cover_set.T) + cover_graph = self._generate_graph_from_data(cover_data) + if cover_data.is_directed(): + 'QUESTION:: should we use weakly or strongly connected' + 'componenets for directed graphs??' + clusters = nx.weakly_connected_components(cover_graph) + if cover_data.is_undirected(): + clusters = nx.connected_components(cover_data) + for cluster_index in clusters: + index = torch.Tensor(list(cluster_index)) + mapper_clusters[num_clusters] = (i,index) + num_clusters += 1 + + return mapper_clusters def lift_topology(self, data: torch_geometric.data.Data) -> dict: r"""Lifts the topology of a graph to hypergraph domain by considering k-nearest neighbors. @@ -161,10 +174,17 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: filtered_data = self._filter(data) cover = MapperCover(self.resolution, self.gain) cover_mask = cover.fit_transform(filtered_data) + mapper_clusters = self._cluster(data, cover_mask) + num_clusters = len(mapper_clusters) + # number of nodes in hypergraph = number of nodes in data + num_hyperedges = num_nodes + num_clusters ' i think ' + # incidence_1 edges should be edges in the data + incidence_1 = torch.zeros(num_nodes, num_hyperedges) - return {"incidence_hyperedges": a, - "num_hyperedges": b, - "x_0": c + return {"incidence_hyperedges": incidence_1, + "num_hyperedges": num_hyperedges, + "x_0": data.x, + } @staticmethod def _verify_filter_parameters(filter_attr, filter_func): @@ -172,4 +192,4 @@ def _verify_filter_parameters(filter_attr, filter_func): assert (filter_attr_type is str or filter_attr is None), f"filter_attr must be a string or None." if filter_func is None: assert filter_attr in filter_dict.keys(),/ - f"Please add function to filter_func or choose filter_attr from {list(filter_dict.keys())}. Currently filter_func is {filter_func} and filter_attr is {filter_attr}." \ No newline at end of file + f"Please add function to filter_func or choose filter_attr from {list(filter_dict)}. Currently filter_func is {filter_func} and filter_attr is {filter_attr}." \ No newline at end of file diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb index f2ddfa38..7f4fa419 100644 --- a/tutorials/graph2hypergraph/mapper_lifting.ipynb +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -92,7 +92,7 @@ { "cell_type": "code", "execution_count": null, - "id": "52811c4e-e0fb-42f8-81a7-3dbe651d72c8", + "id": "02279c03-5a9b-48bb-a381-2fdbdfe369f2", "metadata": {}, "outputs": [], "source": [] @@ -100,9 +100,9 @@ ], "metadata": { "kernelspec": { - "display_name": "ICML", + "display_name": "Python 3 (ipykernel)", "language": "python", - "name": "icml" + "name": "python3" }, "language_info": { "codemirror_mode": { From 0408fcc1ab54a8f0b9798c844f39a8df8fee3f63 Mon Sep 17 00:00:00 2001 From: Marissa Masden Date: Wed, 26 Jun 2024 15:46:52 -0700 Subject: [PATCH 09/26] Finished mapper lifting class foundations --- .../liftings/graph2hypergraph/knn_lifting.py | 1 + .../graph2hypergraph/mapper_lifting.py | 104 ++++++++++++------ .../graph2hypergraph/mapper_lifting.ipynb | 28 ++++- 3 files changed, 100 insertions(+), 33 deletions(-) diff --git a/modules/transforms/liftings/graph2hypergraph/knn_lifting.py b/modules/transforms/liftings/graph2hypergraph/knn_lifting.py index 4ee78866..7fced4a3 100755 --- a/modules/transforms/liftings/graph2hypergraph/knn_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/knn_lifting.py @@ -67,6 +67,7 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: data_lifted.edge_index[:, idx] = torch.tensor([[i, i]]).T incidence_1[data_lifted.edge_index[1], data_lifted.edge_index[0]] = 1 + incidence_1 = torch.Tensor(incidence_1).to_sparse_coo() return { "incidence_hyperedges": incidence_1, diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index 41dffac8..79f7e54f 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -21,7 +21,7 @@ def __init__(self, resolution = 10, gain = 0.3): Gain: Proportion of interval which overlaps with next interval on each end. Gain Must be greater than 0 and less than 0.5. """ - _verify_cover_parameters(resolution, cover) + # self._verify_cover_parameters(resolution, cover) self.resolution = resolution self.gain = gain @@ -45,12 +45,10 @@ def fit_transform(self, filtered_data): mask = torch.logical_and(lower_values,upper_values) return mask - @staticmethod - def _verify_cover_parameters(resolution, gain): - assert gain > 0 and gain <= 0.5,/ - f"Gain must be a proportion greater than 0 and at most 0.5. Currently, gain is {gain}." - assert resolution > 0, f"Resolution should be greater than 0. Currently, - resolution is {resolution}." + def _verify_cover_parameters(self, resolution, gain): + assert gain > 0 and gain <= 0.5, \ + f"Gain must be a proportion greater than 0 and at most 0.5. Currently, gain is {gain}." + assert resolution > 0, f"Resolution should be greater than 0. Currently, resolution is {resolution}." assert float(resolution).is_integer(), f"Resolution must be an integer value. Currenly, resolution is {resolution}." class MapperLifting(Graph2HypergraphLifting): @@ -88,6 +86,8 @@ class MapperLifting(Graph2HypergraphLifting): "position_sum" : lambda data : torch.sum(data.pos, 1), } + + def __init__(self, filter_attr = "laplacian", resolution = 10, @@ -95,12 +95,13 @@ def __init__(self, filter_func = None, **kwargs ): - _verify_filter_parameters(filter_attr, filter_func) + + #self._verify_filter_parameters(filter_attr, filter_func) super().__init__(**kwargs) self.filter_attr = filter_attr self.resolution = resolution self.gain = gain - self.filter_func = filter_func + self.filter_func = filter_func """ filter_attr: laplacian, sum, svd (pca?), (lambda?) @@ -112,10 +113,12 @@ def __init__(self, exmaples; pca, laplacian, etc """ - + + + def _filter(self, data): - if self.filter_attr in filter_dict.keys(): - transform = filter_dict[self.filter_attr] + if self.filter_attr in self.filter_dict.keys(): + transform = self.filter_dict[self.filter_attr] transformed_data = transform(data) if self.filter_attr == "laplacian": filtered_data = transformed_data["laplacian_eigenvector_pe"] @@ -125,12 +128,15 @@ def _filter(self, data): filtered_data = torch.matmul(data.pos, transformed_data[2][:, :1] ) - else: + if self.filter_attr not in ["laplacian","svd","pca"]: filtered_data = transformed_data + else: transform = self.filter_func filtered_data = transform(data) - assert filtered_data.size[1] == 1, f'filtered data should have size [n_samples, 1]. Currently filtered data has size {filtered_data.size}.' + + assert filtered_data.size() == torch.Size([len(data.x),1]),\ + f'filtered data should have size [n_samples, 1]. Currently filtered data has size {filtered_data.size()}.' self.filtered_data = {self.filter_attr : filtered_data} return filtered_data @@ -143,19 +149,36 @@ def _cluster(self, data, cover_mask): # Each cover set is of the form [1, n_samples] for i, cover_set in enumerate(cover_mask.T): # Find indices of nodes which are in each cover set - cover_data = data.subgraph(cover_set.T) - cover_graph = self._generate_graph_from_data(cover_data) - if cover_data.is_directed(): - 'QUESTION:: should we use weakly or strongly connected' - 'componenets for directed graphs??' - clusters = nx.weakly_connected_components(cover_graph) - if cover_data.is_undirected(): - clusters = nx.connected_components(cover_data) + + #cover_data = data.subgraph(cover_set.T, relabel_nodes=False) does not work + + # if len(cover_set)==0: + # continue + + cover_data, _ = torch_geometric.utils.subgraph(cover_set.T, data["edge_index"]) #DATA.SUBGRAPH sets relabel_nodes to True + + cover_graph = nx.Graph() + + edges = [ + (i.item(), j.item()) + for i, j in zip(cover_data[0], cover_data[1], strict=False) + ] + + #cover_graph = torch_geometric.utils.convert.to_networkx(cover_data, to_undirected = True) + + # if cover_data.is_directed(): + # clusters = nx.weakly_connected_components(cover_graph) + + cover_graph.add_edges_from(edges) + + + clusters = nx.connected_components(cover_graph) + for cluster_index in clusters: index = torch.Tensor(list(cluster_index)) mapper_clusters[num_clusters] = (i,index) num_clusters += 1 - + return mapper_clusters def lift_topology(self, data: torch_geometric.data.Data) -> dict: @@ -175,21 +198,38 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: cover = MapperCover(self.resolution, self.gain) cover_mask = cover.fit_transform(filtered_data) mapper_clusters = self._cluster(data, cover_mask) - num_clusters = len(mapper_clusters) - # number of nodes in hypergraph = number of nodes in data - num_hyperedges = num_nodes + num_clusters ' i think ' - # incidence_1 edges should be edges in the data - incidence_1 = torch.zeros(num_nodes, num_hyperedges) + + num_nodes = data["x"].shape[0] + num_edges = data["edge_attr"].size()[0] + num_clusters = len(mapper_clusters) + num_hyperedges = num_edges + num_clusters + + incidence_1_edges = torch.zeros(num_nodes, num_edges) + + for i,edge in enumerate(data["edge_index"].T): + incidence_1_edges[edge[0],i] = 1 + incidence_1_edges[edge[1],i] = 1 + + incidence_1_hyperedges = torch.zeros(num_nodes, num_clusters) + + for i, hyperedge in enumerate(mapper_clusters): + for j in mapper_clusters[hyperedge][1]: + incidence_1_hyperedges[j.int(),i] = 1 + + incidence_1 = torch.hstack([incidence_1_edges, incidence_1_hyperedges]) + + incidence_1 = torch.Tensor(incidence_1).to_sparse_coo() + return {"incidence_hyperedges": incidence_1, "num_hyperedges": num_hyperedges, "x_0": data.x, } - @staticmethod - def _verify_filter_parameters(filter_attr, filter_func): + def _verify_filter_parameters(self, filter_attr, filter_func): filter_attr_type = type(filter_attr) assert (filter_attr_type is str or filter_attr is None), f"filter_attr must be a string or None." if filter_func is None: - assert filter_attr in filter_dict.keys(),/ - f"Please add function to filter_func or choose filter_attr from {list(filter_dict)}. Currently filter_func is {filter_func} and filter_attr is {filter_attr}." \ No newline at end of file + assert filter_attr in self.filter_dict.keys(), \ + f"Please add function to filter_func or choose filter_attr from {list(filter_dict)}. \ + Currently filter_func is {filter_func} and filter_attr is {filter_attr}." \ No newline at end of file diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb index 7f4fa419..e92531de 100644 --- a/tutorials/graph2hypergraph/mapper_lifting.ipynb +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -96,6 +96,32 @@ "metadata": {}, "outputs": [], "source": [] + }, + { + "cell_type": "markdown", + "id": "e75c233a-c713-4a29-9fff-7831a7cb4290", + "metadata": {}, + "source": [ + "### To-do's \n", + "\n", + "Marissa to do: Make tutorial \n", + "\n", + "Halley to do: Make test file? \n", + "\n", + "`dataset_name = \"manual_dataset\"` \n", + "\n", + "` dataset_config = load_dataset_config(dataset_name)`\n", + "\n", + "` loader = GraphLoader(dataset_config)`\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0d0c96c6-d525-40cc-b11d-a9895cc819d1", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -114,7 +140,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.5" + "version": "3.10.12" } }, "nbformat": 4, From 9013c6e3a9deaf7d386093aef358dd5b179fdf43 Mon Sep 17 00:00:00 2001 From: Halley Fritze <97766437+hfr1tz3@users.noreply.github.com> Date: Thu, 27 Jun 2024 13:41:39 -0700 Subject: [PATCH 10/26] Tweaked pyfile Commented the MapperCover and MapperLifting Classes. Fixed verify_params functions, transpose issues. Removed empty covers from MapperCover. Unsure why all my files in git were unmodified but also modified... in my git status --- .../graph2hypergraph/mapper_lifting.py | 366 +++++++++++------- .../graph2hypergraph/mapper_lifting.ipynb | 14 +- 2 files changed, 226 insertions(+), 154 deletions(-) diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index 79f7e54f..cc4016e6 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -1,184 +1,240 @@ +import networkx as nx import torch import torch_geometric -import networkx as nx - from torch_geometric.transforms import AddLaplacianEigenvectorPE, SVDFeatureReduction -from torch_geometric.utils import subgraph, to_networkx +from torch_geometric.utils import subgraph from modules.transforms.liftings.graph2hypergraph.base import Graph2HypergraphLifting -class MapperCover(): - """ The MapperCover class computes + +class MapperCover: + r"""The MapperCover class computes the cover used in constructing the Mapper + for the MapperLifting class. + + Parameters + --------- + resolution : int, optional + The number of intervals in the MapperCover. Default is 10. + gain : float, optional + The percentage of overlap between consectutive intervals + in MapperCover and should be value between 0 and 0.5. + Default is 0.3. Attributes ---------- left_endpoints : (resolution, 1) Tensor + The left endpoints for each interval in the MapperCover. right_endpoints : (resolution, 1) Tensor + The right endpoints for each interval in the MapperCover. """ - def __init__(self, resolution = 10, gain = 0.3): - """ - Resolution: Number of intervals to cover codomain in. (Default 10) - Gain: Proportion of interval which overlaps with next interval on each end. - Gain Must be greater than 0 and less than 0.5. - """ - # self._verify_cover_parameters(resolution, cover) + + def __init__(self, resolution=10, gain=0.3): self.resolution = resolution self.gain = gain + self._verify_cover_parameters() def fit_transform(self, filtered_data): - """Inputs data: (n x 1) Tensor of values for filter ? - Outputs mask: (n x resolution) boolean Tensor - """ + r"""Constructs an interval cover over filtered data. - data_min = torch.min(filtered_data) + Parameters + ---------- + filtered_data : torch_geometric.data.Data or torch.Tensor + with size (n_sample, 1). + + Returns + ------- + < (n_sample, resolution) boolean Tensor. + Mask which identifies which data points are + in each cover set. Covers which are empty + are removed so k = number of nonempty cover sets. + """ + + data_min = torch.min(filtered_data) data_max = torch.max(filtered_data) - data_range = torch.max(filtered_data)-torch.min(filtered_data) - cover_width = data_range/(self.resolution - (self.resolution-1)*self.gain) - lower_endpoints = torch.linspace(data_min, - data_max-cover_width, - self.resolution+1) - upper_endpoints = lower_endpoints+cover_width + data_range = torch.max(filtered_data) - torch.min(filtered_data) + # width of each interval in the cover + cover_width = data_range / (self.resolution - (self.resolution - 1) * self.gain) + lower_endpoints = torch.linspace( + data_min, data_max - cover_width, self.resolution + 1 + ) + upper_endpoints = lower_endpoints + cover_width self.left_endpoints = lower_endpoints self.right_endpoints = upper_endpoints - lower_values = torch.ge(filtered_data, lower_endpoints) # want a n x resolution Boolean tensor - upper_values = torch.le(filtered_data, upper_endpoints) # want a n x resolution Boolean tensor - mask = torch.logical_and(lower_values,upper_values) - return mask - - def _verify_cover_parameters(self, resolution, gain): - assert gain > 0 and gain <= 0.5, \ - f"Gain must be a proportion greater than 0 and at most 0.5. Currently, gain is {gain}." - assert resolution > 0, f"Resolution should be greater than 0. Currently, resolution is {resolution}." - assert float(resolution).is_integer(), f"Resolution must be an integer value. Currenly, resolution is {resolution}." - + # want a n x resolution Boolean tensor + lower_values = torch.ge(filtered_data, lower_endpoints) + upper_values = torch.le(filtered_data, upper_endpoints) + mask = torch.logical_and(lower_values, upper_values) + # remove empty intervals from cover + non_empty_covers = torch.any(mask, 0) + return mask[:, non_empty_covers] + + def _verify_cover_parameters(self): + assert ( + self.gain > 0 and self.gain <= 0.5 + ), f"Gain must be a proportion greater than 0 and at most 0.5. Currently, gain is {self.gain}." + assert ( + self.resolution > 0 + ), f"Resolution should be greater than 0. Currently, resolution is {self.resolution}." + assert float( + self.resolution + ).is_integer(), f"Resolution must be an integer value. Currenly, resolution is {self.resolution}." + + +# Global filter dictionary for the MapperLifting class. +filter_dict = { + "laplacian": AddLaplacianEigenvectorPE(k=1), + "svd": SVDFeatureReduction(out_channels=1), + "pca": lambda data: torch.pca_lowrank(data.pos, q=1), + "feature_sum": lambda data: torch.sum(data.x, dim=1), + "position_sum": lambda data: torch.sum(data.pos, dim=1), +} + + class MapperLifting(Graph2HypergraphLifting): - r""" Lifts graphs to hypergraph domain using a Mapper construction and CC-pooling. See [Topological Deep Learning: Going Beyond Graph Data](https://arxiv.org/abs/2206.00606). + r"""Lifts graphs to hypergraph domain using a Mapper construction for CC-pooling. + (See Figure 30 in [1]) Parameters ---------- filter_attr : str, optional - Explain... + Name of the filter functional to filter data to 1-dimensional subspace. + The filter attribute can be "laplacican", "svd", "pca", "feature_sum", + "position_sum". You may also define your own filter_attr string if + the filter_func parameter is defined. + Default is "laplacian". resolution : int, optional - The number of intervals in the MapperCover. Default is 10. + The number of intervals to construct the MapperCover. + Default is 10. gain : float, optional The percentage of overlap between consectutive intervals - in MapperCover and should be value between 0 and 0.5. + in MapperCover and should be value between 0 and 0.5. Default is 0.3. filter_func : object, optional - Filter function used for Mapper construction. - Function must output an (n_sample, 1) Tensor. Default is None. + Filter function used for Mapper construction. + Self defined lambda function or transform to filter data. + Function must output an (n_sample, 1) Tensor. + If filter_func is not None, user must define filter_attr + as a string not already listed above. + Default is None. + **kwargs : optional + Additional arguments for the class. - Attributes - ---------- - filtered_data : dict - Filtered data used to compute the Mapper lifting. Given - as a dictionary {`filter_attr`: `filter_func(data)`} - cover : MapperCover fitted to compute the Mapper lifting. - - + Notes + ----- + The following are common filter functions which can be called with + filter_attr. - """ - filter_dict = { - "laplacian" : AddLaplacianEigenvectorPE(k=1), - "svd" : SVDFeatureReduction(out_channels=1), - "pca" : lambda data : torch.pca_lowrank(data.pos, q=1), - "feature_sum" : lambda data : torch.sum(data.x, 1), - "position_sum" : lambda data : torch.sum(data.pos, 1), - } - - - - def __init__(self, - filter_attr = "laplacian", - resolution = 10, - gain = 0.3, - filter_func = None, - **kwargs - ): - - #self._verify_filter_parameters(filter_attr, filter_func) - super().__init__(**kwargs) - self.filter_attr = filter_attr - self.resolution = resolution - self.gain = gain - self.filter_func = filter_func - """ + 1. "laplacian" : Applies the torch_geometric.transforms.AddLaplacianEigenvectorPE(k=1) + transform and projects onto the 1st eigenvector. - filter_attr: laplacian, sum, svd (pca?), (lambda?) + 2. "svd" : Applies the torch_geometric.transforms.SVDFeatureReduction(out_channels=1) + transform to project to 1-dimensional subspace. - all of these add a node feature and then + 3. "pca" : Applies torch.pca_lowrank(q=1) transform and then projects to the 1st + principle component. - just say: add an attribute to your data that you wnat to filter on. - then provide the key to that attribute - exmaples; pca, laplacian, etc + 4. "feature_sum" : Applies torch.sum(dim=1) to the feature space of nodes in the graph + (ie. torch_geometric.Data.data.x). + 5. "position_sum" : Applies torch.sum(dim=1) to the position of nodes in the graph + (ie. torch_geometric.Data.data.pos). + + You may also construct your own filter_attr and filter_func: + + 6. "my_filter_attr" : my_filter_func = lambda data : my_filter_func(data) + where my_filter_func(data) outputs a (n_sample, 1) Tensor. + + References + ---------- + .. [1] Hajij, M., Zamzmi, G., Papamarkou, T., Miolane, N., Guzmán-Sáenz, + A., Ramamurthy, K. N., et al. (2022). + Topological deep learning: Going beyond graph data. + arXiv preprint arXiv:2206.00606. """ + def __init__( + self, + filter_attr="laplacian", + resolution=10, + gain=0.3, + filter_func=None, + **kwargs, + ): + super().__init__(**kwargs) + self.filter_attr = filter_attr + self.resolution = resolution + self.gain = gain + self.filter_func = filter_func + self._verify_filter_parameters() - def _filter(self, data): - if self.filter_attr in self.filter_dict.keys(): - transform = self.filter_dict[self.filter_attr] + """Applies 1-dimensional filter function to + torch_geometric.Data.data. + """ + if self.filter_attr in filter_dict: + transform = filter_dict[self.filter_attr] transformed_data = transform(data) if self.filter_attr == "laplacian": filtered_data = transformed_data["laplacian_eigenvector_pe"] if self.filter_attr == "svd": filtered_data = transformed_data.x if self.filter_attr == "pca": - filtered_data = torch.matmul(data.pos, - transformed_data[2][:, :1] - ) - if self.filter_attr not in ["laplacian","svd","pca"]: + filtered_data = torch.matmul(data.pos, transformed_data[2][:, :1]) + if self.filter_attr not in ["laplacian", "svd", "pca"]: filtered_data = transformed_data - + else: transform = self.filter_func filtered_data = transform(data) - - assert filtered_data.size() == torch.Size([len(data.x),1]),\ - f'filtered data should have size [n_samples, 1]. Currently filtered data has size {filtered_data.size()}.' - self.filtered_data = {self.filter_attr : filtered_data} + + assert filtered_data.size() == torch.Size( + [len(data.x), 1] + ), f"filtered data should have size [n_samples, 1]. Currently filtered data has size {filtered_data.size()}." + self.filtered_data = {self.filter_attr: filtered_data} return filtered_data def _cluster(self, data, cover_mask): - """Finds clusters in each cover set and computes the hypergraph. + """Finds clusters in each cover set within cover_mask. + For each cover set, a cluster is a + distinct connected component. + Clusters are stored in dictionary, self.clusters. """ - num_nodes = data.x.shape[0] mapper_clusters = {} num_clusters = 0 - # Each cover set is of the form [1, n_samples] + # Each cover set is of the form [1, n_samples] for i, cover_set in enumerate(cover_mask.T): # Find indices of nodes which are in each cover set - - #cover_data = data.subgraph(cover_set.T, relabel_nodes=False) does not work - - # if len(cover_set)==0: - # continue - - cover_data, _ = torch_geometric.utils.subgraph(cover_set.T, data["edge_index"]) #DATA.SUBGRAPH sets relabel_nodes to True - - cover_graph = nx.Graph() - + # cover_data = data.subgraph(cover_set.T) does not work + # as it relabels node indices + cover_data, _ = torch_geometric.utils.subgraph( + torch.transpose(cover_set, 0, 1), data["edge_index"] + ) edges = [ (i.item(), j.item()) for i, j in zip(cover_data[0], cover_data[1], strict=False) - ] - - #cover_graph = torch_geometric.utils.convert.to_networkx(cover_data, to_undirected = True) - - # if cover_data.is_directed(): - # clusters = nx.weakly_connected_components(cover_graph) - - cover_graph.add_edges_from(edges) - - - clusters = nx.connected_components(cover_graph) - - for cluster_index in clusters: - index = torch.Tensor(list(cluster_index)) - mapper_clusters[num_clusters] = (i,index) + ] + if data.is_undirected(): + cover_graph = nx.Graph() + cover_graph.add_edges_from(edges) + # find clusters + clusters = nx.connected_components(cover_graph) + if data.is_directed(): + cover_graph = nx.DiGraph() + cover_graph.add_edges_from(edges) + # find clusters + clusters = nx.weakly_connected_components(cover_graph) + + for cluster in clusters: + # index is the subset of nodes in data + # contained in cluster + index = torch.Tensor(list(cluster)) + # kth cluster is item in dictionary + # of the form + # k : (cover_set_index, nodes_in_cluster) + mapper_clusters[num_clusters] = (i, index) num_clusters += 1 - + + self.clusters = mapper_clusters return mapper_clusters def lift_topology(self, data: torch_geometric.data.Data) -> dict: @@ -189,47 +245,71 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: data : torch_geometric.data.Data The input data to be lifted. + Attributes + ---------- + filtered_data : dict + Filtered data used to compute the Mapper lifting. + Dictionary is of the form + {filter_attr: filter_func(data)}. + cover : (n_sample, resolution) boolean Tensor + Mask computed from the MapperCover class + to compute the Mapper lifting. + clusters : dict + Distinct connected components in each cover set + computed after fitting the Mapper cover. + Dictionary has integer keys and tuple values + of the form (cover_set_i, nodes_in_cluster). + Each cluster is a rank 2 hyperedge in the + hypergraph. + Returns ------- dict The lifted topology. """ + # Filter the data to 1-dimensional subspace filtered_data = self._filter(data) + # Define and fit the cover cover = MapperCover(self.resolution, self.gain) cover_mask = cover.fit_transform(filtered_data) + # Find the clusters in the fitted cover mapper_clusters = self._cluster(data, cover_mask) - + # Construct the hypergraph dictionary num_nodes = data["x"].shape[0] num_edges = data["edge_attr"].size()[0] - num_clusters = len(mapper_clusters) + num_clusters = len(mapper_clusters) num_hyperedges = num_edges + num_clusters - + incidence_1_edges = torch.zeros(num_nodes, num_edges) - for i,edge in enumerate(data["edge_index"].T): - incidence_1_edges[edge[0],i] = 1 - incidence_1_edges[edge[1],i] = 1 + for i, edge in enumerate(torch.t(data["edge_index"])): + incidence_1_edges[edge[0], i] = 1 + incidence_1_edges[edge[1], i] = 1 incidence_1_hyperedges = torch.zeros(num_nodes, num_clusters) - for i, hyperedge in enumerate(mapper_clusters): - for j in mapper_clusters[hyperedge][1]: - incidence_1_hyperedges[j.int(),i] = 1 - + for i, hyperedge in enumerate(mapper_clusters): + for j in mapper_clusters[hyperedge][1]: + incidence_1_hyperedges[j.int(), i] = 1 + # Incidence matrix is (num_nodes, num_edges + num_clusters) size matrix incidence_1 = torch.hstack([incidence_1_edges, incidence_1_hyperedges]) - incidence_1 = torch.Tensor(incidence_1).to_sparse_coo() - - return {"incidence_hyperedges": incidence_1, - "num_hyperedges": num_hyperedges, - "x_0": data.x, - } - - def _verify_filter_parameters(self, filter_attr, filter_func): - filter_attr_type = type(filter_attr) - assert (filter_attr_type is str or filter_attr is None), f"filter_attr must be a string or None." - if filter_func is None: - assert filter_attr in self.filter_dict.keys(), \ - f"Please add function to filter_func or choose filter_attr from {list(filter_dict)}. \ - Currently filter_func is {filter_func} and filter_attr is {filter_attr}." \ No newline at end of file + return { + "incidence_hyperedges": incidence_1, + "num_hyperedges": num_hyperedges, + "x_0": data.x, + } + + def _verify_filter_parameters(self): + assert type(self.filter_attr) is str, f"filter_attr must be a string or None." + if self.filter_func is None: + assert ( + self.filter_attr in filter_dict + ), f"Please add function to filter_func or choose filter_attr from {list(filter_dict)}. \ + Currently filter_func is {self.filter_func} and filter_attr is {self.filter_attr}." + if self.filter_func is not None: + assert ( + self.filter_attr not in filter_dict + ), f"Assign new filter_attr not in {list(filter_dict)} or leave filter_func as None. \ + Currently filter_func is {self.filter_func} and filter_attr is {self.filter_attr}" diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb index e92531de..854c5a4d 100644 --- a/tutorials/graph2hypergraph/mapper_lifting.ipynb +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -89,14 +89,6 @@ "* " ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "02279c03-5a9b-48bb-a381-2fdbdfe369f2", - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "id": "e75c233a-c713-4a29-9fff-7831a7cb4290", @@ -118,7 +110,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0d0c96c6-d525-40cc-b11d-a9895cc819d1", + "id": "e1795e5d-1f57-4692-a332-ddbfe61ee127", "metadata": {}, "outputs": [], "source": [] @@ -126,9 +118,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "ICML", "language": "python", - "name": "python3" + "name": "icml" }, "language_info": { "codemirror_mode": { From 4c90a81e492571b161a88b05c3bf28c6ebf050ab Mon Sep 17 00:00:00 2001 From: Halley Fritze <97766437+hfr1tz3@users.noreply.github.com> Date: Fri, 28 Jun 2024 10:20:15 -0700 Subject: [PATCH 11/26] filter changes --- .../graph2hypergraph/mapper_lifting.yaml | 6 ++- .../graph2hypergraph/mapper_lifting.py | 40 +++++++++++++------ 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/configs/transforms/liftings/graph2hypergraph/mapper_lifting.yaml b/configs/transforms/liftings/graph2hypergraph/mapper_lifting.yaml index aa38e5c5..764384d2 100644 --- a/configs/transforms/liftings/graph2hypergraph/mapper_lifting.yaml +++ b/configs/transforms/liftings/graph2hypergraph/mapper_lifting.yaml @@ -1,2 +1,6 @@ transform_type: "lifting" -transform_name: "MapperLifting" \ No newline at end of file +transform_name: "MapperLifting" +filer_attr: "laplacian" +resolution: 10 +gain: 0.3 +filter_func: None \ No newline at end of file diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index cc4016e6..7d68c73f 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -84,9 +84,14 @@ def _verify_cover_parameters(self): filter_dict = { "laplacian": AddLaplacianEigenvectorPE(k=1), "svd": SVDFeatureReduction(out_channels=1), - "pca": lambda data: torch.pca_lowrank(data.pos, q=1), - "feature_sum": lambda data: torch.sum(data.x, dim=1), - "position_sum": lambda data: torch.sum(data.pos, dim=1), + "feature_pca": lambda data: torch.pca_lowrank(data.x, q=1), + "position_pca": lambda data: torch.pca_lowrank(data.pos, q=1), + "feature_sum": lambda data: torch.reshape( + torch.sum(data.x, dim=1), (len(data.x), 1) + ), + "position_sum": lambda data: torch.reshape( + torch.sum(data.pos, dim=1), (len(data.pos, 1)) + ), } @@ -130,18 +135,21 @@ class MapperLifting(Graph2HypergraphLifting): 2. "svd" : Applies the torch_geometric.transforms.SVDFeatureReduction(out_channels=1) transform to project to 1-dimensional subspace. - 3. "pca" : Applies torch.pca_lowrank(q=1) transform and then projects to the 1st - principle component. + 3. "feature_pca" : Applies torch.pca_lowrank(q=1) transform to node feature matrix + (ie. torch_geometric.Data.data.x) and then projects to the 1st principle component. - 4. "feature_sum" : Applies torch.sum(dim=1) to the feature space of nodes in the graph + 4. "position_pca" : Applies torch.pca_lowrank(q=1) transform to node feature matrix + (ie. torch_geometric.Data.data.pos) and then projects to the 1st principle component. + + 5. "feature_sum" : Applies torch.sum(dim=1) to the node feature matrix in the graph (ie. torch_geometric.Data.data.x). - 5. "position_sum" : Applies torch.sum(dim=1) to the position of nodes in the graph + 6. "position_sum" : Applies torch.sum(dim=1) to the node position matrix in the graph (ie. torch_geometric.Data.data.pos). You may also construct your own filter_attr and filter_func: - 6. "my_filter_attr" : my_filter_func = lambda data : my_filter_func(data) + 7. "my_filter_attr" : my_filter_func = lambda data : my_filter_func(data) where my_filter_func(data) outputs a (n_sample, 1) Tensor. References @@ -178,15 +186,21 @@ def _filter(self, data): filtered_data = transformed_data["laplacian_eigenvector_pe"] if self.filter_attr == "svd": filtered_data = transformed_data.x - if self.filter_attr == "pca": + if self.filter_attr == "feature_pca": + filtered_data = torch.matmul(data.x, transformed_data[2][:, :1]) + if self.filter_attr == "position_pca": filtered_data = torch.matmul(data.pos, transformed_data[2][:, :1]) - if self.filter_attr not in ["laplacian", "svd", "pca"]: + if self.filter_attr not in [ + "laplacian", + "svd", + "feature_pca", + "position_pca", + ]: filtered_data = transformed_data else: transform = self.filter_func filtered_data = transform(data) - assert filtered_data.size() == torch.Size( [len(data.x), 1] ), f"filtered data should have size [n_samples, 1]. Currently filtered data has size {filtered_data.size()}." @@ -207,7 +221,7 @@ def _cluster(self, data, cover_mask): # cover_data = data.subgraph(cover_set.T) does not work # as it relabels node indices cover_data, _ = torch_geometric.utils.subgraph( - torch.transpose(cover_set, 0, 1), data["edge_index"] + torch.t(cover_set), data["edge_index"] ) edges = [ (i.item(), j.item()) @@ -276,7 +290,7 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: mapper_clusters = self._cluster(data, cover_mask) # Construct the hypergraph dictionary num_nodes = data["x"].shape[0] - num_edges = data["edge_attr"].size()[0] + num_edges = data["edge_index"].size()[1] num_clusters = len(mapper_clusters) num_hyperedges = num_edges + num_clusters From 76eaae119d47e7543998b8456a8deccfe74b21d9 Mon Sep 17 00:00:00 2001 From: Marissa Masden Date: Fri, 28 Jun 2024 12:08:44 -0700 Subject: [PATCH 12/26] Creating tutorial --- .../liftings/graph2hypergraph/knn_lifting.py | 1 + .../graph2hypergraph/mapper_lifting.py | 38 ++++++++++++++++--- .../graph2hypergraph/mapper_lifting.ipynb | 16 ++++++-- .../graph2simplicial/clique_lifting.ipynb | 14 ++++++- 4 files changed, 58 insertions(+), 11 deletions(-) diff --git a/modules/transforms/liftings/graph2hypergraph/knn_lifting.py b/modules/transforms/liftings/graph2hypergraph/knn_lifting.py index 7fced4a3..412be7fa 100755 --- a/modules/transforms/liftings/graph2hypergraph/knn_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/knn_lifting.py @@ -69,6 +69,7 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: incidence_1[data_lifted.edge_index[1], data_lifted.edge_index[0]] = 1 incidence_1 = torch.Tensor(incidence_1).to_sparse_coo() + return { "incidence_hyperedges": incidence_1, "num_hyperedges": num_hyperedges, diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index cc4016e6..ec25d69d 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -1,7 +1,7 @@ import networkx as nx import torch import torch_geometric -from torch_geometric.transforms import AddLaplacianEigenvectorPE, SVDFeatureReduction +from torch_geometric.transforms import AddLaplacianEigenvectorPE, SVDFeatureReduction, ToUndirected, Compose from torch_geometric.utils import subgraph from modules.transforms.liftings.graph2hypergraph.base import Graph2HypergraphLifting @@ -82,11 +82,11 @@ def _verify_cover_parameters(self): # Global filter dictionary for the MapperLifting class. filter_dict = { - "laplacian": AddLaplacianEigenvectorPE(k=1), + "laplacian": Compose([ToUndirected(), AddLaplacianEigenvectorPE(k=1, is_undirected=True)]), "svd": SVDFeatureReduction(out_channels=1), "pca": lambda data: torch.pca_lowrank(data.pos, q=1), - "feature_sum": lambda data: torch.sum(data.x, dim=1), - "position_sum": lambda data: torch.sum(data.pos, dim=1), + "feature_sum": lambda data: torch.sum(data.x, dim=1).unsqueeze(1), + "position_sum": lambda data: torch.sum(data.pos, dim=1).unsqueeze(1), } @@ -186,13 +186,16 @@ def _filter(self, data): else: transform = self.filter_func filtered_data = transform(data) + assert filtered_data.size() == torch.Size( [len(data.x), 1] ), f"filtered data should have size [n_samples, 1]. Currently filtered data has size {filtered_data.size()}." self.filtered_data = {self.filter_attr: filtered_data} + return filtered_data + def _cluster(self, data, cover_mask): """Finds clusters in each cover set within cover_mask. For each cover set, a cluster is a @@ -202,28 +205,42 @@ def _cluster(self, data, cover_mask): mapper_clusters = {} num_clusters = 0 # Each cover set is of the form [1, n_samples] + + + for i, cover_set in enumerate(cover_mask.T): # Find indices of nodes which are in each cover set # cover_data = data.subgraph(cover_set.T) does not work # as it relabels node indices + cover_data, _ = torch_geometric.utils.subgraph( - torch.transpose(cover_set, 0, 1), data["edge_index"] + torch.t(cover_set), data["edge_index"] ) + edges = [ (i.item(), j.item()) for i, j in zip(cover_data[0], cover_data[1], strict=False) ] + + + nodes = [i.item() for i in torch.where(cover_set.T)[0]] + if data.is_undirected(): cover_graph = nx.Graph() + cover_graph.add_nodes_from(nodes) cover_graph.add_edges_from(edges) # find clusters clusters = nx.connected_components(cover_graph) + if data.is_directed(): cover_graph = nx.DiGraph() cover_graph.add_edges_from(edges) + cover_graph.add_nodes_from(nodes) # find clusters clusters = nx.weakly_connected_components(cover_graph) + + for cluster in clusters: # index is the subset of nodes in data # contained in cluster @@ -235,6 +252,7 @@ def _cluster(self, data, cover_mask): num_clusters += 1 self.clusters = mapper_clusters + return mapper_clusters def lift_topology(self, data: torch_geometric.data.Data) -> dict: @@ -276,7 +294,8 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: mapper_clusters = self._cluster(data, cover_mask) # Construct the hypergraph dictionary num_nodes = data["x"].shape[0] - num_edges = data["edge_attr"].size()[0] + num_edges = data["edge_index"].size()[1] + num_clusters = len(mapper_clusters) num_hyperedges = num_edges + num_clusters @@ -288,13 +307,20 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: incidence_1_hyperedges = torch.zeros(num_nodes, num_clusters) + for i, hyperedge in enumerate(mapper_clusters): for j in mapper_clusters[hyperedge][1]: incidence_1_hyperedges[j.int(), i] = 1 + # Incidence matrix is (num_nodes, num_edges + num_clusters) size matrix + + incidence_1 = torch.hstack([incidence_1_edges, incidence_1_hyperedges]) + incidence_1 = torch.Tensor(incidence_1).to_sparse_coo() + print(incidence_1) + return { "incidence_hyperedges": incidence_1, "num_hyperedges": num_hyperedges, diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb index 854c5a4d..88a52b95 100644 --- a/tutorials/graph2hypergraph/mapper_lifting.ipynb +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -6,7 +6,15 @@ "metadata": {}, "source": [ "## Mapper Lifting Tutorial.\n", - "Based on [this paper](https://arxiv.org/pdf/2206.00606). See [Figure 30](https://arxiv.org/pdf/2206.00606) description.\n", + "\n", + "This lifting implements the *Mapper on Graphs* algorithm to construct a hypergraph (which can be enriched with the structure of a combinatorial complex) from a graph. \n", + "\n", + "Based on [this paper](https://arxiv.org/pdf/2206.00606). (See [Figure 30](https://arxiv.org/pdf/2206.00606) description.)\n", + "\n", + "\n", + "\n", + "In this tutorial we load, pre-process and run a model over the lifted dataset. As \n", + "\n", "\n", "1. Begin with graph $X$ and function $g\\colon X^0\\to [a,b]$.\n", "2. Cover codomain with $\\mathcal{U}$. (`gtda.mapper.cover.CubicalCover`)<-- Marissa will handwrite (Halley is compromised)\n", @@ -118,9 +126,9 @@ ], "metadata": { "kernelspec": { - "display_name": "ICML", + "display_name": "topoxkernel", "language": "python", - "name": "icml" + "name": "topoxkernel" }, "language_info": { "codemirror_mode": { @@ -132,7 +140,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.11.3" } }, "nbformat": 4, diff --git a/tutorials/graph2simplicial/clique_lifting.ipynb b/tutorials/graph2simplicial/clique_lifting.ipynb index 03243e3e..b488ade3 100644 --- a/tutorials/graph2simplicial/clique_lifting.ipynb +++ b/tutorials/graph2simplicial/clique_lifting.ipynb @@ -50,7 +50,19 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'modules'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipykernel_50472/3754984083.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun_line_magic\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'load_ext'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'autoreload'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun_line_magic\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'autoreload'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'2'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mmodules\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloaders\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mGraphLoader\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmodules\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpreprocess\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpreprocessor\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mPreProcessor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m from modules.utils.utils import (\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'modules'" + ] + } + ], "source": [ "# With this cell any imported module is reloaded before each cell execution\n", "%load_ext autoreload\n", From 4590141d8fcaa79924dca118bc0ba9d6aeb27cd2 Mon Sep 17 00:00:00 2001 From: Marissa Masden Date: Fri, 28 Jun 2024 12:25:22 -0700 Subject: [PATCH 13/26] fixing yaml --- .../transforms/liftings/graph2hypergraph/mapper_lifting.yaml | 2 +- modules/transforms/liftings/graph2hypergraph/mapper_lifting.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/configs/transforms/liftings/graph2hypergraph/mapper_lifting.yaml b/configs/transforms/liftings/graph2hypergraph/mapper_lifting.yaml index 764384d2..8aff5170 100644 --- a/configs/transforms/liftings/graph2hypergraph/mapper_lifting.yaml +++ b/configs/transforms/liftings/graph2hypergraph/mapper_lifting.yaml @@ -3,4 +3,4 @@ transform_name: "MapperLifting" filer_attr: "laplacian" resolution: 10 gain: 0.3 -filter_func: None \ No newline at end of file +filter_func: \ No newline at end of file diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index 8ffcba2f..b1667004 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -88,8 +88,7 @@ def _verify_cover_parameters(self): "position_sum": lambda data: torch.sum(data.pos, dim=1).unsqueeze(1), "feature_pca": lambda data: torch.pca_lowrank(data.x, q=1), "position_pca": lambda data: torch.pca_lowrank(data.pos, q=1), - ), -} + } class MapperLifting(Graph2HypergraphLifting): From 6af74db305e72eee5b96d9bae0d54b2efc100624 Mon Sep 17 00:00:00 2001 From: Halley Fritze <97766437+hfr1tz3@users.noreply.github.com> Date: Fri, 28 Jun 2024 12:37:12 -0700 Subject: [PATCH 14/26] test file skeleton --- .../graph2hypergraph/test_mapper_lifting.py | 298 +++++++++++++++++- 1 file changed, 296 insertions(+), 2 deletions(-) diff --git a/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py b/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py index 19dda1f4..1283f8e7 100644 --- a/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py +++ b/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py @@ -1,6 +1,300 @@ -import numpy as np +import torch +import torch_geometric + +from modules.data.utils.utils import load_manual_graph +from modules.transforms.lifting.graph2hypergraph.mapper_lifting import ( + MapperCover, + MapperLifting, +) + +expected_edge_incidence = tensor( + [ + [ + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + ], + [ + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + ], + [ + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + ], + [ + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + ], + [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + ], + [ + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + ], + ] +) + + +def enriched_manual_graph(): + data = load_manual_graph() + undirected_edges = torch_geometric.utils.to_undirected(data.edge_index) + new_x = torch.t( + torch.tensor( + [ + [1.0, 5.0, 10.0, 50.0, 100.0, 500.0, 1000.0, 5000.0], + [-0.5, -2.5, -5.0, -25.0, -50.0, -250.0, -500.0, -2500.0], + ] + ) + ) + data.edge_index = undirected_edges + data.x = new_x + new_pos = torch.t( + torch.tensor([[0, 2, 4, 6, 8, 10, 12, 14], [1, 3, 5, 7, 9, 11, 13, 15]]) + ).float() + data.pos = new_pos + return data class TestMapperLifting: - def simple_ex(): + "Test the MapperLifting class" + + @pytest.mark.parametrize( + "filter_name", + [ + "laplacian", + "svd", + "feature_pca", + "position_pca", + "feature_sum", + "position_sum", + ], + ) + def setup_method(self, filter_name): + # Load the graph + self.data = enriched_manual_graph() + # Initialize the MapperLifting class + self.filter_name = filter_name + self.mapper_lift = MapperLifting(filter_attr=filter_name) + + def test_filter(self, filter_name): + # expected_filter_values = { + # "laplacian": , + # "svd": , + # "feature_pca": , + # "position_pca": , + # "feature_sum": , + # "position_sum": , + # } + + return None + + def test_cover(self): + return None + + def test_cluster(self): + return None + + def test_lift_topology(self): return None From 9b6d915879081fc5177becbc7bfd6b492ba33e85 Mon Sep 17 00:00:00 2001 From: Marissa Masden Date: Tue, 9 Jul 2024 09:43:47 -0700 Subject: [PATCH 15/26] fixing typos --- .../graph2hypergraph/mapper_lifting.yaml | 2 +- .../graph2hypergraph/mapper_lifting.py | 22 ++++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/configs/transforms/liftings/graph2hypergraph/mapper_lifting.yaml b/configs/transforms/liftings/graph2hypergraph/mapper_lifting.yaml index 8aff5170..999c8961 100644 --- a/configs/transforms/liftings/graph2hypergraph/mapper_lifting.yaml +++ b/configs/transforms/liftings/graph2hypergraph/mapper_lifting.yaml @@ -1,6 +1,6 @@ transform_type: "lifting" transform_name: "MapperLifting" -filer_attr: "laplacian" +filter_attr: "laplacian" resolution: 10 gain: 0.3 filter_func: \ No newline at end of file diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index b1667004..7635c517 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -299,11 +299,14 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: """ # Filter the data to 1-dimensional subspace filtered_data = self._filter(data) + # Define and fit the cover cover = MapperCover(self.resolution, self.gain) cover_mask = cover.fit_transform(filtered_data) + # Find the clusters in the fitted cover mapper_clusters = self._cluster(data, cover_mask) + # Construct the hypergraph dictionary num_nodes = data["x"].shape[0] num_edges = data["edge_index"].size()[1] @@ -311,30 +314,29 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: num_clusters = len(mapper_clusters) num_hyperedges = num_edges + num_clusters - incidence_1_edges = torch.zeros(num_nodes, num_edges) + incidence_edges = torch.zeros(num_nodes, num_edges) for i, edge in enumerate(torch.t(data["edge_index"])): - incidence_1_edges[edge[0], i] = 1 - incidence_1_edges[edge[1], i] = 1 + incidence_edges[edge[0], i] = 1 + incidence_edges[edge[1], i] = 1 - incidence_1_hyperedges = torch.zeros(num_nodes, num_clusters) + incidence_hyperedges = torch.zeros(num_nodes, num_clusters) for i, hyperedge in enumerate(mapper_clusters): for j in mapper_clusters[hyperedge][1]: - incidence_1_hyperedges[j.int(), i] = 1 + incidence_hyperedges[j.int(), i] = 1 # Incidence matrix is (num_nodes, num_edges + num_clusters) size matrix - - incidence_1 = torch.hstack([incidence_1_edges, incidence_1_hyperedges]) + incidence = torch.hstack([incidence_edges, incidence_hyperedges]) - incidence_1 = torch.Tensor(incidence_1).to_sparse_coo() + incidence = torch.Tensor(incidence).to_sparse_coo() - print(incidence_1) + print(incidence) return { - "incidence_hyperedges": incidence_1, + "incidence_hyperedges": incidence, "num_hyperedges": num_hyperedges, "x_0": data.x, } From 5872b3be4c3a4529f0fa2bcfbb98736172195c4c Mon Sep 17 00:00:00 2001 From: Halley Fritze <97766437+hfr1tz3@users.noreply.github.com> Date: Tue, 9 Jul 2024 13:32:21 -0700 Subject: [PATCH 16/26] some mapper_lift changes --- modules/transforms/data_transform.py | 7 +- .../liftings/graph2hypergraph/knn_lifting.py | 4 +- .../graph2hypergraph/mapper_lifting.py | 137 +++++++------ .../graph2hypergraph/test_mapper_lifting.py | 194 +++++++++++++++--- 4 files changed, 244 insertions(+), 98 deletions(-) diff --git a/modules/transforms/data_transform.py b/modules/transforms/data_transform.py index 751c6b9a..17b072df 100755 --- a/modules/transforms/data_transform.py +++ b/modules/transforms/data_transform.py @@ -10,16 +10,13 @@ from modules.transforms.feature_liftings.feature_liftings import ProjectionSum from modules.transforms.liftings.graph2cell.cycle_lifting import CellCycleLifting from modules.transforms.liftings.graph2hypergraph.knn_lifting import ( - HypergraphKNNLifting -) -from modules.transforms.liftings.graph2hypergraph.mapper_lifting import ( - MapperLifting + HypergraphKNNLifting, ) +from modules.transforms.liftings.graph2hypergraph.mapper_lifting import MapperLifting from modules.transforms.liftings.graph2simplicial.clique_lifting import ( SimplicialCliqueLifting, ) - TRANSFORMS = { # Graph -> Hypergraph "HypergraphKNNLifting": HypergraphKNNLifting, diff --git a/modules/transforms/liftings/graph2hypergraph/knn_lifting.py b/modules/transforms/liftings/graph2hypergraph/knn_lifting.py index 412be7fa..7fb003bb 100755 --- a/modules/transforms/liftings/graph2hypergraph/knn_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/knn_lifting.py @@ -67,9 +67,9 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: data_lifted.edge_index[:, idx] = torch.tensor([[i, i]]).T incidence_1[data_lifted.edge_index[1], data_lifted.edge_index[0]] = 1 - + incidence_1 = torch.Tensor(incidence_1).to_sparse_coo() - + return { "incidence_hyperedges": incidence_1, "num_hyperedges": num_hyperedges, diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index 7635c517..3223ffbb 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -1,7 +1,12 @@ import networkx as nx import torch import torch_geometric -from torch_geometric.transforms import AddLaplacianEigenvectorPE, SVDFeatureReduction, ToUndirected, Compose +from torch_geometric.transforms import ( + AddLaplacianEigenvectorPE, + Compose, + SVDFeatureReduction, + ToUndirected, +) from torch_geometric.utils import subgraph from modules.transforms.liftings.graph2hypergraph.base import Graph2HypergraphLifting @@ -46,7 +51,8 @@ def fit_transform(self, filtered_data): < (n_sample, resolution) boolean Tensor. Mask which identifies which data points are in each cover set. Covers which are empty - are removed so k = number of nonempty cover sets. + are removed so output tensor has at most + size (n_sample, resolution). """ data_min = torch.min(filtered_data) @@ -54,16 +60,28 @@ def fit_transform(self, filtered_data): data_range = torch.max(filtered_data) - torch.min(filtered_data) # width of each interval in the cover cover_width = data_range / (self.resolution - (self.resolution - 1) * self.gain) - lower_endpoints = torch.linspace( - data_min, data_max - cover_width, self.resolution + 1 + last_lower_endpoint = data_min + cover_width * (self.resolution - 1) * ( + 1 - self.gain ) + lower_endpoints = torch.linspace(data_min, last_lower_endpoint, self.resolution) upper_endpoints = lower_endpoints + cover_width - self.left_endpoints = lower_endpoints - self.right_endpoints = upper_endpoints + self.cover_intervals = torch.hstack( + ( + lower_endpoints.reshape([self.resolution, 1]), + upper_endpoints.reshape([self.resolution, 1]), + ) + ) # want a n x resolution Boolean tensor lower_values = torch.ge(filtered_data, lower_endpoints) upper_values = torch.le(filtered_data, upper_endpoints) - mask = torch.logical_and(lower_values, upper_values) + # need to check close values to deal with some endpoint issues + lower_is_close_values = torch.isclose(filtered_data, lower_endpoints) + upper_is_close_values = torch.isclose(filtered_data, upper_endpoints) + # construct the boolean mask + mask = torch.logical_and( + torch.logical_or(lower_values, lower_is_close_values), + torch.logical_or(upper_values, upper_is_close_values), + ) # remove empty intervals from cover non_empty_covers = torch.any(mask, 0) return mask[:, non_empty_covers] @@ -82,13 +100,19 @@ def _verify_cover_parameters(self): # Global filter dictionary for the MapperLifting class. filter_dict = { - "laplacian": Compose([ToUndirected(), AddLaplacianEigenvectorPE(k=1, is_undirected=True)]), + "laplacian": Compose( + [ToUndirected(), AddLaplacianEigenvectorPE(k=1, is_undirected=True)] + ), "svd": SVDFeatureReduction(out_channels=1), "feature_sum": lambda data: torch.sum(data.x, dim=1).unsqueeze(1), "position_sum": lambda data: torch.sum(data.pos, dim=1).unsqueeze(1), - "feature_pca": lambda data: torch.pca_lowrank(data.x, q=1), - "position_pca": lambda data: torch.pca_lowrank(data.pos, q=1), - } + "feature_pca": lambda data: torch.matmul( + data.x, torch.pca_lowrank(data.x, q=1)[2][:, :1] + ), + "position_pca": lambda data: torch.matmul( + data.pos, torch.pca_lowrank(data.pos, q=1)[2][:, :1] + ), +} class MapperLifting(Graph2HypergraphLifting): @@ -125,11 +149,13 @@ class MapperLifting(Graph2HypergraphLifting): The following are common filter functions which can be called with filter_attr. - 1. "laplacian" : Applies the torch_geometric.transforms.AddLaplacianEigenvectorPE(k=1) - transform and projects onto the 1st eigenvector. + 1. "laplacian" : Converts data to an undirected graph and then applies the + torch_geometric.transforms.AddLaplacianEigenvectorPE(k=1) transform and + projects onto the 1st eigenvector. 2. "svd" : Applies the torch_geometric.transforms.SVDFeatureReduction(out_channels=1) - transform to project to 1-dimensional subspace. + transform to the node feature matrix (ie. torch_geometric.Data.data.x) + to project data to a 1-dimensional subspace. 3. "feature_pca" : Applies torch.pca_lowrank(q=1) transform to node feature matrix (ie. torch_geometric.Data.data.x) and then projects to the 1st principle component. @@ -147,6 +173,7 @@ class MapperLifting(Graph2HypergraphLifting): 7. "my_filter_attr" : my_filter_func = lambda data : my_filter_func(data) where my_filter_func(data) outputs a (n_sample, 1) Tensor. + Additionally, assign filter_func = my_filter_func. References ---------- @@ -169,7 +196,7 @@ def __init__( self.resolution = resolution self.gain = gain self.filter_func = filter_func - self._verify_filter_parameters() + self._verify_filter_parameters(filter_attr, filter_func) def _filter(self, data): """Applies 1-dimensional filter function to @@ -182,15 +209,9 @@ def _filter(self, data): filtered_data = transformed_data["laplacian_eigenvector_pe"] if self.filter_attr == "svd": filtered_data = transformed_data.x - if self.filter_attr == "feature_pca": - filtered_data = torch.matmul(data.x, transformed_data[2][:, :1]) - if self.filter_attr == "position_pca": - filtered_data = torch.matmul(data.pos, transformed_data[2][:, :1]) if self.filter_attr not in [ "laplacian", "svd", - "feature_pca", - "position_pca", ]: filtered_data = transformed_data @@ -205,7 +226,6 @@ def _filter(self, data): return filtered_data - def _cluster(self, data, cover_mask): """Finds clusters in each cover set within cover_mask. For each cover set, a cluster is a @@ -214,45 +234,33 @@ def _cluster(self, data, cover_mask): """ mapper_clusters = {} num_clusters = 0 - # Each cover set is of the form [1, n_samples] - + # convert data to undirected graph for clustering + to_undirected = ToUndirected() + data = to_undirected(data) - - for i, cover_set in enumerate(cover_mask.T): + # Each cover set is of the form [n_samples] + for i, cover_set in enumerate(torch.t(cover_mask)): # Find indices of nodes which are in each cover set # cover_data = data.subgraph(cover_set.T) does not work # as it relabels node indices - - cover_data, _ = torch_geometric.utils.subgraph( - - torch.t(cover_set), data["edge_index"] + cover_data, _ = torch_geometric.utils.subgraph( + cover_set, data["edge_index"] ) - + edges = [ (i.item(), j.item()) for i, j in zip(cover_data[0], cover_data[1], strict=False) ] - - nodes = [i.item() for i in torch.where(cover_set.T)[0]] - - if data.is_undirected(): - cover_graph = nx.Graph() - cover_graph.add_nodes_from(nodes) - cover_graph.add_edges_from(edges) - # find clusters - clusters = nx.connected_components(cover_graph) - - if data.is_directed(): - cover_graph = nx.DiGraph() - cover_graph.add_edges_from(edges) - cover_graph.add_nodes_from(nodes) - # find clusters - clusters = nx.weakly_connected_components(cover_graph) - - - + nodes = [i.item() for i in torch.where(cover_set)[0]] + # build graph to find clusters + cover_graph = nx.Graph() + cover_graph.add_nodes_from(nodes) + cover_graph.add_edges_from(edges) + # find clusters + clusters = nx.connected_components(cover_graph) + for cluster in clusters: # index is the subset of nodes in data # contained in cluster @@ -264,7 +272,7 @@ def _cluster(self, data, cover_mask): num_clusters += 1 self.clusters = mapper_clusters - + return mapper_clusters def lift_topology(self, data: torch_geometric.data.Data) -> dict: @@ -299,14 +307,14 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: """ # Filter the data to 1-dimensional subspace filtered_data = self._filter(data) - + # Define and fit the cover cover = MapperCover(self.resolution, self.gain) cover_mask = cover.fit_transform(filtered_data) - + # Find the clusters in the fitted cover mapper_clusters = self._cluster(data, cover_mask) - + # Construct the hypergraph dictionary num_nodes = data["x"].shape[0] num_edges = data["edge_index"].size()[1] @@ -322,34 +330,33 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: incidence_hyperedges = torch.zeros(num_nodes, num_clusters) - for i, hyperedge in enumerate(mapper_clusters): for j in mapper_clusters[hyperedge][1]: incidence_hyperedges[j.int(), i] = 1 - + # Incidence matrix is (num_nodes, num_edges + num_clusters) size matrix incidence = torch.hstack([incidence_edges, incidence_hyperedges]) - + incidence = torch.Tensor(incidence).to_sparse_coo() - print(incidence) - + print(incidence) + return { "incidence_hyperedges": incidence, "num_hyperedges": num_hyperedges, "x_0": data.x, } - def _verify_filter_parameters(self): - assert type(self.filter_attr) is str, f"filter_attr must be a string or None." - if self.filter_func is None: + def _verify_filter_parameters(self, filter_attr, filter_func): + if filter_func is None: assert ( self.filter_attr in filter_dict ), f"Please add function to filter_func or choose filter_attr from {list(filter_dict)}. \ - Currently filter_func is {self.filter_func} and filter_attr is {self.filter_attr}." - if self.filter_func is not None: + Currently filter_func is {filter_func} and filter_attr is {filter_attr}." + if filter_func is not None: assert ( self.filter_attr not in filter_dict ), f"Assign new filter_attr not in {list(filter_dict)} or leave filter_func as None. \ - Currently filter_func is {self.filter_func} and filter_attr is {self.filter_attr}" + Currently filter_func is {filter_func} and filter_attr is {filter_attr}" + assert type(filter_attr) is str, f"filter_attr must be a string." diff --git a/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py b/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py index 1283f8e7..4faab33a 100644 --- a/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py +++ b/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py @@ -1,13 +1,14 @@ +import pytest import torch import torch_geometric from modules.data.utils.utils import load_manual_graph -from modules.transforms.lifting.graph2hypergraph.mapper_lifting import ( +from modules.transforms.liftings.graph2hypergraph.mapper_lifting import ( MapperCover, MapperLifting, ) -expected_edge_incidence = tensor( +expected_edge_incidence = torch.tensor( [ [ 1.0, @@ -257,11 +258,60 @@ def enriched_manual_graph(): return data +def naive_filter(data, filter): + filter_dict = { + "laplacian": Compose( + [ToUndirected(), AddLaplacianEigenvectorPE(k=1, is_undirected=True)] + ), + "svd": SVDFeatureReduction(out_channels=1), + "feature_sum": lambda data: torch.sum(data.x, dim=1).unsqueeze(1), + "position_sum": lambda data: torch.sum(data.pos, dim=1).unsqueeze(1), + "feature_pca": lambda data: torch.matmul( + data.x, torch.pca_lowrank(data.x, q=1)[2][:, :1] + ), + "position_pca": lambda data: torch.matmul( + data.pos, torch.pca_lowrank(data.pos, q=1)[2][:, :1] + ), + } + transform = filter_dict[filter] + filtered_data = transform(data) + if filter == "laplacian": + filtered_data = filtered_data["laplacian_eigenvector_pe"] + elif name == "svd": + filtered_data = filtered_data.x + return filtered_data + + +"""Construct a cover_mask from filtered data and default lift parameters.""" + + +def naive_cover(filtered_data): + cover_mask = torch.full((filtered_data.shape[0], 10), False, dtype=torch.bool) + data_min = torch.min(filtered_data) + data_max = torch.max(filtered_data) + data_range = torch.max(filtered_data) - torch.min(filtered_data) + # width of each interval in the cover + cover_width = data_range / (10 - (10 - 1) * 0.3) + last = data_min + (10 - 1) * (1 - 0.3) * cover_width + lows = torch.zeros(10) + for i in range(10): + lows[i] = (data_min) + (i) * (1 - 0.3) * cover_width + highs = lows + cover_width + for j, pt in enumerate(filtered_data): + cover_mask[j] = (pt > lows) and (pt < highs) + return cover_mask + + class TestMapperLifting: "Test the MapperLifting class" + def setup(self, filter): + self.data = enriched_manual_graph() + self.filter_name = filter + self.mapper_lift = MapperLifting(filter_attr=filter) + @pytest.mark.parametrize( - "filter_name", + "filter", [ "laplacian", "svd", @@ -271,30 +321,122 @@ class TestMapperLifting: "position_sum", ], ) - def setup_method(self, filter_name): - # Load the graph - self.data = enriched_manual_graph() - # Initialize the MapperLifting class - self.filter_name = filter_name - self.mapper_lift = MapperLifting(filter_attr=filter_name) - - def test_filter(self, filter_name): - # expected_filter_values = { - # "laplacian": , - # "svd": , - # "feature_pca": , - # "position_pca": , - # "feature_sum": , - # "position_sum": , - # } + def test_filter(self, filter): + self.setup(filter) + expected_filter_values = { + "laplacian": torch.tensor( + [ + [0.3371], + [0.3611], + [0.0463], + [-0.4241], + [0.3611], + [-0.3546], + [-0.5636], + [-0.0158], + ] + ), + "svd": torch.tensor( + [ + [-1.1183e00], + [-5.5902e00], + [-1.1180e01], + [-5.5902e01], + [-1.1180e02], + [-5.5902e02], + [-1.1180e03], + [-5.5902e03], + ] + ), + "feature_pca": torch.tensor( + [ + [-1.1180e00], + [-5.5902e00], + [-1.1180e01], + [-5.5902e01], + [-1.1180e02], + [-5.5902e02], + [-1.1180e03], + [-5.5902e03], + ] + ), + "position_pca": torch.tensor( + [ + [-0.7071], + [-3.5355], + [-6.3640], + [-9.1924], + [-12.0208], + [-14.8492], + [-17.6777], + [-20.5061], + ] + ), + "feature_sum": torch.tensor( + [ + [5.0000e-01], + [2.5000e00], + [5.0000e00], + [2.5000e01], + [5.0000e01], + [2.5000e02], + [5.0000e02], + [2.5000e03], + ] + ), + "position_sum": torch.tensor( + [[1.0], [5.0], [9.0], [13.0], [17.0], [21.0], [25.0], [29.0]] + ), + } + lift_filter_data = self.mapper_lift._filter(self.data) + naive_filter_data = naive_filter(self.data, filter) + assert naive_filter_data == lift_filter_data + # assert torch.all(torch.isclose(expected_filter_values[self.filter_name],lift_filter_data)),\ + # f"Something is wrong with filtered values using {self.filter_name}.{lift_filter_data-expected_filter_values[self.filter_name]}." - return None + # def test_cover(self): + # # expected_cover_mask = { + # # "laplacian": , + # # "svd": , + # # "feature_pca": , + # # "position_pca": , + # # "feature_sum": , + # # "position_sum": , + # # } + # # expected_cover_mask = naive_cover( + # lift_cover_mask = self.mapper_lift.forward(self.data.clone()).cover + # assert expected_cover_mask[self.filter_name] == lift_cover_mask,\ + # f"Something is wrong with the cover mask using {self.filter_name}." - def test_cover(self): - return None + # def test_cluster(self): + # # expected_clusters = { + # # "laplacian": , + # # "svd": , + # # "feature_pca": , + # # "position_pca": , + # # "feature_sum": , + # # "position_sum": , + # # } + # lift_clusters = self.mapper_lift.forward(self.data.clone()).clusters + # assert expected_clusters[self.filter_name] == lift_clusters,\ + # f"Something is wrong with the clustering using {self.filter_name}." - def test_cluster(self): - return None + # def test_lift_topology(self): + # # expected_hyperedge_incidence = { + # # "laplacian": , + # # "svd": , + # # "feature_pca": , + # # "position_pca": , + # # "feature_sum": , + # # "position_sum": , + # # } + # expected_incidence_1 = torch.cat( + # (expected_edge_incidence, expected_hyperedge_incidence[self.filter_name]), + # 1 + # )## MAYBE CHANGE DIMENSION!!!!!!!!!!!!!!!!!!!!!!!!! + # lifted_mapper = self.mapper_lift.forward(self.data.clone()) + # assert (expected_incidence_1 == lifted_mapper.incidence_hyperedges.to_dense()).all(),\ + # f"Something is wrong with the incidence hyperedges for the mapper lifting with {self.fitler_name}." - def test_lift_topology(self): - return None + # assert expected_n_hyperedges == lifted_mapper.num_hyperedges,\ + # f"Something is wrong with the number of hyperedges for the mapper lifting with {self.filter_name}." From d6b5db628a39898093be99a4c7e52e0e521675ae Mon Sep 17 00:00:00 2001 From: Marissa Masden Date: Tue, 9 Jul 2024 16:06:21 -0700 Subject: [PATCH 17/26] Updated Tutorial --- .../graph2hypergraph/mapper_lifting.py | 3 +- .../graph2hypergraph/mapper_lifting.ipynb | 404 +++++++++++++++--- 2 files changed, 352 insertions(+), 55 deletions(-) diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index 3223ffbb..c33d1936 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -316,8 +316,9 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: mapper_clusters = self._cluster(data, cover_mask) # Construct the hypergraph dictionary - num_nodes = data["x"].shape[0] + num_nodes = data["x"].shape[0] num_edges = data["edge_index"].size()[1] + num_clusters = len(mapper_clusters) num_hyperedges = num_edges + num_clusters diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb index 88a52b95..b738a519 100644 --- a/tutorials/graph2hypergraph/mapper_lifting.ipynb +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -2,126 +2,422 @@ "cells": [ { "cell_type": "markdown", - "id": "6da220ee-dd34-4380-9c78-0f2a9e610b1f", + "id": "455fe1fb-e7b7-454e-a6d9-e89fe46f27e1", "metadata": {}, "source": [ - "## Mapper Lifting Tutorial.\n", + "# Mapper Lifting Tutorial.\n", "\n", - "This lifting implements the *Mapper on Graphs* algorithm to construct a hypergraph (which can be enriched with the structure of a combinatorial complex) from a graph. \n", + "This lifting implements the *Mapper on Graphs* algorithm [\\[1\\]](https://arxiv.org/pdf/2206.00606) to construct a hypergraph (which can be enriched with the structure of a combinatorial complex) from a graph. It operates in the following way: \n", "\n", - "Based on [this paper](https://arxiv.org/pdf/2206.00606). (See [Figure 30](https://arxiv.org/pdf/2206.00606) description.)\n", + "1) Begin with graph $X$ and function $g: X^{(0)} \\to [a,b]$. \n", + "2) The algorithm creates $\\mathcal{U}$, a cover of $[a,b]$,\n", + "3) For $U\\in \\mathcal{U}$, the set of vertices $g^{-1}(U)$ induce a subgraph $X_U$ of $X$; together, these pullback sets cover $X^{(0)}$. \n", + "4) For each $U$, \"cluster\" $X_U$ into its connected components. Each connected component is a hyperedge in the lifted topology.\n", + "5) Additionally, each edge is a hyperedge in the lifted topology. This could allow for the enrichment of the hypergraph with the structure of a combinatorial complex, if desired. \n", "\n", + "The 1-skeleton of the nerve of the resulting cover would give the results of the classic Mapper algorithm for graph simplification with filter function $g$. \n", "\n", + "By default, the function $g$ is the first projection of the graph Laplacian embedding of the unweighted edge adjacency matrix of $X$, as this may be defined on all graphs and is known to capture topological information. However, users may define other functions $g$ dependent on what features their data contains. We have implemented some simple examples:" + ] + }, + { + "cell_type": "markdown", + "id": "340c5320-abbe-4efc-954f-60d3566b5be9", + "metadata": {}, + "source": [ + "## List of filter functions\n", + "\n", + "The example filter functions $g$ which are implemented are the following: \n", + "\n", + " 1. \"laplacian\" : Converts data to an undirected graph and then applies the\n", + " torch_geometric.transforms.AddLaplacianEigenvectorPE(k=1) transform and\n", + " projects onto the 1st eigenvector.\n", + "\n", + " 2. \"svd\" : Applies the torch_geometric.transforms.SVDFeatureReduction(out_channels=1)\n", + " transform to the node feature matrix (ie. torch_geometric.Data.data.x)\n", + " to project data to a 1-dimensional subspace.\n", + "\n", + " 3. \"feature_pca\" : Applies torch.pca_lowrank(q=1) transform to node feature matrix\n", + " (ie. torch_geometric.Data.data.x) and then projects to the 1st principal component.\n", "\n", - "In this tutorial we load, pre-process and run a model over the lifted dataset. As \n", + " 4. \"position_pca\" : Applies torch.pca_lowrank(q=1) transform to node position matrix\n", + " (ie. torch_geometric.Data.data.pos) and then projects to the 1st principal component.\n", "\n", + " 5. \"feature_sum\" : Applies torch.sum(dim=1) to the node feature matrix in the graph\n", + " (ie. torch_geometric.Data.data.x).\n", "\n", - "1. Begin with graph $X$ and function $g\\colon X^0\\to [a,b]$.\n", - "2. Cover codomain with $\\mathcal{U}$. (`gtda.mapper.cover.CubicalCover`)<-- Marissa will handwrite (Halley is compromised)\n", - "3. Pullback $g^{-1}(\\mathcal{U})$ and this covers $X$. (see 4.)\n", - "4. Perform a \"clustering\" where clusters are determined by connected componenets in each pullback sets $g^{-1}(U_\\alpha)$ (`toponetx.algorithms.components.connected_compoenents`)\n", - "5. This is the hypergraph and we can color via the function $g$ (`toponetx.classes.colored_hypergraph.ColoredHypergraph`)\n", + " 6. \"position_sum\" : Applies torch.sum(dim=1) to the node position matrix in the graph\n", + " (ie. torch_geometric.Data.data.pos).\n", "\n", - "6. (**optional**) Take nerve and construct $k$-mapper for simplicial complex. " + "\n", + "You may also construct your own filter_attr and filter_func:\n", + "\n", + " 7. \"my_filter_attr\" : my_filter_func = lambda data : my_filter_func(data)\n", + " where my_filter_func(data) outputs a (n_sample, 1) Tensor.\n", + " Additionally, when calling the transform, set \n", + " filter_attribute = \"my_filter_attr\"\n", + " filter_func = my_filter_func" + ] + }, + { + "cell_type": "markdown", + "id": "62d375df-e6a9-4d99-9f5c-8a16e77c2054", + "metadata": {}, + "source": [ + "## Data Loading" ] }, { "cell_type": "markdown", - "id": "404710c4-0de7-4fee-9e58-d811314887a9", + "id": "43ca6a25-d678-4bd6-801d-6b4f4d20a074", "metadata": {}, "source": [ - "- For weighted graphs we could do the \"clustering\" on the pullback via a thresholding on the on the weights on the original graph edges. (Can make parameter and use DBSCAN for this case or something)." + "### Imports and utilities" ] }, { "cell_type": "code", - "execution_count": null, - "id": "28298ec9-957c-4e9a-8923-67726e597e42", + "execution_count": 1, + "id": "b74b7182-65d1-410f-9d09-39f71c81fd3b", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "# With this cell any imported module is reloaded before each cell execution\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "from modules.data.load.loaders import GraphLoader\n", + "from modules.data.preprocess.preprocessor import PreProcessor\n", + "from modules.utils.utils import (\n", + " describe_data,\n", + " load_dataset_config,\n", + " load_model_config,\n", + " load_transform_config,\n", + ")" + ] }, { "cell_type": "markdown", - "id": "7e325d28-dad7-41ae-8706-5e5c5dae225c", + "id": "28a074ca-1b46-4040-b2ff-83106bcc6512", "metadata": {}, "source": [ - "**Filter**\n", - "- Could construct colored hypergraph where the coloring is based on the filter $g$.\n", - "- For graph `torch_geometric.data.Data` have the user choose filter function. Default should be PCA on `torch_geometric.data.Data.pos`. Use can input their own filter function just check that transform is quantitative. If function is on edges, user may have to specify \"filter type\": (Node, Edge) or position. Filters we construct \"in house\" should just be some projection function (see `gtda.mapper.filter.Projection`).\n", - "- If projection is to some node or edge attribute have the user have attr: str as the parameter. Function will check if that is a node or edge attr. Maybe add extra arg to specify (default: None) or in {node, edge,pos, None} to specify attribute dictionary we should filter from.\n", - "- Filter Idea: If there is no features on the data and it is just a graph. Take graph distance for each node to random node in the graph. There is also the spectral distance (smallest nonzero eigenvector of graph laplacian and projects each node corresponding to that eigenvector) and can capture circle data in the graph. Default filter (no atts) can be spectral projection." + "### Loading Dataset\n", + "\n", + "The default size of the cover of the " ] }, { "cell_type": "code", - "execution_count": null, - "id": "f3ccc397-ca12-4186-ac47-80ca63c824ec", + "execution_count": 2, + "id": "e01adb3e-2d01-4a5f-9103-9cf9350e6953", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Dataset configuration for ZINC:\n", + "\n", + "{'data_domain': 'graph',\n", + " 'data_type': 'ZINC',\n", + " 'data_name': 'ZINC',\n", + " 'data_dir': 'datasets/graph/ZINC',\n", + " 'num_features': 1,\n", + " 'num_classes': 1,\n", + " 'task': 'regression',\n", + " 'loss_type': 'mse',\n", + " 'monitor_metric': 'mae',\n", + " 'task_level': 'graph'}\n" + ] + } + ], + "source": [ + "dataset_name = \"ZINC\"\n", + "dataset_config = load_dataset_config(dataset_name)\n", + "loader = GraphLoader(dataset_config)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "089f8221-686c-4fa1-92e8-4ec10e0d4eb4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Dataset contains 12000 samples.\n", + "\n", + "Providing more details about sample 0/12000:\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - Graph with 29 vertices and 64 edges.\n", + " - Features dimensions: [1, 1]\n", + " - There are 0 isolated nodes.\n", + "\n" + ] + } + ], + "source": [ + "dataset = loader.load()\n", + "describe_data(dataset)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "efc929ad-0658-44e8-a006-0ab8b98b6ada", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 6, 7, 7, 8,\n", + " 8, 8, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 15, 15, 15,\n", + " 16, 16, 16, 16, 17, 18, 19, 19, 19, 20, 20, 21, 21, 21, 22, 23, 23, 24,\n", + " 24, 25, 25, 26, 26, 27, 27, 27, 28, 28],\n", + " [ 1, 0, 2, 1, 3, 28, 2, 4, 3, 5, 4, 6, 27, 5, 7, 6, 8, 7,\n", + " 9, 10, 8, 8, 11, 27, 10, 12, 11, 13, 26, 12, 14, 13, 15, 14, 16, 25,\n", + " 15, 17, 18, 19, 16, 16, 16, 20, 24, 19, 21, 20, 22, 23, 21, 21, 24, 19,\n", + " 23, 15, 26, 12, 25, 5, 10, 28, 2, 27]])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset[0][\"edge_index\"]" + ] }, { "cell_type": "markdown", - "id": "73dc0594-61cb-4ffd-8483-47582d2044bf", + "id": "9d7101cc-c38f-42c9-bdd6-36137768a407", "metadata": {}, "source": [ - "**Cover**\n", - "- Parameters `resolution`: number of intervals to cover codomain in (int: default 10)\n", - "- `gain`: percentage overlap for each neighboring interval in the cover (float: 0.3)\n", - "- fit method. This should take input data (filtered data) and produce intervals for each cover set in codomain. Could have atts: `.cover_sets` which is array of shape (n_intervals, 2)\n", - "- transform_method. This should take `.cover_sets` and produce mask (n_samples, n_cover sets) to describe which cover sets contain each data point.\n", + "## Loading and Applying Lifting" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "dff7e9b8-912c-42df-95d0-be1c18b1ade1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Transform configuration for graph2hypergraph/mapper_lifting:\n", + "\n", + "{'transform_type': 'lifting',\n", + " 'transform_name': 'MapperLifting',\n", + " 'filter_attr': 'laplacian',\n", + " 'resolution': 10,\n", + " 'gain': 0.3,\n", + " 'filter_func': None}\n" + ] + } + ], + "source": [ + "# Define transformation type and id\n", + "transform_type = \"liftings\"\n", + "transform_id = \"graph2hypergraph/mapper_lifting\"\n", "\n", - "*Completed 6/24/2024*" + "# Read yaml file\n", + "transform_config = {\n", + " \"lifting\": load_transform_config(transform_type, transform_id)\n", + "} \n" ] }, { - "cell_type": "markdown", - "id": "935813e3-c42e-46d0-9d32-383e630cbf32", + "cell_type": "code", + "execution_count": 6, + "id": "28908f07-452c-44c8-8f47-df7eca65060b", "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Transform parameters are the same, using existing data_dir: /home/mmasden/Development/topolift/challenge-icml-2024/datasets/graph/ZINC/ZINC/lifting/4095215502\n" + ] + } + ], "source": [ - "**Hypergraph**\n", - "- This is the output.\n", - "- Transform the mask given by the cover and convert it correctly into a hypergraph colored by the filter function." + "#apply preprocessor to obtain lifted dataset on some of the original graphs\n", + "\n", + "lifted_dataset = PreProcessor(dataset[0:5], transform_config, loader.data_dir)" ] }, { "cell_type": "markdown", - "id": "74e53caf-ac10-4f50-8836-6d857848820f", + "id": "fc78bc3f-df95-4ebe-a722-496a32ff90fc", "metadata": {}, "source": [ - "**Clustering**\n", + "### Visualize the lifted dataset\n", "\n", - "* Connected components of the graph (Default)\n", - "* Torch.geometric subgraph functions (take a cover set, construct it as a subgraph, use nx.get_connected_components to get a mask on the original graph)\n", - "* " + "The incidence hyperedges include both original edges and clusters from new edges. As the first $n_{edges}$ hyperedges are from the original graph edges, we visualize membership in the remaining hyperedges. " ] }, { - "cell_type": "markdown", - "id": "e75c233a-c713-4a29-9fff-7831a7cb4290", + "cell_type": "code", + "execution_count": 7, + "id": "cd8a53e4-66bc-4ba2-b3d6-8ea18cc19997", "metadata": {}, + "outputs": [], "source": [ - "### To-do's \n", + "# imports for visualization \n", + "\n", + "import torch\n", + "import networkx as nx\n", + "from torch_geometric.utils import to_networkx\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.pyplot import Line2D" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "93076374-315b-4c58-afbc-7b259d8151a7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 0.98, 'Hypergraph constructed from Mapper lifting using default parameters.')" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#obtain a representative graph from the lifted dataset\n", + "data = lifted_dataset[0]\n", + "\n", + "#set up plot\n", + "fig,ax = plt.subplots()\n", + "cmap=plt.cm.gist_rainbow\n", + "\n", + "# get a nice layout for the original graph\n", + "G = to_networkx(data)\n", + "pos = nx.kamada_kawai_layout(G)\n", + "_ = nx.draw_networkx_edges(G, pos=pos, ax=ax)\n", + "\n", + "#get the number of original edges \n", + "n_edges = data[\"edge_index\"][0].size()[0]\n", "\n", - "Marissa to do: Make tutorial \n", + "# obtain incidence hyperedges and which vertices belong to the new hyperedges \n", + "incidence_hyperedges = data[\"incidence_hyperedges\"].to_dense()\n", + "members = torch.where(incidence_hyperedges[:,n_edges:]) \n", "\n", - "Halley to do: Make test file? \n", + "# scale colormapping\n", + "cmap_max = torch.max(members[1])\n", "\n", - "`dataset_name = \"manual_dataset\"` \n", + "# plot pie chart showing hyperedge containment of each node\n", + "for node in pos: \n", + " which_hyperedges = torch.where(members[0]==node)[0]\n", + " \n", + " p,t = ax.pie([1]*len(which_hyperedges), \n", + " center=pos[node], \n", + " colors=cmap(members[1][which_hyperedges]/cmap_max), \n", + " radius=0.05, \n", + " labels = [m.item() for m in members[1][which_hyperedges]+n_edges],\n", + " labeldistance = 0.3)\n", "\n", - "` dataset_config = load_dataset_config(dataset_name)`\n", + "# rescale for visualization purposes\n", + "ax.set_xlim(min([pos[node][0] for node in pos]), max([pos[node][0] for node in pos]))\n", + "ax.set_ylim(min([pos[node][1] for node in pos]), max([pos[node][1] for node in pos]))\n", "\n", - "` loader = GraphLoader(dataset_config)`\n" + "# plot legend\n", + "legend_dots = [Line2D([0], [0], marker='o', color='w',\n", + " markerfacecolor=cmap(member/cmap_max), markersize=15, \n", + " label=\"{}\".format(member+n_edges)) for member in members[1].unique()]\n", + "\n", + "ax.legend(handles=legend_dots, loc='best', title=\"Hyperedge Number\")\n", + "\n", + "fig.suptitle(\"Hypergraph constructed from Mapper lifting using default parameters.\")" + ] + }, + { + "cell_type": "markdown", + "id": "a85ac72b-246b-4b02-9283-522ec0ad39b5", + "metadata": {}, + "source": [ + "## Creating and Running NN model.\n", + "\n", + "We load an appropriate model and evaluate it on the lifted dataset. If the model evaluates, we have a successful lifting to the hypergraph domain!" ] }, { "cell_type": "code", - "execution_count": null, - "id": "e1795e5d-1f57-4692-a332-ddbfe61ee127", + "execution_count": 9, + "id": "ce4fad04-2fd4-43c5-9c35-f6e751513ad3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Model configuration for hypergraph UNIGCN:\n", + "\n", + "{'in_channels': None,\n", + " 'hidden_channels': 32,\n", + " 'out_channels': None,\n", + " 'n_layers': 2}\n" + ] + } + ], + "source": [ + "from modules.models.hypergraph.unigcn import UniGCNModel\n", + "\n", + "model_type = \"hypergraph\"\n", + "model_id = \"unigcn\"\n", + "model_config = load_model_config(model_type, model_id)\n", + "\n", + "model = UniGCNModel(model_config, dataset_config)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "1dc295a9-28a9-4534-8993-ce8bbea9ded7", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "y_hat = model(lifted_dataset.get(0))" + ] } ], "metadata": { From d66588da47799388a5efde30ff3a6644cfc366be Mon Sep 17 00:00:00 2001 From: Halley Fritze <97766437+hfr1tz3@users.noreply.github.com> Date: Tue, 9 Jul 2024 20:11:11 -0700 Subject: [PATCH 18/26] test file complete. passes all test. --- Untitled.ipynb | 925 ++++++++++++++++++ .../graph2hypergraph/mapper_lifting.py | 26 +- .../graph2hypergraph/test_mapper_lifting.py | 465 ++++++--- .../graph2hypergraph/mapper_lifting.ipynb | 61 +- 4 files changed, 1305 insertions(+), 172 deletions(-) create mode 100644 Untitled.ipynb diff --git a/Untitled.ipynb b/Untitled.ipynb new file mode 100644 index 00000000..cbc37c2b --- /dev/null +++ b/Untitled.ipynb @@ -0,0 +1,925 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "d468da01-052b-46fe-a2c7-babc48429da0", + "metadata": {}, + "outputs": [], + "source": [ + "import torch, torch_geometric\n", + "from modules.data.utils.utils import load_manual_graph, get_Planetoid_pyg\n", + "from modules.transforms.liftings.graph2hypergraph.mapper_lifting import MapperLifting\n", + "import networkx as nx" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "81c52683-7d5d-47ef-adfc-47199a85b855", + "metadata": {}, + "outputs": [], + "source": [ + "def enriched_manual_graph():\n", + " data = load_manual_graph()\n", + " undirected_edges = torch_geometric.utils.to_undirected(data.edge_index)\n", + " new_x = torch.t(\n", + " torch.tensor(\n", + " [\n", + " [1.0, 5.0, 10.0, 50.0, 100.0, 500.0, 1000.0, 5000.0],\n", + " [-0.5, -2.5, -5.0, -25.0, -50.0, -250.0, -500.0, -2500.0],\n", + " ]\n", + " )\n", + " )\n", + " data.edge_index = undirected_edges\n", + " data.x = new_x\n", + " new_pos = torch.t(\n", + " torch.tensor([[0, 2, 4, 6, 8, 10, 12, 14], [1, 3, 5, 7, 9, 11, 13, 15]])\n", + " ).float()\n", + " data.pos = new_pos\n", + " return data" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "92732b9e-bae0-47b3-8480-b0c3e011df86", + "metadata": {}, + "outputs": [], + "source": [ + "data = load_manual_graph()\n", + "data_graph = torch_geometric.utils.to_networkx(data, to_undirected=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "d7ca01b1-013e-4c8b-a98b-0cd014b2e820", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Data(x=[8, 1], edge_index=[2, 26], y=[8], num_nodes=8)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b = torch_geometric.transforms.ToUndirected()\n", + "b(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "450a3596-388b-43d0-96d7-ec906c2d4dbf", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzMAAAMzCAYAAACSq0y2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAADIkklEQVR4nOzdZ1jUZ8I18DOAoGAHscWOIAIiAmJBEUGwxRZjiUZji1GDvWLFggVQwd57YleUUVEEK4goiohIsWFXwApIm3k/PLu82d0Y2wz3lPO7rufDLvC/j64PM2fuJpHL5XIQERERERGpGR3RAYiIiIiIiL4GywwREREREakllhkiIiIiIlJLLDNERERERKSWWGaIiIiIiEgtscwQEREREZFaYpkhIiIiIiK1xDJDRERERERqiWWGiIiIiIjUEssMERERERGpJZYZIiIiIiJSSywzRERERESkllhmiIiIiIhILbHMEBERERGRWmKZISIiIiIitcQyQ0REREREaollhoiIiIiI1BLLDBERERERqSWWGSIiIiIiUkssM0REREREpJZYZoiIiIiISC2xzBARERERkVpimSEiIiIiIrXEMkNERERERGqJZYaIiIiIiNQSywwREREREakllhkiIiIiIlJLLDNERERERKSWWGaIiIiIiEgtscwQEREREZFaYpkhIiIiIiK1xDJDRERERERqiWWGiIiIiIjUEssMERERERGpJZYZIiIiIiJSSywzRERERESkllhmiIiIiIhILbHMEBERERGRWmKZISIiIiIitcQyQ0REREREaollhoiIiIiI1BLLDBERERERqSWWGSIiIiIiUkssM0REREREpJZYZoiIiIiISC2xzBARERERkVpimSEiIiIiIrXEMkNERERERGqJZYaIiIiIiNQSywwREREREakllhkiIiIiIlJLLDNERERERKSWWGaIiIiIiEgtscwQEREREZFaYpkhIiIiIiK1xDJDRERERERqiWWGiIiIiIjUEssMERERERGpJZYZIiIiIiJSSywzRERERESkllhmiIiIiIhILbHMEBERERGRWmKZISIiIiIitcQyQ0REREREaklPdACi4pSVW4D7GVnIK5BBX08HtY2NYGTA/zcgIiIiUkd8F0caL+X5O+yKTkNE0gukZWZD/pevSQDUrGgIVwtT9HOqifqVy4iKSURERERf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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "nx.draw(data_graph)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "eff450d9-8ac8-4f84-a82b-9785fa68ea73", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "enriched_data = enriched_manual_graph()\n", + "enriched_graph = torch_geometric.utils.to_networkx(enriched_data, to_undirected=True)\n", + "nx.draw(enriched_graph)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "f688f5e3-ba37-441e-82fd-4568572be690", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([0, 1, 1, 1, 0, 0, 0, 0])" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "enriched_data.y" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "123e8635-81f7-4877-b2a9-abe6b799b5c4", + "metadata": {}, + "outputs": [], + "source": [ + "ml = MapperLifting(\"svd\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "b0dc8dae-d433-4bca-be2a-73a9fb4b8349", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([8, 1])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ml._filter(data).shape" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "285669c6-f036-46a7-b26b-e62b8c3d0d0e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hyperedges tensor([[1., 0., 0., 0.],\n", + " [1., 0., 0., 0.],\n", + " [1., 0., 0., 0.],\n", + " [1., 0., 0., 0.],\n", + " [1., 0., 0., 0.],\n", + " [1., 1., 0., 0.],\n", + " [0., 1., 1., 0.],\n", + " [0., 0., 0., 1.]])\n" + ] + }, + { + "data": { + "text/plain": [ + "{'incidence_hyperedges': tensor(indices=tensor([[ 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2,\n", + " 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5,\n", + " 6, 6, 6, 6, 7, 7, 7, 7],\n", + " [ 0, 1, 2, 3, 13, 0, 4, 5, 13, 1, 4, 6, 7, 8,\n", + " 9, 13, 6, 10, 13, 2, 5, 9, 13, 7, 11, 12, 13, 14,\n", + " 10, 11, 14, 15, 3, 8, 12, 16]]),\n", + " values=tensor([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n", + " 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n", + " 1., 1., 1., 1., 1., 1., 1., 1.]),\n", + " size=(8, 17), nnz=36, layout=torch.sparse_coo),\n", + " 'num_hyperedges': 17,\n", + " 'x_0': tensor([[1.0000e+00],\n", + " [5.0000e+00],\n", + " [1.0000e+01],\n", + " [5.0000e+01],\n", + " [1.0000e+02],\n", + " [5.0000e+02],\n", + " [1.0000e+03],\n", + " [5.0000e+03]])}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ml.lift_topology(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "cdf89d20-462c-41b9-b7a1-1321695d2863", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ True, False, False, False],\n", + " [ True, False, False, False],\n", + " [ True, False, False, False],\n", + " [ True, False, False, False],\n", + " [ True, False, False, False],\n", + " [ True, True, False, False],\n", + " [False, True, True, False],\n", + " [False, False, False, True]])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ml.cover" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "30ef75b5-ce40-47ba-b3b9-5edab5cd916a", + "metadata": {}, + "outputs": [], + "source": [ + "import networkx as nx\n", + "import torch\n", + "import torch_geometric\n", + "from torch_geometric.transforms import (\n", + " AddLaplacianEigenvectorPE,\n", + " SVDFeatureReduction,\n", + " ToUndirected,\n", + " Compose,\n", + ")\n", + "from torch_geometric.utils import subgraph\n", + "\n", + "from modules.transforms.liftings.graph2hypergraph.base import Graph2HypergraphLifting" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "bb1ea2ae-7f2c-45bf-9c99-38b1222b33c4", + "metadata": {}, + "outputs": [], + "source": [ + "filter_dict = {\n", + " \"laplacian\": Compose(\n", + " [ToUndirected(), AddLaplacianEigenvectorPE(k=1, is_undirected=True)]\n", + " ),\n", + " \"svd\": SVDFeatureReduction(out_channels=1),\n", + " \"feature_sum\": lambda data: torch.sum(data.x, dim=1).unsqueeze(1),\n", + " \"position_sum\": lambda data: torch.sum(data.pos, dim=1).unsqueeze(1),\n", + " \"feature_pca\": lambda data: torch.matmul(\n", + " data.x, torch.pca_lowrank(data.x, q=1)[2][:, :1]\n", + " ),\n", + " \"position_pca\": lambda data: torch.matmul(\n", + " data.pos, torch.pca_lowrank(data.pos, q=1)[2][:, :1]\n", + " ),\n", + "}\n", + "expected_filtered_data = {}\n", + "for name, transform in filter_dict.items():\n", + " filtered_data = transform(enriched_data)\n", + " # print(name)\n", + " if name == \"laplacian\":\n", + " # print(filtered_data['laplacian_eigenvector_pe'])\n", + " expected_filtered_data[name] = filtered_data[\"laplacian_eigenvector_pe\"]\n", + " elif name == \"svd\":\n", + " # print(filtered_data.x)\n", + " expected_filtered_data[name] = filtered_data.x\n", + " else:\n", + " # print(filtered_data)\n", + " # print('---------------')\n", + " expected_filtered_data[name] = filtered_data" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "83a288dd-28b5-4609-8ed8-a7c9504b4878", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "laplacian 1 tensor([0.3611]) torch.float32\n", + "tensor([-0.5646, -0.4760, -0.3873, -0.2986, -0.2100, -0.1213, -0.0326, 0.0561,\n", + " 0.1447, 0.2334])\n", + "tensor([-0.4380, -0.3493, -0.2606, -0.1720, -0.0833, 0.0054, 0.0941, 0.1827,\n", + " 0.2714, 0.3601])\n", + "tensor([False])\n", + "tensor([-0.0010])\n", + "laplacian 4 tensor([0.3611]) torch.float32\n", + "tensor([-0.5646, -0.4760, -0.3873, -0.2986, -0.2100, -0.1213, -0.0326, 0.0561,\n", + " 0.1447, 0.2334])\n", + "tensor([-0.4380, -0.3493, -0.2606, -0.1720, -0.0833, 0.0054, 0.0941, 0.1827,\n", + " 0.2714, 0.3601])\n", + "tensor([False])\n", + "tensor([-0.0010])\n", + "--------------------------\n", + "svd 0 tensor([-1.1183]) torch.float32\n", + "tensor([-5590.1719, -5054.2354, -4518.2988, -3982.3621, -3446.4255, -2910.4890,\n", + " -2374.5525, -1838.6158, -1302.6792, -766.7427])\n", + "tensor([-4.8245e+03, -4.2886e+03, -3.7527e+03, -3.2167e+03, -2.6808e+03,\n", + " -2.1449e+03, -1.6089e+03, -1.0730e+03, -5.3706e+02, -1.1190e+00])\n", + "tensor([False])\n", + "tensor([-0.0007])\n", + "tensor([[False, False, False, False],\n", + " [False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, True, True],\n", + " [False, True, True, False],\n", + " [ True, False, False, False]])\n", + "--------------------------\n", + "feature_sum NO PROBLEMS\n", + "--------------------------\n", + "position_sum 7 tensor([29.]) torch.float32\n", + "tensor([ 0.9990, 3.6839, 6.3689, 9.0538, 11.7387, 14.4237, 17.1086, 19.7935,\n", + " 22.4785, 25.1634])\n", + "tensor([ 4.8346, 7.5195, 10.2045, 12.8894, 15.5743, 18.2593, 20.9442, 23.6291,\n", + " 26.3141, 28.9990])\n", + "tensor([False])\n", + "tensor([-0.0010])\n", + "--------------------------\n", + "feature_pca 0 tensor([-1.1180]) torch.float32\n", + "tensor([-5590.1704, -5054.2339, -4518.2979, -3982.3613, -3446.4248, -2910.4883,\n", + " -2374.5518, -1838.6155, -1302.6791, -766.7427])\n", + "tensor([-4.8245e+03, -4.2886e+03, -3.7527e+03, -3.2167e+03, -2.6808e+03,\n", + " -2.1449e+03, -1.6089e+03, -1.0730e+03, -5.3706e+02, -1.1193e+00])\n", + "tensor([False])\n", + "tensor([-0.0012])\n", + "tensor([[False, False, False, False],\n", + " [False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, True, True],\n", + " [False, True, True, False],\n", + " [ True, False, False, False]])\n", + "--------------------------\n", + "position_pca 0 tensor([-0.7071]) torch.float32\n", + "tensor([-20.5071, -18.6086, -16.7100, -14.8115, -12.9130, -11.0144, -9.1159,\n", + " -7.2174, -5.3188, -3.4203])\n", + "tensor([-17.7949, -15.8964, -13.9978, -12.0993, -10.2008, -8.3022, -6.4037,\n", + " -4.5052, -2.6066, -0.7081])\n", + "tensor([False])\n", + "tensor([-0.0010])\n", + "--------------------------\n" + ] + } + ], + "source": [ + "for name, filtered_data in expected_filtered_data.items():\n", + " data_min = torch.min(filtered_data) - 1e-3\n", + " data_max = torch.max(filtered_data) + 1e-3\n", + " data_range = torch.max(filtered_data) - torch.min(filtered_data)\n", + " # width of each interval in the cover\n", + " cover_width = data_range / (10 - (10 - 1) * 0.3)\n", + " last = data_min + 9 * (1 - 0.3) * cover_width\n", + " lower_endpoints = torch.linspace(data_min, last, 10)\n", + " # lower_endpoints = torch.linspace(\n", + " # data_min, data_max - cover_width, 10\n", + " # )\n", + " upper_endpoints = lower_endpoints + cover_width\n", + " # want a n x resolution Boolean tensor\n", + " lower_values = torch.gt(filtered_data, lower_endpoints)\n", + " upper_values = torch.lt(filtered_data, upper_endpoints)\n", + " lower_is_close_values = torch.isclose(filtered_data, lower_endpoints)\n", + " upper_is_close_values = torch.isclose(filtered_data, upper_endpoints)\n", + " mask = torch.logical_and(\n", + " torch.logical_or(lower_values, lower_is_close_values),\n", + " torch.logical_or(upper_values, upper_is_close_values),\n", + " )\n", + " # remove empty intervals from cover\n", + " non_empty_covers = torch.any(mask, 0)\n", + " if not torch.all(torch.any(mask, 1)):\n", + " for i, b in enumerate(torch.any(mask, 1)):\n", + " if not b:\n", + " print(name, i, filtered_data[i], filtered_data[i].dtype)\n", + " print(lower_endpoints)\n", + " print(upper_endpoints)\n", + " # print(upper_endpoints[-1])\n", + " print(\n", + " torch.isclose(torch.Tensor(upper_endpoints[-1]), filtered_data[i])\n", + " )\n", + " print(upper_endpoints[-1] - filtered_data[i])\n", + " if torch.all(torch.any(mask, 1)):\n", + " print(name, \"NO PROBLEMS\")\n", + " non_empty_covers = torch.any(mask, 0)\n", + " if name in [\"svd\", \"feature_pca\"]:\n", + " print(mask[:, non_empty_covers])\n", + " print(\"--------------------------\")\n", + "\n", + " assert mask.shape == torch.Size([8, 10]), f\"{mask.shape}\"\n", + " # assert torch.all(torch.any(mask, 1)), f\"{name},{torch.any(mask,1)}\"\n", + " # return mask[:, non_empty_covers]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "4cf97e5e-94c9-4f63-80b4-23562a28ba19", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor(-5590.1709) tensor(-1.1183) tensor(5589.0527)\n", + "tensor(765.6237)\n", + "svd\n", + "tensor([[False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, True, True],\n", + " [False, True, True, False],\n", + " [ True, False, False, False]])\n", + "tensor([[-5.5902e+03, -4.8245e+03],\n", + " [-5.0542e+03, -4.2886e+03],\n", + " [-4.5183e+03, -3.7527e+03],\n", + " [-3.9824e+03, -3.2167e+03],\n", + " [-3.4464e+03, -2.6808e+03],\n", + " [-2.9105e+03, -2.1449e+03],\n", + " [-2.3746e+03, -1.6089e+03],\n", + " [-1.8386e+03, -1.0730e+03],\n", + " [-1.3027e+03, -5.3706e+02],\n", + " [-7.6674e+02, -1.1180e+00]])\n", + "---------------\n" + ] + } + ], + "source": [ + "for filter, filtered_data in expected_filtered_data.items():\n", + " if filter in [\"svd\"]:\n", + " cover_mask = torch.full((filtered_data.shape[0], 10), False, dtype=torch.bool)\n", + " data_min = torch.min(filtered_data)\n", + " data_max = torch.max(filtered_data)\n", + " data_range = torch.max(filtered_data) - torch.min(filtered_data)\n", + " print(data_min, data_max, data_range)\n", + " # width of each interval in the cover\n", + " cover_width = data_range / (10 - (10 - 1) * 0.3)\n", + " print(cover_width)\n", + " last = data_min + (10 - 1) * (1 - 0.3) * cover_width\n", + " lows = torch.zeros(10)\n", + " for i in range(10):\n", + " lows[i] = (data_min) + (i) * (1 - 0.3) * cover_width\n", + " highs = lows + cover_width\n", + " # construct boolean cover\n", + " for j, pt in enumerate(filtered_data):\n", + " for i in range(10):\n", + " # if j==0:\n", + " # print(i)\n", + " # print(pt > lows[i])\n", + " # print(torch.isclose(pt, lows[i]))\n", + " # print(\"AND\")\n", + " # print(pt < highs[i])\n", + " # print(torch.isclose(pt, highs[i]))\n", + " if (pt > lows[i] or torch.isclose(pt, lows[i])) and (\n", + " pt < highs[i] or torch.isclose(pt, highs[i])\n", + " ):\n", + " cover_mask[j, i] = True\n", + " # delete empty covers\n", + " keep = torch.full([10], True, dtype=torch.bool)\n", + " count_falses = 0\n", + " for i in range(10):\n", + " for j in range(filtered_data.shape[0]):\n", + " if not cover_mask[j, i]:\n", + " count_falses += 1\n", + " if count_falses == filtered_data.shape[0]:\n", + " keep[i] = False\n", + " count_falses = 0\n", + " print(filter)\n", + " print(torch.t(torch.t(cover_mask)[keep]))\n", + " print(torch.hstack((lows.reshape([10, 1]), highs.reshape([10, 1]))))\n", + " print(\"---------------\")" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "ceefc7eb-b223-4ea3-b58a-be6533609040", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor(-5590.1709) tensor(-1.1183) tensor(5589.0527)\n", + "tensor(765.6237)\n", + "svd\n", + "tensor([[False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, True, True],\n", + " [False, True, True, False],\n", + " [ True, False, False, False]])\n", + "tensor([[-5.5902e+03, -4.8245e+03],\n", + " [-5.0542e+03, -4.2886e+03],\n", + " [-4.5183e+03, -3.7527e+03],\n", + " [-3.9824e+03, -3.2167e+03],\n", + " [-3.4464e+03, -2.6808e+03],\n", + " [-2.9105e+03, -2.1449e+03],\n", + " [-2.3746e+03, -1.6089e+03],\n", + " [-1.8386e+03, -1.0730e+03],\n", + " [-1.3027e+03, -5.3706e+02],\n", + " [-7.6674e+02, -1.1180e+00]])\n", + "---------------\n" + ] + } + ], + "source": [ + "for filter, filtered_data in expected_filtered_data.items():\n", + " if filter in [\"svd\"]:\n", + " cover_mask = torch.full((filtered_data.shape[0], 10), False, dtype=torch.bool)\n", + " data_min = torch.min(filtered_data)\n", + " data_max = torch.max(filtered_data)\n", + " data_range = torch.max(filtered_data) - torch.min(filtered_data)\n", + " print(data_min, data_max, data_range)\n", + " # width of each interval in the cover\n", + " cover_width = data_range / (10 - (10 - 1) * 0.3)\n", + " print(cover_width)\n", + " last = data_min + (10 - 1) * (1 - 0.3) * cover_width\n", + " lows = torch.zeros(10)\n", + " for i in range(10):\n", + " lows[i] = (data_min) + (i) * (1 - 0.3) * cover_width\n", + " highs = lows + cover_width\n", + " # construct boolean cover\n", + " for j, pt in enumerate(filtered_data):\n", + " for i in range(10):\n", + " # if j==0:\n", + " # print(i)\n", + " # print(pt > lows[i])\n", + " # print(torch.isclose(pt, lows[i]))\n", + " # print(\"AND\")\n", + " # print(pt < highs[i])\n", + " # print(torch.isclose(pt, highs[i]))\n", + " if (pt > lows[i] or torch.isclose(pt, lows[i])) and (\n", + " pt < highs[i] or torch.isclose(pt, highs[i])\n", + " ):\n", + " cover_mask[j, i] = True\n", + " # delete empty covers\n", + " keep = torch.full([10], True, dtype=torch.bool)\n", + " count_falses = 0\n", + " for i in range(10):\n", + " for j in range(filtered_data.shape[0]):\n", + " if not cover_mask[j, i]:\n", + " count_falses += 1\n", + " if count_falses == filtered_data.shape[0]:\n", + " keep[i] = False\n", + " count_falses = 0\n", + " print(filter)\n", + " print(torch.t(torch.t(cover_mask)[keep]))\n", + " print(torch.hstack((lows.reshape([10, 1]), highs.reshape([10, 1]))))\n", + " print(\"---------------\")\n", + "\n", + "resolution = 10\n", + "gain = 0.3\n", + "filtered_data = expected_filtered_data[\"svd\"]\n", + "\n", + "\n", + "def get_cover(filtered_data, resolution, gain):\n", + " data_min = torch.min(filtered_data)\n", + " data_max = torch.max(filtered_data)\n", + " data_range = torch.max(filtered_data) - torch.min(filtered_data)\n", + " print(data_min, data_max, data_range)\n", + " # width of each interval in the cover\n", + " cover_width = data_range / (resolution - (resolution - 1) * gain)\n", + " last_lower_endpoint = data_min + cover_width * (resolution - 1) * (1 - gain)\n", + " lower_endpoints = torch.linspace(data_min, last_lower_endpoint, resolution)\n", + " upper_endpoints = lower_endpoints + cover_width\n", + " cover_intervals = torch.hstack(\n", + " (\n", + " lower_endpoints.reshape([resolution, 1]),\n", + " upper_endpoints.reshape([resolution, 1]),\n", + " )\n", + " )\n", + " # want a n x resolution Boolean tensor\n", + " lower_values = torch.gt(filtered_data, lower_endpoints)\n", + " upper_values = torch.lt(filtered_data, upper_endpoints)\n", + " # need to check close values to deal with some endpoint issues\n", + " lower_is_close_values = torch.isclose(filtered_data, lower_endpoints, atol=1e-3)\n", + " upper_is_close_values = torch.isclose(filtered_data, upper_endpoints, atol=1e-3)\n", + " # construct the boolean mask\n", + " mask = torch.logical_and(\n", + " torch.logical_or(lower_values, lower_is_close_values),\n", + " torch.logical_or(upper_values, upper_is_close_values),\n", + " )\n", + " # remove empty intervals from cover\n", + " non_empty_covers = torch.any(mask, 0)\n", + " print(\"point\", filtered_data[0], \"coverwidth\", cover_width)\n", + " print(cover_intervals)\n", + " print(lower_values[0, 9], lower_is_close_values[0, 9])\n", + " print(\"AND\")\n", + " print(upper_values[0, 9], upper_is_close_values[0, 9])\n", + " return mask[:, non_empty_covers]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "a71e8141-2a48-4cf1-b711-8a887db124fd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor(-5590.1709) tensor(-1.1183) tensor(5589.0527)\n", + "point tensor([-1.1183]) coverwidth tensor(765.6237)\n", + "tensor([[-5.5902e+03, -4.8245e+03],\n", + " [-5.0542e+03, -4.2886e+03],\n", + " [-4.5183e+03, -3.7527e+03],\n", + " [-3.9824e+03, -3.2167e+03],\n", + " [-3.4464e+03, -2.6808e+03],\n", + " [-2.9105e+03, -2.1449e+03],\n", + " [-2.3746e+03, -1.6089e+03],\n", + " [-1.8386e+03, -1.0730e+03],\n", + " [-1.3027e+03, -5.3706e+02],\n", + " [-7.6674e+02, -1.1185e+00]])\n", + "tensor(True) tensor(False)\n", + "AND\n", + "tensor(False) tensor(True)\n" + ] + }, + { + "data": { + "text/plain": [ + "tensor([[False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, False, True],\n", + " [False, False, True, True],\n", + " [False, True, True, False],\n", + " [ True, False, False, False]])" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "get_cover(filtered_data, resolution, gain)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "652e8ffb-10a8-4ddb-8c74-84635e4e969d", + "metadata": {}, + "outputs": [], + "source": [ + "x = torch.tensor([1, 2])\n", + "z = torch.tensor([1, 4])\n", + "y = torch.hstack((x.reshape([2, 1]), z.reshape([2, 1])))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "cc4f7106-7e56-44b6-8f93-d9bd68e725b1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t = torch.full([2], True, dtype=torch.bool)\n", + "t[0] = False\n", + "torch.equal(x, z)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "347060df-dc21-4af8-bb03-c3c6077c4aaf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([2, 1])" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "torch.sum(y, dim=1).unsqueeze(1).shape" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "ae288fdf-399e-481f-ac88-73cc95c7994d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(torch.Size([8, 2]), torch.Size([8, 2]))" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "enriched_data.x.shape, enriched_data.pos.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "c1aa3a71-3dc2-4eeb-8713-9ed601268349", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hyperedges tensor([[1., 0., 0., 0., 0., 0., 0., 0.],\n", + " [0., 1., 0., 0., 0., 0., 0., 0.],\n", + " [0., 0., 1., 0., 0., 0., 0., 0.],\n", + " [0., 0., 0., 1., 0., 0., 0., 0.],\n", + " [0., 0., 0., 0., 1., 0., 0., 0.],\n", + " [0., 0., 0., 0., 0., 1., 0., 0.],\n", + " [0., 0., 0., 0., 0., 0., 1., 0.],\n", + " [0., 0., 0., 0., 0., 0., 0., 1.]])\n", + "Data(x=[8, 2], edge_index=[2, 26], y=[8], pos=[8, 2], num_nodes=8, incidence_hyperedges=[8, 34], num_hyperedges=34, x_0=[8, 2], x_hyperedges=[34, 2])\n", + "-----------------------------\n", + "hyperedges tensor([[1., 0., 0., 0., 0., 0., 0., 0.],\n", + " [0., 1., 0., 0., 0., 0., 0., 0.],\n", + " [0., 0., 1., 0., 0., 0., 0., 0.],\n", + " [0., 0., 0., 1., 0., 0., 0., 0.],\n", + " [0., 0., 0., 0., 1., 0., 0., 0.],\n", + " [0., 0., 0., 0., 0., 1., 0., 0.],\n", + " [0., 0., 0., 0., 0., 0., 1., 0.],\n", + " [0., 0., 0., 0., 0., 0., 0., 1.]])\n", + "Data(x=[8, 2], edge_index=[2, 26], y=[8], pos=[8, 2], num_nodes=8, incidence_hyperedges=[8, 34], num_hyperedges=34, x_0=[8, 2], x_hyperedges=[34, 2])\n", + "-----------------------------\n", + "hyperedges tensor([[1., 0., 0., 0., 0., 0., 0., 0.],\n", + " [0., 1., 0., 0., 0., 0., 0., 0.],\n", + " [0., 0., 1., 0., 0., 0., 0., 0.],\n", + " [0., 0., 0., 1., 0., 0., 0., 0.],\n", + " [0., 0., 0., 0., 1., 0., 0., 0.],\n", + " [0., 0., 0., 0., 0., 1., 0., 0.],\n", + " [0., 0., 0., 0., 0., 0., 1., 0.],\n", + " [0., 0., 0., 0., 0., 0., 0., 1.]])\n", + "Data(x=[8, 2], edge_index=[2, 26], y=[8], pos=[8, 2], num_nodes=8, incidence_hyperedges=[8, 34], num_hyperedges=34, x_0=[8, 2], x_hyperedges=[34, 2])\n", + "-----------------------------\n", + "hyperedges tensor([[1., 0., 0., 0., 0., 0., 0., 0.],\n", + " [0., 1., 0., 0., 0., 0., 0., 0.],\n", + " [0., 0., 1., 0., 0., 0., 0., 0.],\n", + " [0., 0., 0., 1., 0., 0., 0., 0.],\n", + " [0., 0., 0., 0., 1., 0., 0., 0.],\n", + " [0., 0., 0., 0., 0., 1., 0., 0.],\n", + " [0., 0., 0., 0., 0., 0., 1., 0.],\n", + " [0., 0., 0., 0., 0., 0., 0., 1.]])\n", + "Data(x=[8, 2], edge_index=[2, 26], y=[8], pos=[8, 2], num_nodes=8, incidence_hyperedges=[8, 34], num_hyperedges=34, x_0=[8, 2], x_hyperedges=[34, 2])\n", + "-----------------------------\n", + "hyperedges tensor([[1., 0., 0., 0., 0., 0., 0., 0.],\n", + " [0., 1., 0., 0., 0., 0., 0., 0.],\n", + " [0., 0., 1., 0., 0., 0., 0., 0.],\n", + " [0., 0., 0., 1., 0., 0., 0., 0.],\n", + " [0., 0., 0., 0., 1., 0., 0., 0.],\n", + " [0., 0., 0., 0., 0., 1., 0., 0.],\n", + " [0., 0., 0., 0., 0., 0., 1., 0.],\n", + " [0., 0., 0., 0., 0., 0., 0., 1.]])\n", + "Data(x=[8, 2], edge_index=[2, 26], y=[8], pos=[8, 2], num_nodes=8, incidence_hyperedges=[8, 34], num_hyperedges=34, x_0=[8, 2], x_hyperedges=[34, 2])\n", + "-----------------------------\n" + ] + } + ], + "source": [ + "filter_dict = {\n", + " \"laplacian\": Compose(\n", + " [ToUndirected(), AddLaplacianEigenvectorPE(k=1, is_undirected=True)]\n", + " ),\n", + " \"svd\": SVDFeatureReduction(out_channels=1),\n", + " \"feature_sum\": lambda data: torch.sum(data.x, dim=1).unsqueeze(1),\n", + " \"position_sum\": lambda data: torch.sum(data.pos, dim=1).unsqueeze(1),\n", + " \"feature_pca\": lambda data: torch.matmul(\n", + " data.x, torch.pca_lowrank(data.x, q=1)[2][:, :1]\n", + " ),\n", + " \"position_pca\": lambda data: torch.matmul(\n", + " data.pos, torch.pca_lowrank(data.pos, q=1)[2][:, :1]\n", + " ),\n", + "}\n", + "for _ in range(5):\n", + " name = \"position_sum\"\n", + " ml = MapperLifting(filter_attr=name)\n", + " print(ml(enriched_data))\n", + " print(\"-----------------------------\")" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "39a95bc4-e893-4614-8f30-5c56fea66d54", + "metadata": {}, + "outputs": [], + "source": [ + "a = [value[1] for value in ml.clusters.values()]" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "e973e048-c3c4-4e29-84fb-d75cdd327ce3", + "metadata": {}, + "outputs": [], + "source": [ + "b = [value.tolist() for value in a]\n", + "c = [[2.0, 7.0]]\n", + "for k in c:\n", + " if k in b:\n", + " print(\"yes\")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "77597cf4-53a5-43cf-b450-a0c64658f8d0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[7.0], [6.0], [5.0, 6.0], [0.0, 1.0, 2.0, 3.0, 4.0, 5.0]]" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f5b5860b-838b-42cb-937e-d841d28d33fa", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ICML", + "language": "python", + "name": "icml" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index c33d1936..c21a4cda 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -54,10 +54,11 @@ def fit_transform(self, filtered_data): are removed so output tensor has at most size (n_sample, resolution). """ - - data_min = torch.min(filtered_data) - data_max = torch.max(filtered_data) - data_range = torch.max(filtered_data) - torch.min(filtered_data) + # We add a slight buffer to the minimum and maximum + # values to ensure that each data point is covered. + data_min = torch.min(filtered_data) - 1e-3 + data_max = torch.max(filtered_data) + 1e-3 + data_range = data_max - data_min # width of each interval in the cover cover_width = data_range / (self.resolution - (self.resolution - 1) * self.gain) last_lower_endpoint = data_min + cover_width * (self.resolution - 1) * ( @@ -72,8 +73,8 @@ def fit_transform(self, filtered_data): ) ) # want a n x resolution Boolean tensor - lower_values = torch.ge(filtered_data, lower_endpoints) - upper_values = torch.le(filtered_data, upper_endpoints) + lower_values = torch.gt(filtered_data, lower_endpoints) + upper_values = torch.lt(filtered_data, upper_endpoints) # need to check close values to deal with some endpoint issues lower_is_close_values = torch.isclose(filtered_data, lower_endpoints) upper_is_close_values = torch.isclose(filtered_data, upper_endpoints) @@ -82,6 +83,8 @@ def fit_transform(self, filtered_data): torch.logical_or(lower_values, lower_is_close_values), torch.logical_or(upper_values, upper_is_close_values), ) + # assert every data point is covered + assert torch.all(torch.any(mask, 1)), f"{torch.any(mask,1)}" # remove empty intervals from cover non_empty_covers = torch.any(mask, 0) return mask[:, non_empty_covers] @@ -243,7 +246,6 @@ def _cluster(self, data, cover_mask): # Find indices of nodes which are in each cover set # cover_data = data.subgraph(cover_set.T) does not work # as it relabels node indices - cover_data, _ = torch_geometric.utils.subgraph( cover_set, data["edge_index"] ) @@ -266,7 +268,7 @@ def _cluster(self, data, cover_mask): # contained in cluster index = torch.Tensor(list(cluster)) # kth cluster is item in dictionary - # of the form + # of the form: # k : (cover_set_index, nodes_in_cluster) mapper_clusters[num_clusters] = (i, index) num_clusters += 1 @@ -311,14 +313,13 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: # Define and fit the cover cover = MapperCover(self.resolution, self.gain) cover_mask = cover.fit_transform(filtered_data) - + self.cover = cover_mask # Find the clusters in the fitted cover mapper_clusters = self._cluster(data, cover_mask) # Construct the hypergraph dictionary - num_nodes = data["x"].shape[0] + num_nodes = data["x"].shape[0] num_edges = data["edge_index"].size()[1] - num_clusters = len(mapper_clusters) num_hyperedges = num_edges + num_clusters @@ -340,8 +341,7 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: incidence = torch.hstack([incidence_edges, incidence_hyperedges]) incidence = torch.Tensor(incidence).to_sparse_coo() - - print(incidence) + print("hyperedges", incidence_hyperedges) return { "incidence_hyperedges": incidence, diff --git a/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py b/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py index 4faab33a..49cf8e96 100644 --- a/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py +++ b/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py @@ -1,6 +1,12 @@ import pytest import torch import torch_geometric +from torch_geometric.transforms import ( + AddLaplacianEigenvectorPE, + Compose, + SVDFeatureReduction, + ToUndirected, +) from modules.data.utils.utils import load_manual_graph from modules.transforms.liftings.graph2hypergraph.mapper_lifting import ( @@ -258,27 +264,35 @@ def enriched_manual_graph(): return data +"""Construct a naive implementation to create the filtered data set given data and filter function.""" + + def naive_filter(data, filter): - filter_dict = { - "laplacian": Compose( - [ToUndirected(), AddLaplacianEigenvectorPE(k=1, is_undirected=True)] - ), - "svd": SVDFeatureReduction(out_channels=1), - "feature_sum": lambda data: torch.sum(data.x, dim=1).unsqueeze(1), - "position_sum": lambda data: torch.sum(data.pos, dim=1).unsqueeze(1), - "feature_pca": lambda data: torch.matmul( - data.x, torch.pca_lowrank(data.x, q=1)[2][:, :1] - ), - "position_pca": lambda data: torch.matmul( - data.pos, torch.pca_lowrank(data.pos, q=1)[2][:, :1] - ), - } - transform = filter_dict[filter] - filtered_data = transform(data) + n_samples = data.x.shape[0] if filter == "laplacian": + transform1 = ToUndirected() + transform2 = AddLaplacianEigenvectorPE(k=1, is_undirected=True) + filtered_data = transform2(transform1(data)) filtered_data = filtered_data["laplacian_eigenvector_pe"] - elif name == "svd": - filtered_data = filtered_data.x + elif filter == "svd": + svd = SVDFeatureReduction(out_channels=1) + filtered_data = svd(data).x + elif filter == "feature_sum": + filtered_data = torch.zeros([n_samples, 1]) + for i in range(n_samples): + for j in range(data.x.shape[1]): + filtered_data[i] += data.x[i, j] + elif filter == "position_sum": + filtered_data = torch.zeros([n_samples, 1]) + for i in range(n_samples): + for j in range(data.pos.shape[1]): + filtered_data[i] += data.pos[i, j] + elif filter == "feature_pca": + U, S, V = torch.pca_lowrank(data.x, q=1) + filtered_data = torch.matmul(data.x, V[:, :1]) + elif filter == "position_pca": + U, S, V = torch.pca_lowrank(data.pos, q=1) + filtered_data = torch.matmul(data.pos, V[:, :1]) return filtered_data @@ -287,9 +301,9 @@ def naive_filter(data, filter): def naive_cover(filtered_data): cover_mask = torch.full((filtered_data.shape[0], 10), False, dtype=torch.bool) - data_min = torch.min(filtered_data) - data_max = torch.max(filtered_data) - data_range = torch.max(filtered_data) - torch.min(filtered_data) + data_min = torch.min(filtered_data) - 1e-3 + data_max = torch.max(filtered_data) + 1e-3 + data_range = data_max - data_min # width of each interval in the cover cover_width = data_range / (10 - (10 - 1) * 0.3) last = data_min + (10 - 1) * (1 - 0.3) * cover_width @@ -297,9 +311,24 @@ def naive_cover(filtered_data): for i in range(10): lows[i] = (data_min) + (i) * (1 - 0.3) * cover_width highs = lows + cover_width + # construct boolean cover for j, pt in enumerate(filtered_data): - cover_mask[j] = (pt > lows) and (pt < highs) - return cover_mask + for i in range(10): + if (pt > lows[i] or torch.isclose(pt, lows[i])) and ( + pt < highs[i] or torch.isclose(pt, highs[i]) + ): + cover_mask[j, i] = True + # delete empty covers + keep = torch.full([10], True, dtype=torch.bool) + count_falses = 0 + for i in range(10): + for j in range(filtered_data.shape[0]): + if not cover_mask[j, i]: + count_falses += 1 + if count_falses == filtered_data.shape[0]: + keep[i] = False + count_falses = 0 + return torch.t(torch.t(cover_mask)[keep]) class TestMapperLifting: @@ -323,120 +352,290 @@ def setup(self, filter): ) def test_filter(self, filter): self.setup(filter) - expected_filter_values = { - "laplacian": torch.tensor( - [ - [0.3371], - [0.3611], - [0.0463], - [-0.4241], - [0.3611], - [-0.3546], - [-0.5636], - [-0.0158], - ] - ), - "svd": torch.tensor( - [ - [-1.1183e00], - [-5.5902e00], - [-1.1180e01], - [-5.5902e01], - [-1.1180e02], - [-5.5902e02], - [-1.1180e03], - [-5.5902e03], - ] - ), - "feature_pca": torch.tensor( + lift_filter_data = self.mapper_lift._filter(self.data) + naive_filter_data = naive_filter(self.data, filter) + if filter != "laplacian": + assert torch.all( + torch.isclose(lift_filter_data, naive_filter_data) + ), f"Something is wrong with filtered values using {self.filter_name}. The lifted filter data is {lift_filter_data} and the naive filter data is {naive_filter_data}." + if filter == "laplacian": + # laplacian produce eigenvector up to a unit multiple. + # instead we check their absolute values. + assert torch.all( + torch.isclose(torch.abs(lift_filter_data), torch.abs(naive_filter_data)) + ), f"Something is wrong with filtered values using {self.filter_name}. The lifted filter data is {lift_filter_data} and the naive filter data is {naive_filter_data}." + + @pytest.mark.parametrize( + "filter", + [ + "laplacian", + "svd", + "feature_pca", + "position_pca", + "feature_sum", + "position_sum", + ], + ) + def test_cover(self, filter): + self.setup(filter) + transformed_data = self.mapper_lift.forward(self.data.clone()) + lift_cover_mask = self.mapper_lift.cover + naive_cover_mask = naive_cover(self.mapper_lift.filtered_data[filter]) + assert torch.all( + naive_cover_mask == lift_cover_mask + ), f"Something is wrong with the cover mask using {self.filter_name}. Lifted cover mask is {lift_cover_mask} and naive cover mask {naive_cover_mask}." + + @pytest.mark.parametrize( + "filter", + [ + "laplacian", + "svd", + "feature_pca", + "position_pca", + "feature_sum", + "position_sum", + ], + ) + def test_cluster(self, filter): + expected_clusters = { + "laplacian": { + 0: (0, torch.tensor([6.0])), + 1: (1, torch.tensor([3.0])), + 2: (1, torch.tensor([5.0])), + 3: (2, torch.tensor([5.0])), + 4: (3, torch.tensor([7.0])), + 5: (4, torch.tensor([2.0, 7.0])), + 6: (5, torch.tensor([0.0, 1.0, 4.0])), + }, + "svd": { + 0: (0, torch.tensor([7.0])), + 1: (1, torch.tensor([6.0])), + 2: (2, torch.tensor([5.0, 6.0])), + 3: (3, torch.tensor([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])), + }, + "feature_pca": { + 0: (0, torch.tensor([7.0])), + 1: (1, torch.tensor([6.0])), + 2: (2, torch.tensor([5.0, 6.0])), + 3: (3, torch.tensor([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])), + }, + "position_pca": { + 0: (0, torch.tensor([7.0])), + 1: (1, torch.tensor([6.0])), + 2: (2, torch.tensor([5.0])), + 3: (3, torch.tensor([4.0])), + 4: (4, torch.tensor([3.0])), + 5: (5, torch.tensor([2.0])), + 6: (6, torch.tensor([1.0])), + 7: (7, torch.tensor([0.0])), + }, + "feature_sum": { + 0: (0, torch.tensor([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])), + 1: (1, torch.tensor([5.0, 6.0])), + 2: (2, torch.tensor([6.0])), + 3: (3, torch.tensor([7.0])), + }, + "position_sum": { + 0: (0, torch.tensor([0.0])), + 1: (1, torch.tensor([1.0])), + 2: (2, torch.tensor([2.0])), + 3: (3, torch.tensor([3.0])), + 4: (4, torch.tensor([4.0])), + 5: (5, torch.tensor([5.0])), + 6: (6, torch.tensor([6.0])), + 7: (7, torch.tensor([7.0])), + }, + } + self.setup(filter) + transformed_data = self.mapper_lift.forward(self.data.clone()) + lift_clusters = self.mapper_lift.clusters + if filter != "laplacian": + assert ( + expected_clusters[self.filter_name].keys() == lift_clusters.keys() + ), f"Different number of clusters using {filter}. Expected {list(expected_clusters[filter])} but got {list(lift_clusters)}." + for cluster in lift_clusters.keys(): + assert ( + expected_clusters[self.filter_name][cluster][0] + == lift_clusters[cluster][0] + ) + assert torch.equal( + expected_clusters[self.filter_name][cluster][1], + lift_clusters[cluster][1], + ), f"Something is wrong with the clustering using {self.filter_name}. Expected node subset {expected_clusters[self.filter_name][cluster][1]} but got {lift_clusters[cluster][1]} for cluster {cluster}." + # Laplacian function projects up to a unit. This causes clusters to not be identical + # instead we check if the node subsets of the lifted set are somewhere in the expected set. + if filter == "laplacian": + assert len(lift_clusters) == len( + expected_clusters["laplacian"] + ), f"Different number of clusters using {filter}. Expected {len(expected_clusters[filter])} clusters but got {len(lift_clusters)}." + lift_cluster_nodes = [value[1].tolist() for value in lift_clusters.values()] + expected_cluster_nodes = [ + value[1].tolist() for value in expected_clusters[filter].values() + ] + for node_subset in lift_cluster_nodes: + assert ( + node_subset in expected_cluster_nodes + ), f"{node_subset} is a cluster not in {expected_cluster_nodes} but in {lift_cluster_nodes}." + expected_cluster_nodes.remove(node_subset) + assert ( + expected_cluster_nodes == [] + ), f"Expected clusters contain more clusters than in the lifted cluster." + + @pytest.mark.parametrize( + "filter", + [ + "laplacian", + "svd", + "feature_pca", + "position_pca", + "feature_sum", + "position_sum", + ], + ) + def test_lift_topology(self, filter): + expected_lift = { + "laplacian1": { + "num_hyperedges": 33, + "hyperedge_incidence": torch.tensor( + [ + [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0], + [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0], + [0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0], + ] + ), + }, + "laplacian2": { + "num_hyperedges": 33, + "hyperedge_incidence": torch.tensor( + [ + [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0], + [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0], + [0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0], + [0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0], + [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0], + ] + ), + }, + "svd": { + "num_hyperedges": 30, + "hyperedge_incidence": torch.tensor( + [ + [0.0, 0.0, 0.0, 1.0], + [0.0, 0.0, 0.0, 1.0], + [0.0, 0.0, 0.0, 1.0], + [0.0, 0.0, 0.0, 1.0], + [0.0, 0.0, 0.0, 1.0], + [0.0, 0.0, 1.0, 1.0], + [0.0, 1.0, 1.0, 0.0], + [1.0, 0.0, 0.0, 0.0], + ] + ), + }, + "feature_pca": { + "num_hyperedges": 30, + "hyperedge_incidence": torch.tensor( + [ + [0.0, 0.0, 0.0, 1.0], + [0.0, 0.0, 0.0, 1.0], + [0.0, 0.0, 0.0, 1.0], + [0.0, 0.0, 0.0, 1.0], + [0.0, 0.0, 0.0, 1.0], + [0.0, 0.0, 1.0, 1.0], + [0.0, 1.0, 1.0, 0.0], + [1.0, 0.0, 0.0, 0.0], + ] + ), + }, + "position_pca": { + "num_hyperedges": 34, + "hyperedge_incidence": torch.tensor( + [ + [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0], + [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0], + [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + ] + ), + }, + "feature_sum": { + "num_hyperedges": 30, + "hyperedge_incidence": torch.tensor( + [ + [1.0, 0.0, 0.0, 0.0], + [1.0, 0.0, 0.0, 0.0], + [1.0, 0.0, 0.0, 0.0], + [1.0, 0.0, 0.0, 0.0], + [1.0, 0.0, 0.0, 0.0], + [1.0, 1.0, 0.0, 0.0], + [0.0, 1.0, 1.0, 0.0], + [0.0, 0.0, 0.0, 1.0], + ] + ), + }, + "position_sum": { + "num_hyperedges": 34, + "hyperedge_incidence": torch.tensor( + [ + [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0], + ] + ), + }, + } + self.setup(filter) + lifted_mapper = self.mapper_lift.forward(self.data.clone()) + if filter != "laplacian": + expected_n_hyperedges = expected_lift[self.filter_name]["num_hyperedges"] + expected_incidence_1 = torch.hstack( [ - [-1.1180e00], - [-5.5902e00], - [-1.1180e01], - [-5.5902e01], - [-1.1180e02], - [-5.5902e02], - [-1.1180e03], - [-5.5902e03], + expected_edge_incidence, + expected_lift[self.filter_name]["hyperedge_incidence"], ] - ), - "position_pca": torch.tensor( + ) + assert ( + expected_incidence_1 == lifted_mapper.incidence_hyperedges.to_dense() + ).all(), f"Something is wrong with the incidence hyperedges for the mapper lifting with {self.filter_name}." + if filter == "laplacian": + expected_n_hyperedges1 = expected_lift["laplacian1"]["num_hyperedges"] + expected_n_hyperedges2 = expected_lift["laplacian2"]["num_hyperedges"] + assert expected_n_hyperedges1 == expected_n_hyperedges2 + expected_n_hyperedges = expected_n_hyperedges1 + expected_incidence_11 = torch.hstack( [ - [-0.7071], - [-3.5355], - [-6.3640], - [-9.1924], - [-12.0208], - [-14.8492], - [-17.6777], - [-20.5061], + expected_edge_incidence, + expected_lift["laplacian1"]["hyperedge_incidence"], ] - ), - "feature_sum": torch.tensor( + ) + expected_incidence_12 = torch.hstack( [ - [5.0000e-01], - [2.5000e00], - [5.0000e00], - [2.5000e01], - [5.0000e01], - [2.5000e02], - [5.0000e02], - [2.5000e03], + expected_edge_incidence, + expected_lift["laplacian2"]["hyperedge_incidence"], ] - ), - "position_sum": torch.tensor( - [[1.0], [5.0], [9.0], [13.0], [17.0], [21.0], [25.0], [29.0]] - ), - } - lift_filter_data = self.mapper_lift._filter(self.data) - naive_filter_data = naive_filter(self.data, filter) - assert naive_filter_data == lift_filter_data - # assert torch.all(torch.isclose(expected_filter_values[self.filter_name],lift_filter_data)),\ - # f"Something is wrong with filtered values using {self.filter_name}.{lift_filter_data-expected_filter_values[self.filter_name]}." - - # def test_cover(self): - # # expected_cover_mask = { - # # "laplacian": , - # # "svd": , - # # "feature_pca": , - # # "position_pca": , - # # "feature_sum": , - # # "position_sum": , - # # } - # # expected_cover_mask = naive_cover( - # lift_cover_mask = self.mapper_lift.forward(self.data.clone()).cover - # assert expected_cover_mask[self.filter_name] == lift_cover_mask,\ - # f"Something is wrong with the cover mask using {self.filter_name}." - - # def test_cluster(self): - # # expected_clusters = { - # # "laplacian": , - # # "svd": , - # # "feature_pca": , - # # "position_pca": , - # # "feature_sum": , - # # "position_sum": , - # # } - # lift_clusters = self.mapper_lift.forward(self.data.clone()).clusters - # assert expected_clusters[self.filter_name] == lift_clusters,\ - # f"Something is wrong with the clustering using {self.filter_name}." - - # def test_lift_topology(self): - # # expected_hyperedge_incidence = { - # # "laplacian": , - # # "svd": , - # # "feature_pca": , - # # "position_pca": , - # # "feature_sum": , - # # "position_sum": , - # # } - # expected_incidence_1 = torch.cat( - # (expected_edge_incidence, expected_hyperedge_incidence[self.filter_name]), - # 1 - # )## MAYBE CHANGE DIMENSION!!!!!!!!!!!!!!!!!!!!!!!!! - # lifted_mapper = self.mapper_lift.forward(self.data.clone()) - # assert (expected_incidence_1 == lifted_mapper.incidence_hyperedges.to_dense()).all(),\ - # f"Something is wrong with the incidence hyperedges for the mapper lifting with {self.fitler_name}." + ) + assert ( + expected_incidence_11 == lifted_mapper.incidence_hyperedges.to_dense() + ).all() or ( + expected_incidence_12 == lifted_mapper.incidence_hyperedges.to_dense() + ).all(), f"Something is wrong with the incidence hyperedges for the mapper lifting with {self.filter_name}. lifted incidence is {lifted_mapper.incidence_hyperedges.to_dense()}" - # assert expected_n_hyperedges == lifted_mapper.num_hyperedges,\ - # f"Something is wrong with the number of hyperedges for the mapper lifting with {self.filter_name}." + assert ( + expected_n_hyperedges == lifted_mapper.num_hyperedges + ), f"Something is wrong with the number of hyperedges for the mapper lifting with {self.filter_name}." diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb index b738a519..543c04b8 100644 --- a/tutorials/graph2hypergraph/mapper_lifting.ipynb +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -243,9 +243,7 @@ "transform_id = \"graph2hypergraph/mapper_lifting\"\n", "\n", "# Read yaml file\n", - "transform_config = {\n", - " \"lifting\": load_transform_config(transform_type, transform_id)\n", - "} \n" + "transform_config = {\"lifting\": load_transform_config(transform_type, transform_id)}" ] }, { @@ -263,7 +261,7 @@ } ], "source": [ - "#apply preprocessor to obtain lifted dataset on some of the original graphs\n", + "# apply preprocessor to obtain lifted dataset on some of the original graphs\n", "\n", "lifted_dataset = PreProcessor(dataset[0:5], transform_config, loader.data_dir)" ] @@ -285,7 +283,7 @@ "metadata": {}, "outputs": [], "source": [ - "# imports for visualization \n", + "# imports for visualization\n", "\n", "import torch\n", "import networkx as nx\n", @@ -322,49 +320,60 @@ } ], "source": [ - "#obtain a representative graph from the lifted dataset\n", + "# obtain a representative graph from the lifted dataset\n", "data = lifted_dataset[0]\n", "\n", - "#set up plot\n", - "fig,ax = plt.subplots()\n", - "cmap=plt.cm.gist_rainbow\n", + "# set up plot\n", + "fig, ax = plt.subplots()\n", + "cmap = plt.cm.gist_rainbow\n", "\n", "# get a nice layout for the original graph\n", "G = to_networkx(data)\n", "pos = nx.kamada_kawai_layout(G)\n", "_ = nx.draw_networkx_edges(G, pos=pos, ax=ax)\n", "\n", - "#get the number of original edges \n", + "# get the number of original edges\n", "n_edges = data[\"edge_index\"][0].size()[0]\n", "\n", - "# obtain incidence hyperedges and which vertices belong to the new hyperedges \n", + "# obtain incidence hyperedges and which vertices belong to the new hyperedges\n", "incidence_hyperedges = data[\"incidence_hyperedges\"].to_dense()\n", - "members = torch.where(incidence_hyperedges[:,n_edges:]) \n", + "members = torch.where(incidence_hyperedges[:, n_edges:])\n", "\n", "# scale colormapping\n", "cmap_max = torch.max(members[1])\n", "\n", "# plot pie chart showing hyperedge containment of each node\n", - "for node in pos: \n", - " which_hyperedges = torch.where(members[0]==node)[0]\n", - " \n", - " p,t = ax.pie([1]*len(which_hyperedges), \n", - " center=pos[node], \n", - " colors=cmap(members[1][which_hyperedges]/cmap_max), \n", - " radius=0.05, \n", - " labels = [m.item() for m in members[1][which_hyperedges]+n_edges],\n", - " labeldistance = 0.3)\n", + "for node in pos:\n", + " which_hyperedges = torch.where(members[0] == node)[0]\n", + "\n", + " p, t = ax.pie(\n", + " [1] * len(which_hyperedges),\n", + " center=pos[node],\n", + " colors=cmap(members[1][which_hyperedges] / cmap_max),\n", + " radius=0.05,\n", + " labels=[m.item() for m in members[1][which_hyperedges] + n_edges],\n", + " labeldistance=0.3,\n", + " )\n", "\n", "# rescale for visualization purposes\n", "ax.set_xlim(min([pos[node][0] for node in pos]), max([pos[node][0] for node in pos]))\n", "ax.set_ylim(min([pos[node][1] for node in pos]), max([pos[node][1] for node in pos]))\n", "\n", "# plot legend\n", - "legend_dots = [Line2D([0], [0], marker='o', color='w',\n", - " markerfacecolor=cmap(member/cmap_max), markersize=15, \n", - " label=\"{}\".format(member+n_edges)) for member in members[1].unique()]\n", - "\n", - "ax.legend(handles=legend_dots, loc='best', title=\"Hyperedge Number\")\n", + "legend_dots = [\n", + " Line2D(\n", + " [0],\n", + " [0],\n", + " marker=\"o\",\n", + " color=\"w\",\n", + " markerfacecolor=cmap(member / cmap_max),\n", + " markersize=15,\n", + " label=\"{}\".format(member + n_edges),\n", + " )\n", + " for member in members[1].unique()\n", + "]\n", + "\n", + "ax.legend(handles=legend_dots, loc=\"best\", title=\"Hyperedge Number\")\n", "\n", "fig.suptitle(\"Hypergraph constructed from Mapper lifting using default parameters.\")" ] From 510b14f1bd053aced54eaae1b20550613384feed Mon Sep 17 00:00:00 2001 From: Halley Fritze <97766437+hfr1tz3@users.noreply.github.com> Date: Tue, 9 Jul 2024 20:13:00 -0700 Subject: [PATCH 19/26] remove extra jupyter notebook --- Untitled.ipynb | 925 ------------------------------------------------- 1 file changed, 925 deletions(-) delete mode 100644 Untitled.ipynb diff --git a/Untitled.ipynb b/Untitled.ipynb deleted file mode 100644 index cbc37c2b..00000000 --- a/Untitled.ipynb +++ /dev/null @@ -1,925 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "d468da01-052b-46fe-a2c7-babc48429da0", - "metadata": {}, - "outputs": [], - "source": [ - "import torch, torch_geometric\n", - "from modules.data.utils.utils import load_manual_graph, get_Planetoid_pyg\n", - "from modules.transforms.liftings.graph2hypergraph.mapper_lifting import MapperLifting\n", - "import networkx as nx" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "81c52683-7d5d-47ef-adfc-47199a85b855", - "metadata": {}, - "outputs": [], - "source": [ - "def enriched_manual_graph():\n", - " data = load_manual_graph()\n", - " undirected_edges = torch_geometric.utils.to_undirected(data.edge_index)\n", - " new_x = torch.t(\n", - " torch.tensor(\n", - " [\n", - " [1.0, 5.0, 10.0, 50.0, 100.0, 500.0, 1000.0, 5000.0],\n", - " [-0.5, -2.5, -5.0, -25.0, -50.0, -250.0, -500.0, -2500.0],\n", - " ]\n", - " )\n", - " )\n", - " data.edge_index = undirected_edges\n", - " data.x = new_x\n", - " new_pos = torch.t(\n", - " torch.tensor([[0, 2, 4, 6, 8, 10, 12, 14], [1, 3, 5, 7, 9, 11, 13, 15]])\n", - " ).float()\n", - " data.pos = new_pos\n", - " return data" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "92732b9e-bae0-47b3-8480-b0c3e011df86", - "metadata": {}, - "outputs": [], - "source": [ - "data = load_manual_graph()\n", - "data_graph = torch_geometric.utils.to_networkx(data, to_undirected=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "d7ca01b1-013e-4c8b-a98b-0cd014b2e820", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Data(x=[8, 1], edge_index=[2, 26], y=[8], num_nodes=8)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "b = torch_geometric.transforms.ToUndirected()\n", - "b(data)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "450a3596-388b-43d0-96d7-ec906c2d4dbf", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzMAAAMzCAYAAACSq0y2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAADIkklEQVR4nOzdZ1jUZ8I18DOAoGAHscWOIAIiAmJBEUGwxRZjiUZji1GDvWLFggVQwd57YleUUVEEK4goiohIsWFXwApIm3k/PLu82d0Y2wz3lPO7rufDLvC/j64PM2fuJpHL5XIQERERERGpGR3RAYiIiIiIiL4GywwREREREakllhkiIiIiIlJLLDNERERERKSWWGaIiIiIiEgtscwQEREREZFaYpkhIiIiIiK1xDJDRERERERqiWWGiIiIiIjUEssMERERERGpJZYZIiIiIiJSSywzRERERESkllhmiIiIiIhILbHMEBERERGRWmKZISIiIiIitcQyQ0REREREaollhoiIiIiI1BLLDBERERERqSWWGSIiIiIiUkssM0REREREpJZYZoiIiIiISC2xzBARERERkVpimSEiIiIiIrXEMkNERERERGqJZYaIiIiIiNQSywwREREREakllhkiIiIiIlJLLDNERERERKSWWGaIiIiIiEgtscwQEREREZFaYpkhIiIiIiK1xDJDRERERERqiWWGiIiIiIjUEssMERERERGpJZYZIiIiIiJSSywzRERERESkllhmiIiIiIhILbHMEBERERGRWmKZISIiIiIitcQyQ0REREREaollhoiIiIiI1BLLDBERERERqSWWGSIiIiIiUkssM0REREREpJZYZoiIiIiISC2xzBARERERkVpimSEiIiIiIrXEMkNERERERGqJZYaIiIiIiNQSywwREREREakllhkiIiIiIlJLLDNERERERKSWWGaIiIiIiEgtscwQEREREZFaYpkhIiIiIiK1xDJDRERERERqiWWGiIiIiIjUEssMERERERGpJZYZIiIiIiJSSywzRERERESkllhmiIiIiIhILbHMEBERERGRWmKZISIiIiIitcQyQ0REREREaklPdACi4pSVW4D7GVnIK5BBX08HtY2NYGTA/zcgIiIiUkd8F0caL+X5O+yKTkNE0gukZWZD/pevSQDUrGgIVwtT9HOqifqVy4iKSURERERf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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "nx.draw(data_graph)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "eff450d9-8ac8-4f84-a82b-9785fa68ea73", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "enriched_data = enriched_manual_graph()\n", - "enriched_graph = torch_geometric.utils.to_networkx(enriched_data, to_undirected=True)\n", - "nx.draw(enriched_graph)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "f688f5e3-ba37-441e-82fd-4568572be690", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([0, 1, 1, 1, 0, 0, 0, 0])" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "enriched_data.y" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "123e8635-81f7-4877-b2a9-abe6b799b5c4", - "metadata": {}, - "outputs": [], - "source": [ - "ml = MapperLifting(\"svd\")" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "b0dc8dae-d433-4bca-be2a-73a9fb4b8349", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "torch.Size([8, 1])" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ml._filter(data).shape" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "285669c6-f036-46a7-b26b-e62b8c3d0d0e", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "hyperedges tensor([[1., 0., 0., 0.],\n", - " [1., 0., 0., 0.],\n", - " [1., 0., 0., 0.],\n", - " [1., 0., 0., 0.],\n", - " [1., 0., 0., 0.],\n", - " [1., 1., 0., 0.],\n", - " [0., 1., 1., 0.],\n", - " [0., 0., 0., 1.]])\n" - ] - }, - { - "data": { - "text/plain": [ - "{'incidence_hyperedges': tensor(indices=tensor([[ 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2,\n", - " 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5,\n", - " 6, 6, 6, 6, 7, 7, 7, 7],\n", - " [ 0, 1, 2, 3, 13, 0, 4, 5, 13, 1, 4, 6, 7, 8,\n", - " 9, 13, 6, 10, 13, 2, 5, 9, 13, 7, 11, 12, 13, 14,\n", - " 10, 11, 14, 15, 3, 8, 12, 16]]),\n", - " values=tensor([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n", - " 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n", - " 1., 1., 1., 1., 1., 1., 1., 1.]),\n", - " size=(8, 17), nnz=36, layout=torch.sparse_coo),\n", - " 'num_hyperedges': 17,\n", - " 'x_0': tensor([[1.0000e+00],\n", - " [5.0000e+00],\n", - " [1.0000e+01],\n", - " [5.0000e+01],\n", - " [1.0000e+02],\n", - " [5.0000e+02],\n", - " [1.0000e+03],\n", - " [5.0000e+03]])}" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ml.lift_topology(data)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "cdf89d20-462c-41b9-b7a1-1321695d2863", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[ True, False, False, False],\n", - " [ True, False, False, False],\n", - " [ True, False, False, False],\n", - " [ True, False, False, False],\n", - " [ True, False, False, False],\n", - " [ True, True, False, False],\n", - " [False, True, True, False],\n", - " [False, False, False, True]])" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ml.cover" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "30ef75b5-ce40-47ba-b3b9-5edab5cd916a", - "metadata": {}, - "outputs": [], - "source": [ - "import networkx as nx\n", - "import torch\n", - "import torch_geometric\n", - "from torch_geometric.transforms import (\n", - " AddLaplacianEigenvectorPE,\n", - " SVDFeatureReduction,\n", - " ToUndirected,\n", - " Compose,\n", - ")\n", - "from torch_geometric.utils import subgraph\n", - "\n", - "from modules.transforms.liftings.graph2hypergraph.base import Graph2HypergraphLifting" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "bb1ea2ae-7f2c-45bf-9c99-38b1222b33c4", - "metadata": {}, - "outputs": [], - "source": [ - "filter_dict = {\n", - " \"laplacian\": Compose(\n", - " [ToUndirected(), AddLaplacianEigenvectorPE(k=1, is_undirected=True)]\n", - " ),\n", - " \"svd\": SVDFeatureReduction(out_channels=1),\n", - " \"feature_sum\": lambda data: torch.sum(data.x, dim=1).unsqueeze(1),\n", - " \"position_sum\": lambda data: torch.sum(data.pos, dim=1).unsqueeze(1),\n", - " \"feature_pca\": lambda data: torch.matmul(\n", - " data.x, torch.pca_lowrank(data.x, q=1)[2][:, :1]\n", - " ),\n", - " \"position_pca\": lambda data: torch.matmul(\n", - " data.pos, torch.pca_lowrank(data.pos, q=1)[2][:, :1]\n", - " ),\n", - "}\n", - "expected_filtered_data = {}\n", - "for name, transform in filter_dict.items():\n", - " filtered_data = transform(enriched_data)\n", - " # print(name)\n", - " if name == \"laplacian\":\n", - " # print(filtered_data['laplacian_eigenvector_pe'])\n", - " expected_filtered_data[name] = filtered_data[\"laplacian_eigenvector_pe\"]\n", - " elif name == \"svd\":\n", - " # print(filtered_data.x)\n", - " expected_filtered_data[name] = filtered_data.x\n", - " else:\n", - " # print(filtered_data)\n", - " # print('---------------')\n", - " expected_filtered_data[name] = filtered_data" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "83a288dd-28b5-4609-8ed8-a7c9504b4878", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "laplacian 1 tensor([0.3611]) torch.float32\n", - "tensor([-0.5646, -0.4760, -0.3873, -0.2986, -0.2100, -0.1213, -0.0326, 0.0561,\n", - " 0.1447, 0.2334])\n", - "tensor([-0.4380, -0.3493, -0.2606, -0.1720, -0.0833, 0.0054, 0.0941, 0.1827,\n", - " 0.2714, 0.3601])\n", - "tensor([False])\n", - "tensor([-0.0010])\n", - "laplacian 4 tensor([0.3611]) torch.float32\n", - "tensor([-0.5646, -0.4760, -0.3873, -0.2986, -0.2100, -0.1213, -0.0326, 0.0561,\n", - " 0.1447, 0.2334])\n", - "tensor([-0.4380, -0.3493, -0.2606, -0.1720, -0.0833, 0.0054, 0.0941, 0.1827,\n", - " 0.2714, 0.3601])\n", - "tensor([False])\n", - "tensor([-0.0010])\n", - "--------------------------\n", - "svd 0 tensor([-1.1183]) torch.float32\n", - "tensor([-5590.1719, -5054.2354, -4518.2988, -3982.3621, -3446.4255, -2910.4890,\n", - " -2374.5525, -1838.6158, -1302.6792, -766.7427])\n", - "tensor([-4.8245e+03, -4.2886e+03, -3.7527e+03, -3.2167e+03, -2.6808e+03,\n", - " -2.1449e+03, -1.6089e+03, -1.0730e+03, -5.3706e+02, -1.1190e+00])\n", - "tensor([False])\n", - "tensor([-0.0007])\n", - "tensor([[False, False, False, False],\n", - " [False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, True, True],\n", - " [False, True, True, False],\n", - " [ True, False, False, False]])\n", - "--------------------------\n", - "feature_sum NO PROBLEMS\n", - "--------------------------\n", - "position_sum 7 tensor([29.]) torch.float32\n", - "tensor([ 0.9990, 3.6839, 6.3689, 9.0538, 11.7387, 14.4237, 17.1086, 19.7935,\n", - " 22.4785, 25.1634])\n", - "tensor([ 4.8346, 7.5195, 10.2045, 12.8894, 15.5743, 18.2593, 20.9442, 23.6291,\n", - " 26.3141, 28.9990])\n", - "tensor([False])\n", - "tensor([-0.0010])\n", - "--------------------------\n", - "feature_pca 0 tensor([-1.1180]) torch.float32\n", - "tensor([-5590.1704, -5054.2339, -4518.2979, -3982.3613, -3446.4248, -2910.4883,\n", - " -2374.5518, -1838.6155, -1302.6791, -766.7427])\n", - "tensor([-4.8245e+03, -4.2886e+03, -3.7527e+03, -3.2167e+03, -2.6808e+03,\n", - " -2.1449e+03, -1.6089e+03, -1.0730e+03, -5.3706e+02, -1.1193e+00])\n", - "tensor([False])\n", - "tensor([-0.0012])\n", - "tensor([[False, False, False, False],\n", - " [False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, True, True],\n", - " [False, True, True, False],\n", - " [ True, False, False, False]])\n", - "--------------------------\n", - "position_pca 0 tensor([-0.7071]) torch.float32\n", - "tensor([-20.5071, -18.6086, -16.7100, -14.8115, -12.9130, -11.0144, -9.1159,\n", - " -7.2174, -5.3188, -3.4203])\n", - "tensor([-17.7949, -15.8964, -13.9978, -12.0993, -10.2008, -8.3022, -6.4037,\n", - " -4.5052, -2.6066, -0.7081])\n", - "tensor([False])\n", - "tensor([-0.0010])\n", - "--------------------------\n" - ] - } - ], - "source": [ - "for name, filtered_data in expected_filtered_data.items():\n", - " data_min = torch.min(filtered_data) - 1e-3\n", - " data_max = torch.max(filtered_data) + 1e-3\n", - " data_range = torch.max(filtered_data) - torch.min(filtered_data)\n", - " # width of each interval in the cover\n", - " cover_width = data_range / (10 - (10 - 1) * 0.3)\n", - " last = data_min + 9 * (1 - 0.3) * cover_width\n", - " lower_endpoints = torch.linspace(data_min, last, 10)\n", - " # lower_endpoints = torch.linspace(\n", - " # data_min, data_max - cover_width, 10\n", - " # )\n", - " upper_endpoints = lower_endpoints + cover_width\n", - " # want a n x resolution Boolean tensor\n", - " lower_values = torch.gt(filtered_data, lower_endpoints)\n", - " upper_values = torch.lt(filtered_data, upper_endpoints)\n", - " lower_is_close_values = torch.isclose(filtered_data, lower_endpoints)\n", - " upper_is_close_values = torch.isclose(filtered_data, upper_endpoints)\n", - " mask = torch.logical_and(\n", - " torch.logical_or(lower_values, lower_is_close_values),\n", - " torch.logical_or(upper_values, upper_is_close_values),\n", - " )\n", - " # remove empty intervals from cover\n", - " non_empty_covers = torch.any(mask, 0)\n", - " if not torch.all(torch.any(mask, 1)):\n", - " for i, b in enumerate(torch.any(mask, 1)):\n", - " if not b:\n", - " print(name, i, filtered_data[i], filtered_data[i].dtype)\n", - " print(lower_endpoints)\n", - " print(upper_endpoints)\n", - " # print(upper_endpoints[-1])\n", - " print(\n", - " torch.isclose(torch.Tensor(upper_endpoints[-1]), filtered_data[i])\n", - " )\n", - " print(upper_endpoints[-1] - filtered_data[i])\n", - " if torch.all(torch.any(mask, 1)):\n", - " print(name, \"NO PROBLEMS\")\n", - " non_empty_covers = torch.any(mask, 0)\n", - " if name in [\"svd\", \"feature_pca\"]:\n", - " print(mask[:, non_empty_covers])\n", - " print(\"--------------------------\")\n", - "\n", - " assert mask.shape == torch.Size([8, 10]), f\"{mask.shape}\"\n", - " # assert torch.all(torch.any(mask, 1)), f\"{name},{torch.any(mask,1)}\"\n", - " # return mask[:, non_empty_covers]" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "4cf97e5e-94c9-4f63-80b4-23562a28ba19", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor(-5590.1709) tensor(-1.1183) tensor(5589.0527)\n", - "tensor(765.6237)\n", - "svd\n", - "tensor([[False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, True, True],\n", - " [False, True, True, False],\n", - " [ True, False, False, False]])\n", - "tensor([[-5.5902e+03, -4.8245e+03],\n", - " [-5.0542e+03, -4.2886e+03],\n", - " [-4.5183e+03, -3.7527e+03],\n", - " [-3.9824e+03, -3.2167e+03],\n", - " [-3.4464e+03, -2.6808e+03],\n", - " [-2.9105e+03, -2.1449e+03],\n", - " [-2.3746e+03, -1.6089e+03],\n", - " [-1.8386e+03, -1.0730e+03],\n", - " [-1.3027e+03, -5.3706e+02],\n", - " [-7.6674e+02, -1.1180e+00]])\n", - "---------------\n" - ] - } - ], - "source": [ - "for filter, filtered_data in expected_filtered_data.items():\n", - " if filter in [\"svd\"]:\n", - " cover_mask = torch.full((filtered_data.shape[0], 10), False, dtype=torch.bool)\n", - " data_min = torch.min(filtered_data)\n", - " data_max = torch.max(filtered_data)\n", - " data_range = torch.max(filtered_data) - torch.min(filtered_data)\n", - " print(data_min, data_max, data_range)\n", - " # width of each interval in the cover\n", - " cover_width = data_range / (10 - (10 - 1) * 0.3)\n", - " print(cover_width)\n", - " last = data_min + (10 - 1) * (1 - 0.3) * cover_width\n", - " lows = torch.zeros(10)\n", - " for i in range(10):\n", - " lows[i] = (data_min) + (i) * (1 - 0.3) * cover_width\n", - " highs = lows + cover_width\n", - " # construct boolean cover\n", - " for j, pt in enumerate(filtered_data):\n", - " for i in range(10):\n", - " # if j==0:\n", - " # print(i)\n", - " # print(pt > lows[i])\n", - " # print(torch.isclose(pt, lows[i]))\n", - " # print(\"AND\")\n", - " # print(pt < highs[i])\n", - " # print(torch.isclose(pt, highs[i]))\n", - " if (pt > lows[i] or torch.isclose(pt, lows[i])) and (\n", - " pt < highs[i] or torch.isclose(pt, highs[i])\n", - " ):\n", - " cover_mask[j, i] = True\n", - " # delete empty covers\n", - " keep = torch.full([10], True, dtype=torch.bool)\n", - " count_falses = 0\n", - " for i in range(10):\n", - " for j in range(filtered_data.shape[0]):\n", - " if not cover_mask[j, i]:\n", - " count_falses += 1\n", - " if count_falses == filtered_data.shape[0]:\n", - " keep[i] = False\n", - " count_falses = 0\n", - " print(filter)\n", - " print(torch.t(torch.t(cover_mask)[keep]))\n", - " print(torch.hstack((lows.reshape([10, 1]), highs.reshape([10, 1]))))\n", - " print(\"---------------\")" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "ceefc7eb-b223-4ea3-b58a-be6533609040", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor(-5590.1709) tensor(-1.1183) tensor(5589.0527)\n", - "tensor(765.6237)\n", - "svd\n", - "tensor([[False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, True, True],\n", - " [False, True, True, False],\n", - " [ True, False, False, False]])\n", - "tensor([[-5.5902e+03, -4.8245e+03],\n", - " [-5.0542e+03, -4.2886e+03],\n", - " [-4.5183e+03, -3.7527e+03],\n", - " [-3.9824e+03, -3.2167e+03],\n", - " [-3.4464e+03, -2.6808e+03],\n", - " [-2.9105e+03, -2.1449e+03],\n", - " [-2.3746e+03, -1.6089e+03],\n", - " [-1.8386e+03, -1.0730e+03],\n", - " [-1.3027e+03, -5.3706e+02],\n", - " [-7.6674e+02, -1.1180e+00]])\n", - "---------------\n" - ] - } - ], - "source": [ - "for filter, filtered_data in expected_filtered_data.items():\n", - " if filter in [\"svd\"]:\n", - " cover_mask = torch.full((filtered_data.shape[0], 10), False, dtype=torch.bool)\n", - " data_min = torch.min(filtered_data)\n", - " data_max = torch.max(filtered_data)\n", - " data_range = torch.max(filtered_data) - torch.min(filtered_data)\n", - " print(data_min, data_max, data_range)\n", - " # width of each interval in the cover\n", - " cover_width = data_range / (10 - (10 - 1) * 0.3)\n", - " print(cover_width)\n", - " last = data_min + (10 - 1) * (1 - 0.3) * cover_width\n", - " lows = torch.zeros(10)\n", - " for i in range(10):\n", - " lows[i] = (data_min) + (i) * (1 - 0.3) * cover_width\n", - " highs = lows + cover_width\n", - " # construct boolean cover\n", - " for j, pt in enumerate(filtered_data):\n", - " for i in range(10):\n", - " # if j==0:\n", - " # print(i)\n", - " # print(pt > lows[i])\n", - " # print(torch.isclose(pt, lows[i]))\n", - " # print(\"AND\")\n", - " # print(pt < highs[i])\n", - " # print(torch.isclose(pt, highs[i]))\n", - " if (pt > lows[i] or torch.isclose(pt, lows[i])) and (\n", - " pt < highs[i] or torch.isclose(pt, highs[i])\n", - " ):\n", - " cover_mask[j, i] = True\n", - " # delete empty covers\n", - " keep = torch.full([10], True, dtype=torch.bool)\n", - " count_falses = 0\n", - " for i in range(10):\n", - " for j in range(filtered_data.shape[0]):\n", - " if not cover_mask[j, i]:\n", - " count_falses += 1\n", - " if count_falses == filtered_data.shape[0]:\n", - " keep[i] = False\n", - " count_falses = 0\n", - " print(filter)\n", - " print(torch.t(torch.t(cover_mask)[keep]))\n", - " print(torch.hstack((lows.reshape([10, 1]), highs.reshape([10, 1]))))\n", - " print(\"---------------\")\n", - "\n", - "resolution = 10\n", - "gain = 0.3\n", - "filtered_data = expected_filtered_data[\"svd\"]\n", - "\n", - "\n", - "def get_cover(filtered_data, resolution, gain):\n", - " data_min = torch.min(filtered_data)\n", - " data_max = torch.max(filtered_data)\n", - " data_range = torch.max(filtered_data) - torch.min(filtered_data)\n", - " print(data_min, data_max, data_range)\n", - " # width of each interval in the cover\n", - " cover_width = data_range / (resolution - (resolution - 1) * gain)\n", - " last_lower_endpoint = data_min + cover_width * (resolution - 1) * (1 - gain)\n", - " lower_endpoints = torch.linspace(data_min, last_lower_endpoint, resolution)\n", - " upper_endpoints = lower_endpoints + cover_width\n", - " cover_intervals = torch.hstack(\n", - " (\n", - " lower_endpoints.reshape([resolution, 1]),\n", - " upper_endpoints.reshape([resolution, 1]),\n", - " )\n", - " )\n", - " # want a n x resolution Boolean tensor\n", - " lower_values = torch.gt(filtered_data, lower_endpoints)\n", - " upper_values = torch.lt(filtered_data, upper_endpoints)\n", - " # need to check close values to deal with some endpoint issues\n", - " lower_is_close_values = torch.isclose(filtered_data, lower_endpoints, atol=1e-3)\n", - " upper_is_close_values = torch.isclose(filtered_data, upper_endpoints, atol=1e-3)\n", - " # construct the boolean mask\n", - " mask = torch.logical_and(\n", - " torch.logical_or(lower_values, lower_is_close_values),\n", - " torch.logical_or(upper_values, upper_is_close_values),\n", - " )\n", - " # remove empty intervals from cover\n", - " non_empty_covers = torch.any(mask, 0)\n", - " print(\"point\", filtered_data[0], \"coverwidth\", cover_width)\n", - " print(cover_intervals)\n", - " print(lower_values[0, 9], lower_is_close_values[0, 9])\n", - " print(\"AND\")\n", - " print(upper_values[0, 9], upper_is_close_values[0, 9])\n", - " return mask[:, non_empty_covers]" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "a71e8141-2a48-4cf1-b711-8a887db124fd", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor(-5590.1709) tensor(-1.1183) tensor(5589.0527)\n", - "point tensor([-1.1183]) coverwidth tensor(765.6237)\n", - "tensor([[-5.5902e+03, -4.8245e+03],\n", - " [-5.0542e+03, -4.2886e+03],\n", - " [-4.5183e+03, -3.7527e+03],\n", - " [-3.9824e+03, -3.2167e+03],\n", - " [-3.4464e+03, -2.6808e+03],\n", - " [-2.9105e+03, -2.1449e+03],\n", - " [-2.3746e+03, -1.6089e+03],\n", - " [-1.8386e+03, -1.0730e+03],\n", - " [-1.3027e+03, -5.3706e+02],\n", - " [-7.6674e+02, -1.1185e+00]])\n", - "tensor(True) tensor(False)\n", - "AND\n", - "tensor(False) tensor(True)\n" - ] - }, - { - "data": { - "text/plain": [ - "tensor([[False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, False, True],\n", - " [False, False, True, True],\n", - " [False, True, True, False],\n", - " [ True, False, False, False]])" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "get_cover(filtered_data, resolution, gain)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "652e8ffb-10a8-4ddb-8c74-84635e4e969d", - "metadata": {}, - "outputs": [], - "source": [ - "x = torch.tensor([1, 2])\n", - "z = torch.tensor([1, 4])\n", - "y = torch.hstack((x.reshape([2, 1]), z.reshape([2, 1])))" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "cc4f7106-7e56-44b6-8f93-d9bd68e725b1", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "t = torch.full([2], True, dtype=torch.bool)\n", - "t[0] = False\n", - "torch.equal(x, z)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "347060df-dc21-4af8-bb03-c3c6077c4aaf", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "torch.Size([2, 1])" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "torch.sum(y, dim=1).unsqueeze(1).shape" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "ae288fdf-399e-481f-ac88-73cc95c7994d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(torch.Size([8, 2]), torch.Size([8, 2]))" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "enriched_data.x.shape, enriched_data.pos.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "c1aa3a71-3dc2-4eeb-8713-9ed601268349", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "hyperedges tensor([[1., 0., 0., 0., 0., 0., 0., 0.],\n", - " [0., 1., 0., 0., 0., 0., 0., 0.],\n", - " [0., 0., 1., 0., 0., 0., 0., 0.],\n", - " [0., 0., 0., 1., 0., 0., 0., 0.],\n", - " [0., 0., 0., 0., 1., 0., 0., 0.],\n", - " [0., 0., 0., 0., 0., 1., 0., 0.],\n", - " [0., 0., 0., 0., 0., 0., 1., 0.],\n", - " [0., 0., 0., 0., 0., 0., 0., 1.]])\n", - "Data(x=[8, 2], edge_index=[2, 26], y=[8], pos=[8, 2], num_nodes=8, incidence_hyperedges=[8, 34], num_hyperedges=34, x_0=[8, 2], x_hyperedges=[34, 2])\n", - "-----------------------------\n", - "hyperedges tensor([[1., 0., 0., 0., 0., 0., 0., 0.],\n", - " [0., 1., 0., 0., 0., 0., 0., 0.],\n", - " [0., 0., 1., 0., 0., 0., 0., 0.],\n", - " [0., 0., 0., 1., 0., 0., 0., 0.],\n", - " [0., 0., 0., 0., 1., 0., 0., 0.],\n", - " [0., 0., 0., 0., 0., 1., 0., 0.],\n", - " [0., 0., 0., 0., 0., 0., 1., 0.],\n", - " [0., 0., 0., 0., 0., 0., 0., 1.]])\n", - "Data(x=[8, 2], edge_index=[2, 26], y=[8], pos=[8, 2], num_nodes=8, incidence_hyperedges=[8, 34], num_hyperedges=34, x_0=[8, 2], x_hyperedges=[34, 2])\n", - "-----------------------------\n", - "hyperedges tensor([[1., 0., 0., 0., 0., 0., 0., 0.],\n", - " [0., 1., 0., 0., 0., 0., 0., 0.],\n", - " [0., 0., 1., 0., 0., 0., 0., 0.],\n", - " [0., 0., 0., 1., 0., 0., 0., 0.],\n", - " [0., 0., 0., 0., 1., 0., 0., 0.],\n", - " [0., 0., 0., 0., 0., 1., 0., 0.],\n", - " [0., 0., 0., 0., 0., 0., 1., 0.],\n", - " [0., 0., 0., 0., 0., 0., 0., 1.]])\n", - "Data(x=[8, 2], edge_index=[2, 26], y=[8], pos=[8, 2], num_nodes=8, incidence_hyperedges=[8, 34], num_hyperedges=34, x_0=[8, 2], x_hyperedges=[34, 2])\n", - "-----------------------------\n", - "hyperedges tensor([[1., 0., 0., 0., 0., 0., 0., 0.],\n", - " [0., 1., 0., 0., 0., 0., 0., 0.],\n", - " [0., 0., 1., 0., 0., 0., 0., 0.],\n", - " [0., 0., 0., 1., 0., 0., 0., 0.],\n", - " [0., 0., 0., 0., 1., 0., 0., 0.],\n", - " [0., 0., 0., 0., 0., 1., 0., 0.],\n", - " [0., 0., 0., 0., 0., 0., 1., 0.],\n", - " [0., 0., 0., 0., 0., 0., 0., 1.]])\n", - "Data(x=[8, 2], edge_index=[2, 26], y=[8], pos=[8, 2], num_nodes=8, incidence_hyperedges=[8, 34], num_hyperedges=34, x_0=[8, 2], x_hyperedges=[34, 2])\n", - "-----------------------------\n", - "hyperedges tensor([[1., 0., 0., 0., 0., 0., 0., 0.],\n", - " [0., 1., 0., 0., 0., 0., 0., 0.],\n", - " [0., 0., 1., 0., 0., 0., 0., 0.],\n", - " [0., 0., 0., 1., 0., 0., 0., 0.],\n", - " [0., 0., 0., 0., 1., 0., 0., 0.],\n", - " [0., 0., 0., 0., 0., 1., 0., 0.],\n", - " [0., 0., 0., 0., 0., 0., 1., 0.],\n", - " [0., 0., 0., 0., 0., 0., 0., 1.]])\n", - "Data(x=[8, 2], edge_index=[2, 26], y=[8], pos=[8, 2], num_nodes=8, incidence_hyperedges=[8, 34], num_hyperedges=34, x_0=[8, 2], x_hyperedges=[34, 2])\n", - "-----------------------------\n" - ] - } - ], - "source": [ - "filter_dict = {\n", - " \"laplacian\": Compose(\n", - " [ToUndirected(), AddLaplacianEigenvectorPE(k=1, is_undirected=True)]\n", - " ),\n", - " \"svd\": SVDFeatureReduction(out_channels=1),\n", - " \"feature_sum\": lambda data: torch.sum(data.x, dim=1).unsqueeze(1),\n", - " \"position_sum\": lambda data: torch.sum(data.pos, dim=1).unsqueeze(1),\n", - " \"feature_pca\": lambda data: torch.matmul(\n", - " data.x, torch.pca_lowrank(data.x, q=1)[2][:, :1]\n", - " ),\n", - " \"position_pca\": lambda data: torch.matmul(\n", - " data.pos, torch.pca_lowrank(data.pos, q=1)[2][:, :1]\n", - " ),\n", - "}\n", - "for _ in range(5):\n", - " name = \"position_sum\"\n", - " ml = MapperLifting(filter_attr=name)\n", - " print(ml(enriched_data))\n", - " print(\"-----------------------------\")" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "39a95bc4-e893-4614-8f30-5c56fea66d54", - "metadata": {}, - "outputs": [], - "source": [ - "a = [value[1] for value in ml.clusters.values()]" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "e973e048-c3c4-4e29-84fb-d75cdd327ce3", - "metadata": {}, - "outputs": [], - "source": [ - "b = [value.tolist() for value in a]\n", - "c = [[2.0, 7.0]]\n", - "for k in c:\n", - " if k in b:\n", - " print(\"yes\")" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "77597cf4-53a5-43cf-b450-a0c64658f8d0", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[[7.0], [6.0], [5.0, 6.0], [0.0, 1.0, 2.0, 3.0, 4.0, 5.0]]" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "b" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f5b5860b-838b-42cb-937e-d841d28d33fa", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "ICML", - "language": "python", - "name": "icml" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.12" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From e9f01f76195687f0068d72925e9facb391b2a777 Mon Sep 17 00:00:00 2001 From: Halley Fritze <97766437+hfr1tz3@users.noreply.github.com> Date: Wed, 10 Jul 2024 11:30:21 -0700 Subject: [PATCH 20/26] Cleanup --- .../graph2hypergraph/mapper_lifting.py | 106 +++++++++--------- .../graph2hypergraph/test_mapper_lifting.py | 18 ++- .../graph2hypergraph/mapper_lifting.ipynb | 79 +++++-------- 3 files changed, 95 insertions(+), 108 deletions(-) diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index c21a4cda..27c9501e 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -21,16 +21,14 @@ class MapperCover: resolution : int, optional The number of intervals in the MapperCover. Default is 10. gain : float, optional - The percentage of overlap between consectutive intervals - in MapperCover and should be value between 0 and 0.5. + The proportion of overlap between consectutive intervals + in the MapperCover and should be value between 0 and 0.5. Default is 0.3. Attributes ---------- - left_endpoints : (resolution, 1) Tensor - The left endpoints for each interval in the MapperCover. - right_endpoints : (resolution, 1) Tensor - The right endpoints for each interval in the MapperCover. + cover_intervals : (resolution, 2) Tensor + A tensor containing each interval in the MapperCover. """ def __init__(self, resolution=10, gain=0.3): @@ -59,7 +57,8 @@ def fit_transform(self, filtered_data): data_min = torch.min(filtered_data) - 1e-3 data_max = torch.max(filtered_data) + 1e-3 data_range = data_max - data_min - # width of each interval in the cover + + # width of each interval in the cover and last left endpoint cover_width = data_range / (self.resolution - (self.resolution - 1) * self.gain) last_lower_endpoint = data_min + cover_width * (self.resolution - 1) * ( 1 - self.gain @@ -75,9 +74,11 @@ def fit_transform(self, filtered_data): # want a n x resolution Boolean tensor lower_values = torch.gt(filtered_data, lower_endpoints) upper_values = torch.lt(filtered_data, upper_endpoints) + # need to check close values to deal with some endpoint issues lower_is_close_values = torch.isclose(filtered_data, lower_endpoints) upper_is_close_values = torch.isclose(filtered_data, upper_endpoints) + # construct the boolean mask mask = torch.logical_and( torch.logical_or(lower_values, lower_is_close_values), @@ -85,6 +86,7 @@ def fit_transform(self, filtered_data): ) # assert every data point is covered assert torch.all(torch.any(mask, 1)), f"{torch.any(mask,1)}" + # remove empty intervals from cover non_empty_covers = torch.any(mask, 0) return mask[:, non_empty_covers] @@ -120,7 +122,7 @@ def _verify_cover_parameters(self): class MapperLifting(Graph2HypergraphLifting): r"""Lifts graphs to hypergraph domain using a Mapper construction for CC-pooling. - (See Figure 30 in [1]) + (See Figure 30 in \[1\]) Parameters ---------- @@ -135,7 +137,7 @@ class MapperLifting(Graph2HypergraphLifting): Default is 10. gain : float, optional The percentage of overlap between consectutive intervals - in MapperCover and should be value between 0 and 0.5. + in MapperCover and should be a value between 0 and 0.5. Default is 0.3. filter_func : object, optional Filter function used for Mapper construction. @@ -147,6 +149,23 @@ class MapperLifting(Graph2HypergraphLifting): **kwargs : optional Additional arguments for the class. + Attributes + ---------- + filtered_data : dict + Filtered data used to compute the Mapper lifting. + Dictionary is of the form + {filter_attr: filter_func(data)}. + cover : (k, resolution) boolean Tensor + Mask computed from the MapperCover class + to compute the Mapper lifting with k < n_sample. + clusters : dict + Distinct connected components in each cover set + computed after fitting the Mapper cover. + Dictionary has integer keys and tuple values + of the form (cover_set_i, nodes_in_cluster). + Each cluster is a rank 2 hyperedge in the + hypergraph. + Notes ----- The following are common filter functions which can be called with @@ -154,17 +173,17 @@ class MapperLifting(Graph2HypergraphLifting): 1. "laplacian" : Converts data to an undirected graph and then applies the torch_geometric.transforms.AddLaplacianEigenvectorPE(k=1) transform and - projects onto the 1st eigenvector. + projects onto the smallest nonzero eigenvector. 2. "svd" : Applies the torch_geometric.transforms.SVDFeatureReduction(out_channels=1) transform to the node feature matrix (ie. torch_geometric.Data.data.x) to project data to a 1-dimensional subspace. 3. "feature_pca" : Applies torch.pca_lowrank(q=1) transform to node feature matrix - (ie. torch_geometric.Data.data.x) and then projects to the 1st principle component. + (ie. torch_geometric.Data.data.x) and then projects to the 1st principal component. - 4. "position_pca" : Applies torch.pca_lowrank(q=1) transform to node feature matrix - (ie. torch_geometric.Data.data.pos) and then projects to the 1st principle component. + 4. "position_pca" : Applies torch.pca_lowrank(q=1) transform to node position matrix + (ie. torch_geometric.Data.data.pos) and then projects to the 1st principal component. 5. "feature_sum" : Applies torch.sum(dim=1) to the node feature matrix in the graph (ie. torch_geometric.Data.data.x). @@ -174,9 +193,9 @@ class MapperLifting(Graph2HypergraphLifting): You may also construct your own filter_attr and filter_func: - 7. "my_filter_attr" : my_filter_func = lambda data : my_filter_func(data) + 7. "my_filter_attr" : Name of a self defined function + my_filter_func = lambda data : my_filter_func(data) where my_filter_func(data) outputs a (n_sample, 1) Tensor. - Additionally, assign filter_func = my_filter_func. References ---------- @@ -201,6 +220,19 @@ def __init__( self.filter_func = filter_func self._verify_filter_parameters(filter_attr, filter_func) + def _verify_filter_parameters(self, filter_attr, filter_func): + if filter_func is None: + assert ( + self.filter_attr in filter_dict + ), f"Please add function to filter_func or choose filter_attr from {list(filter_dict)}. \ + Currently filter_func is {filter_func} and filter_attr is {filter_attr}." + if filter_func is not None: + assert ( + self.filter_attr not in filter_dict + ), f"Assign new filter_attr not in {list(filter_dict)} or leave filter_func as None. \ + Currently filter_func is {filter_func} and filter_attr is {filter_attr}" + assert type(filter_attr) is str, f"filter_attr must be a string." + def _filter(self, data): """Applies 1-dimensional filter function to torch_geometric.Data.data. @@ -233,10 +265,11 @@ def _cluster(self, data, cover_mask): """Finds clusters in each cover set within cover_mask. For each cover set, a cluster is a distinct connected component. - Clusters are stored in dictionary, self.clusters. + Clusters are stored in the dictionary, self.clusters. """ mapper_clusters = {} num_clusters = 0 + # convert data to undirected graph for clustering to_undirected = ToUndirected() data = to_undirected(data) @@ -256,10 +289,12 @@ def _cluster(self, data, cover_mask): ] nodes = [i.item() for i in torch.where(cover_set)[0]] + # build graph to find clusters cover_graph = nx.Graph() cover_graph.add_nodes_from(nodes) cover_graph.add_edges_from(edges) + # find clusters clusters = nx.connected_components(cover_graph) @@ -267,6 +302,7 @@ def _cluster(self, data, cover_mask): # index is the subset of nodes in data # contained in cluster index = torch.Tensor(list(cluster)) + # kth cluster is item in dictionary # of the form: # k : (cover_set_index, nodes_in_cluster) @@ -278,30 +314,13 @@ def _cluster(self, data, cover_mask): return mapper_clusters def lift_topology(self, data: torch_geometric.data.Data) -> dict: - r"""Lifts the topology of a graph to hypergraph domain by considering k-nearest neighbors. + r"""Lifts the topology of a graph to hypergraph domain by Mapper on Graphs. Parameters ---------- data : torch_geometric.data.Data The input data to be lifted. - Attributes - ---------- - filtered_data : dict - Filtered data used to compute the Mapper lifting. - Dictionary is of the form - {filter_attr: filter_func(data)}. - cover : (n_sample, resolution) boolean Tensor - Mask computed from the MapperCover class - to compute the Mapper lifting. - clusters : dict - Distinct connected components in each cover set - computed after fitting the Mapper cover. - Dictionary has integer keys and tuple values - of the form (cover_set_i, nodes_in_cluster). - Each cluster is a rank 2 hyperedge in the - hypergraph. - Returns ------- dict @@ -309,13 +328,16 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: """ # Filter the data to 1-dimensional subspace filtered_data = self._filter(data) + self.filtered_data = filtered_data # Define and fit the cover cover = MapperCover(self.resolution, self.gain) cover_mask = cover.fit_transform(filtered_data) self.cover = cover_mask + # Find the clusters in the fitted cover mapper_clusters = self._cluster(data, cover_mask) + self.clusters = mapper_clusters # Construct the hypergraph dictionary num_nodes = data["x"].shape[0] @@ -337,27 +359,11 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: incidence_hyperedges[j.int(), i] = 1 # Incidence matrix is (num_nodes, num_edges + num_clusters) size matrix - incidence = torch.hstack([incidence_edges, incidence_hyperedges]) - incidence = torch.Tensor(incidence).to_sparse_coo() - print("hyperedges", incidence_hyperedges) return { "incidence_hyperedges": incidence, "num_hyperedges": num_hyperedges, "x_0": data.x, } - - def _verify_filter_parameters(self, filter_attr, filter_func): - if filter_func is None: - assert ( - self.filter_attr in filter_dict - ), f"Please add function to filter_func or choose filter_attr from {list(filter_dict)}. \ - Currently filter_func is {filter_func} and filter_attr is {filter_attr}." - if filter_func is not None: - assert ( - self.filter_attr not in filter_dict - ), f"Assign new filter_attr not in {list(filter_dict)} or leave filter_func as None. \ - Currently filter_func is {filter_func} and filter_attr is {filter_attr}" - assert type(filter_attr) is str, f"filter_attr must be a string." diff --git a/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py b/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py index 49cf8e96..5633578c 100644 --- a/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py +++ b/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py @@ -243,6 +243,10 @@ ] ) +""" Enrich the `load_manual_graph` graph with the necessary information to test + additional filter functions. +""" + def enriched_manual_graph(): data = load_manual_graph() @@ -264,7 +268,9 @@ def enriched_manual_graph(): return data -"""Construct a naive implementation to create the filtered data set given data and filter function.""" +""" Construct a naive implementation to create the filtered data set given data and filter function. + Used for testing filter function. +""" def naive_filter(data, filter): @@ -296,7 +302,9 @@ def naive_filter(data, filter): return filtered_data -"""Construct a cover_mask from filtered data and default lift parameters.""" +""" Construct a naive cover_mask from filtered data and default lift parameters. + This tests the cover method. +""" def naive_cover(filtered_data): @@ -359,7 +367,7 @@ def test_filter(self, filter): torch.isclose(lift_filter_data, naive_filter_data) ), f"Something is wrong with filtered values using {self.filter_name}. The lifted filter data is {lift_filter_data} and the naive filter data is {naive_filter_data}." if filter == "laplacian": - # laplacian produce eigenvector up to a unit multiple. + # laplacian filter produces an eigenvector up to a unit multiple. # instead we check their absolute values. assert torch.all( torch.isclose(torch.abs(lift_filter_data), torch.abs(naive_filter_data)) @@ -453,7 +461,7 @@ def test_cluster(self, filter): assert ( expected_clusters[self.filter_name].keys() == lift_clusters.keys() ), f"Different number of clusters using {filter}. Expected {list(expected_clusters[filter])} but got {list(lift_clusters)}." - for cluster in lift_clusters.keys(): + for cluster in lift_clusters: assert ( expected_clusters[self.filter_name][cluster][0] == lift_clusters[cluster][0] @@ -462,7 +470,7 @@ def test_cluster(self, filter): expected_clusters[self.filter_name][cluster][1], lift_clusters[cluster][1], ), f"Something is wrong with the clustering using {self.filter_name}. Expected node subset {expected_clusters[self.filter_name][cluster][1]} but got {lift_clusters[cluster][1]} for cluster {cluster}." - # Laplacian function projects up to a unit. This causes clusters to not be identical + # Laplacian function projects up to a unit. This causes clusters to not be identical by index # instead we check if the node subsets of the lifted set are somewhere in the expected set. if filter == "laplacian": assert len(lift_clusters) == len( diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb index 543c04b8..26e25bc3 100644 --- a/tutorials/graph2hypergraph/mapper_lifting.ipynb +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -29,34 +29,35 @@ "\n", "The example filter functions $g$ which are implemented are the following: \n", "\n", - " 1. \"laplacian\" : Converts data to an undirected graph and then applies the\n", - " torch_geometric.transforms.AddLaplacianEigenvectorPE(k=1) transform and\n", - " projects onto the 1st eigenvector.\n", + "1. `\"laplacian\"` : Converts data to an undirected graph and then applies the\n", + "`torch_geometric.transforms.AddLaplacianEigenvectorPE(k=1)` transform and\n", + "projects onto the smallest nonzero eigenvector.\n", "\n", - " 2. \"svd\" : Applies the torch_geometric.transforms.SVDFeatureReduction(out_channels=1)\n", - " transform to the node feature matrix (ie. torch_geometric.Data.data.x)\n", - " to project data to a 1-dimensional subspace.\n", + "2. `\"svd\"` : Applies the `torch_geometric.transforms.SVDFeatureReduction(out_channels=1)`\n", + "transform to the node feature matrix (ie. `torch_geometric.Data.data.x`)\n", + "to project data to a 1-dimensional subspace.\n", "\n", - " 3. \"feature_pca\" : Applies torch.pca_lowrank(q=1) transform to node feature matrix\n", - " (ie. torch_geometric.Data.data.x) and then projects to the 1st principal component.\n", + "3. `\"feature_pca\"` : Applies `torch.pca_lowrank(q=1)` transform to node feature matrix\n", + "(ie. `torch_geometric.Data.data.x`) and then projects to the 1st principal component.\n", "\n", - " 4. \"position_pca\" : Applies torch.pca_lowrank(q=1) transform to node position matrix\n", - " (ie. torch_geometric.Data.data.pos) and then projects to the 1st principal component.\n", + "4. `\"position_pca\"` : Applies `torch.pca_lowrank(q=1)` transform to node position matrix\n", + "(ie. `torch_geometric.Data.data.pos`) and then projects to the 1st principal component.\n", "\n", - " 5. \"feature_sum\" : Applies torch.sum(dim=1) to the node feature matrix in the graph\n", - " (ie. torch_geometric.Data.data.x).\n", + "5. `\"feature_sum\"` : Applies `torch.sum(dim=1)` to the node feature matrix in the graph\n", + "(ie. `torch_geometric.Data.data.x`).\n", "\n", - " 6. \"position_sum\" : Applies torch.sum(dim=1) to the node position matrix in the graph\n", - " (ie. torch_geometric.Data.data.pos).\n", + "6. `\"position_sum\"` : Applies `torch.sum(dim=1)` to the node position matrix in the graph\n", + "(ie. `torch_geometric.Data.data.pos`).\n", "\n", "\n", - "You may also construct your own filter_attr and filter_func:\n", + "You may also construct your own `filter_attr` and `filter_func`:\n", "\n", - " 7. \"my_filter_attr\" : my_filter_func = lambda data : my_filter_func(data)\n", - " where my_filter_func(data) outputs a (n_sample, 1) Tensor.\n", - " Additionally, when calling the transform, set \n", - " filter_attribute = \"my_filter_attr\"\n", - " filter_func = my_filter_func" + "7. `\"my_filter_attr\"` : `my_filter_func = lambda data : my_filter_func(data)`\n", + "where `my_filter_func(data)` outputs a `(n_sample, 1)` Tensor.\n", + "\n", + "Additionally, when calling the transform, set \n", + " `filter_attr = \"my_filter_attr\"`\n", + " `filter_func = my_filter_func`" ] }, { @@ -102,7 +103,7 @@ "source": [ "### Loading Dataset\n", "\n", - "The default size of the cover of the " + "We visualize the results of Mapper on Graphs on the ZINC dataset, which has a sufficient number of nodes in each graph to see a meaningful and interesting Mapper Lifting." ] }, { @@ -179,34 +180,6 @@ "describe_data(dataset)" ] }, - { - "cell_type": "code", - "execution_count": 4, - "id": "efc929ad-0658-44e8-a006-0ab8b98b6ada", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[ 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 6, 7, 7, 8,\n", - " 8, 8, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 15, 15, 15,\n", - " 16, 16, 16, 16, 17, 18, 19, 19, 19, 20, 20, 21, 21, 21, 22, 23, 23, 24,\n", - " 24, 25, 25, 26, 26, 27, 27, 27, 28, 28],\n", - " [ 1, 0, 2, 1, 3, 28, 2, 4, 3, 5, 4, 6, 27, 5, 7, 6, 8, 7,\n", - " 9, 10, 8, 8, 11, 27, 10, 12, 11, 13, 26, 12, 14, 13, 15, 14, 16, 25,\n", - " 15, 17, 18, 19, 16, 16, 16, 20, 24, 19, 21, 20, 22, 23, 21, 21, 24, 19,\n", - " 23, 15, 26, 12, 25, 5, 10, 28, 2, 27]])" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dataset[0][\"edge_index\"]" - ] - }, { "cell_type": "markdown", "id": "9d7101cc-c38f-42c9-bdd6-36137768a407", @@ -273,7 +246,7 @@ "source": [ "### Visualize the lifted dataset\n", "\n", - "The incidence hyperedges include both original edges and clusters from new edges. As the first $n_{edges}$ hyperedges are from the original graph edges, we visualize membership in the remaining hyperedges. " + "The incidence hyperedges include both original edges and clusters from new edges. As the first $n_{edges}$ hyperedges are from the original graph edges, we visualize membership in the remaining hyperedges via node coloring. " ] }, { @@ -431,9 +404,9 @@ ], "metadata": { "kernelspec": { - "display_name": "topoxkernel", + "display_name": "ICML", "language": "python", - "name": "topoxkernel" + "name": "icml" }, "language_info": { "codemirror_mode": { @@ -445,7 +418,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.3" + "version": "3.10.12" } }, "nbformat": 4, From f1e385d525a6d70f26756bea67e507adfe100166 Mon Sep 17 00:00:00 2001 From: Halley Fritze <97766437+hfr1tz3@users.noreply.github.com> Date: Wed, 10 Jul 2024 11:48:53 -0700 Subject: [PATCH 21/26] de-linting --- .../liftings/graph2hypergraph/mapper_lifting.py | 3 +-- .../graph2hypergraph/test_mapper_lifting.py | 13 ++++--------- tutorials/graph2hypergraph/mapper_lifting.ipynb | 10 +++++----- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index 27c9501e..f3b298d4 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -7,7 +7,6 @@ SVDFeatureReduction, ToUndirected, ) -from torch_geometric.utils import subgraph from modules.transforms.liftings.graph2hypergraph.base import Graph2HypergraphLifting @@ -231,7 +230,7 @@ def _verify_filter_parameters(self, filter_attr, filter_func): self.filter_attr not in filter_dict ), f"Assign new filter_attr not in {list(filter_dict)} or leave filter_func as None. \ Currently filter_func is {filter_func} and filter_attr is {filter_attr}" - assert type(filter_attr) is str, f"filter_attr must be a string." + assert type(filter_attr) is str, f"{filter_attr} must be a string." def _filter(self, data): """Applies 1-dimensional filter function to diff --git a/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py b/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py index 5633578c..991904e6 100644 --- a/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py +++ b/test/transforms/liftings/graph2hypergraph/test_mapper_lifting.py @@ -3,16 +3,12 @@ import torch_geometric from torch_geometric.transforms import ( AddLaplacianEigenvectorPE, - Compose, SVDFeatureReduction, ToUndirected, ) from modules.data.utils.utils import load_manual_graph -from modules.transforms.liftings.graph2hypergraph.mapper_lifting import ( - MapperCover, - MapperLifting, -) +from modules.transforms.liftings.graph2hypergraph.mapper_lifting import MapperLifting expected_edge_incidence = torch.tensor( [ @@ -314,7 +310,6 @@ def naive_cover(filtered_data): data_range = data_max - data_min # width of each interval in the cover cover_width = data_range / (10 - (10 - 1) * 0.3) - last = data_min + (10 - 1) * (1 - 0.3) * cover_width lows = torch.zeros(10) for i in range(10): lows[i] = (data_min) + (i) * (1 - 0.3) * cover_width @@ -386,7 +381,7 @@ def test_filter(self, filter): ) def test_cover(self, filter): self.setup(filter) - transformed_data = self.mapper_lift.forward(self.data.clone()) + self.mapper_lift.forward(self.data.clone()) lift_cover_mask = self.mapper_lift.cover naive_cover_mask = naive_cover(self.mapper_lift.filtered_data[filter]) assert torch.all( @@ -455,7 +450,7 @@ def test_cluster(self, filter): }, } self.setup(filter) - transformed_data = self.mapper_lift.forward(self.data.clone()) + self.mapper_lift.forward(self.data.clone()) lift_clusters = self.mapper_lift.clusters if filter != "laplacian": assert ( @@ -487,7 +482,7 @@ def test_cluster(self, filter): expected_cluster_nodes.remove(node_subset) assert ( expected_cluster_nodes == [] - ), f"Expected clusters contain more clusters than in the lifted cluster." + ), "Expected clusters contain more clusters than in the lifted cluster." @pytest.mark.parametrize( "filter", diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb index 26e25bc3..75ae2fa0 100644 --- a/tutorials/graph2hypergraph/mapper_lifting.ipynb +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -258,11 +258,11 @@ "source": [ "# imports for visualization\n", "\n", - "import torch\n", - "import networkx as nx\n", - "from torch_geometric.utils import to_networkx\n", "import matplotlib.pyplot as plt\n", - "from matplotlib.pyplot import Line2D" + "from matplotlib.pyplot import Line2D\n", + "import networkx as nx\n", + "import torch\n", + "from torch_geometric.utils import to_networkx" ] }, { @@ -341,7 +341,7 @@ " color=\"w\",\n", " markerfacecolor=cmap(member / cmap_max),\n", " markersize=15,\n", - " label=\"{}\".format(member + n_edges),\n", + " label=\"{}\".f(member + n_edges),\n", " )\n", " for member in members[1].unique()\n", "]\n", From 536569717782355233e72c42d4526cd2cda83de3 Mon Sep 17 00:00:00 2001 From: Halley Fritze <97766437+hfr1tz3@users.noreply.github.com> Date: Wed, 10 Jul 2024 11:53:02 -0700 Subject: [PATCH 22/26] further de-linting --- .../graph2hypergraph/mapper_lifting.ipynb | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb index 75ae2fa0..8f0f4a96 100644 --- a/tutorials/graph2hypergraph/mapper_lifting.ipynb +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -86,6 +86,13 @@ "# With this cell any imported module is reloaded before each cell execution\n", "%load_ext autoreload\n", "%autoreload 2\n", + "\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.pyplot import Line2D\n", + "import networkx as nx\n", + "import torch\n", + "from torch_geometric.utils import to_networkx\n", + "\n", "from modules.data.load.loaders import GraphLoader\n", "from modules.data.preprocess.preprocessor import PreProcessor\n", "from modules.utils.utils import (\n", @@ -249,22 +256,6 @@ "The incidence hyperedges include both original edges and clusters from new edges. As the first $n_{edges}$ hyperedges are from the original graph edges, we visualize membership in the remaining hyperedges via node coloring. " ] }, - { - "cell_type": "code", - "execution_count": 7, - "id": "cd8a53e4-66bc-4ba2-b3d6-8ea18cc19997", - "metadata": {}, - "outputs": [], - "source": [ - "# imports for visualization\n", - "\n", - "import matplotlib.pyplot as plt\n", - "from matplotlib.pyplot import Line2D\n", - "import networkx as nx\n", - "import torch\n", - "from torch_geometric.utils import to_networkx" - ] - }, { "cell_type": "code", "execution_count": 8, From 0fc6c169a32106abe3bb732bd85b23ab28a7741a Mon Sep 17 00:00:00 2001 From: Halley Fritze <97766437+hfr1tz3@users.noreply.github.com> Date: Wed, 10 Jul 2024 11:55:29 -0700 Subject: [PATCH 23/26] alphabetizing imports is hard --- tutorials/graph2hypergraph/mapper_lifting.ipynb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb index 8f0f4a96..1868bc99 100644 --- a/tutorials/graph2hypergraph/mapper_lifting.ipynb +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -89,10 +89,6 @@ "\n", "import matplotlib.pyplot as plt\n", "from matplotlib.pyplot import Line2D\n", - "import networkx as nx\n", - "import torch\n", - "from torch_geometric.utils import to_networkx\n", - "\n", "from modules.data.load.loaders import GraphLoader\n", "from modules.data.preprocess.preprocessor import PreProcessor\n", "from modules.utils.utils import (\n", @@ -100,7 +96,10 @@ " load_dataset_config,\n", " load_model_config,\n", " load_transform_config,\n", - ")" + ")\n", + "import networkx as nx\n", + "import torch\n", + "from torch_geometric.utils import to_networkx" ] }, { From f4a9ce2201c10ac6c9ead38fe7e50cbaee80d0f4 Mon Sep 17 00:00:00 2001 From: Halley Fritze <97766437+hfr1tz3@users.noreply.github.com> Date: Wed, 10 Jul 2024 14:49:43 -0700 Subject: [PATCH 24/26] quick fixes --- .../graph2hypergraph/mapper_lifting.py | 1 - .../graph2hypergraph/mapper_lifting.ipynb | 39 +++++++++++++------ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py index f3b298d4..b2566490 100644 --- a/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/mapper_lifting.py @@ -327,7 +327,6 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: """ # Filter the data to 1-dimensional subspace filtered_data = self._filter(data) - self.filtered_data = filtered_data # Define and fit the cover cover = MapperCover(self.resolution, self.gain) diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb index 1868bc99..5ec9cb11 100644 --- a/tutorials/graph2hypergraph/mapper_lifting.ipynb +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -150,6 +150,22 @@ "id": "089f8221-686c-4fa1-92e8-4ec10e0d4eb4", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Downloading https://www.dropbox.com/s/feo9qle74kg48gy/molecules.zip?dl=1\n", + "Extracting /home/hfriz/challenge-icml-2024/datasets/graph/ZINC/molecules.zip\n", + "Downloading https://raw.githubusercontent.com/graphdeeplearning/benchmarking-gnns/master/data/molecules/train.index\n", + "Downloading https://raw.githubusercontent.com/graphdeeplearning/benchmarking-gnns/master/data/molecules/val.index\n", + "Downloading https://raw.githubusercontent.com/graphdeeplearning/benchmarking-gnns/master/data/molecules/test.index\n", + "Processing...\n", + "Processing train dataset: 100%|████████████████████████████████████| 10000/10000 [00:00<00:00, 12227.94it/s]\n", + "Processing val dataset: 100%|█████████████████████████████████████████| 1000/1000 [00:00<00:00, 3084.84it/s]\n", + "Processing test dataset: 100%|████████████████████████████████████████| 1000/1000 [00:00<00:00, 4099.46it/s]\n", + "Done!\n" + ] + }, { "name": "stdout", "output_type": "stream", @@ -162,7 +178,7 @@ }, { "data": { - "image/png": "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", + "image/png": "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E088kddff53LLruMPfbYg5ycHCzLYsGCBWmNL1VhqXR+NkKIRDJzIEQXjjzySNauXZuyoM///vc/1q1bx5FHHtmjx58wYQKWZbF27dqE41999VWPHi+Vp556itmzZ/O3v/2Nk08+mcMOO4x58+ZRX1/fo8c78sgjCQQC3arxkMrWrVupqKjgiiuu4Nprr+XYY49l/vz5nW4N/fLLLxO+/+qrr7Asi9LS0u0ejxBDnQQHQnThsssuw+fzcd5553XYVldXV8f5559PVlYWl112WY8e//DDDwfg7rvvTjh+55139mzAKTgcjg6flp988kk2btzYo8f78Y9/TElJCT/72c/44osvOtzenU/msU/37e9z++23p7zPXXfdlfB97Of1ne98J+3rCiGSk2UFIbqw00478Y9//IPTTjuN3XbbjbPPPpuJEyeybt06/va3v1FTU8Njjz2WkPTWHXvvvTfHH388t99+O7W1tfGtjLE33J72YWjvyCOP5LrrrmPhwoXMnDmTjz/+mEceeaTTT+edKSgo4Omnn+aoo45i99135+STT2afffbB5XKxfv16nnzySSD5mn97eXl5HHzwwfzud78jEokwZswYFi9e3GE2pa21a9dy9NFHs2DBAt544w0efvhhTj31VHbfffcePR8hxDYSHAiRhhNOOIFddtmFm2++OR4QFBYWMnv2bH79618zffr07Xr8Bx98kJEjR/LYY4/x9NNPM2/ePB5//HGmTJmC1+vtlefw61//Gr/fz6OPPsrjjz/OXnvtxQsvvMAVV1zR48c84IADWLlyJbfddhsvvPACjz/+OJZlMWbMGA488EDuu+++lPUh2nv00Ue56KKLuOuuu9Bac9hhh/Hiiy+mrL/w+OOP89vf/pYrrrgCp9PJhRdeyO9///sePxchxDZKS1aOEBnpww8/ZM899+Thhx/mtNNO6+/hZIxrrrmGa6+9li1btjBixIj+Ho4Qg5LkHAiRAZI1Yrr99tsxDIODDz64H0YkhBjKZFlBiAzwu9/9jvfee4/Zs2fjdDp58cUXefHFFzn33HMZN25cfw9PCDHESHAgRAaYOXMmS5Ys4frrr6e5uZnx48dzzTXXcOWVV/b30IQQQ5DkHAghhBAigeQcCCGEECKBBAdCCCGESCDBgRBCCCESSHAghBBCiAQSHAghhBAigQQHQgghhEggwYEQ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", "text/plain": [ "
" ] @@ -196,7 +212,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "id": "dff7e9b8-912c-42df-95d0-be1c18b1ade1", "metadata": {}, "outputs": [ @@ -227,15 +243,16 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "id": "28908f07-452c-44c8-8f47-df7eca65060b", "metadata": {}, "outputs": [ { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "Transform parameters are the same, using existing data_dir: /home/mmasden/Development/topolift/challenge-icml-2024/datasets/graph/ZINC/ZINC/lifting/4095215502\n" + "Processing...\n", + "Done!\n" ] } ], @@ -257,7 +274,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "id": "93076374-315b-4c58-afbc-7b259d8151a7", "metadata": {}, "outputs": [ @@ -267,13 +284,13 @@ "Text(0.5, 0.98, 'Hypergraph constructed from Mapper lifting using default parameters.')" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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vzovXbqEVqtN1BKd3PnBxcVF32Xr7u6ORqMx+r1sDuaY+T3heexVSW1LipeXV6LPV0xMDLdv3060r7e3NyEhIYSEhPD8+XNq1KjByJEj0/0FlCNHDpycnIx+HGn5XAYGBnL8+HHq1Klj1Gvy+++/4+TkxPr16w2mBwkNDTXYL7XnruQYE9vrvjuN+Vy+yhRlpFZaXquk7vf19TXZucBc732LzPPVqVMnHj16RK9evXj+/LnBOKKEVq9ebTBm68CBA+zfv1/f958jRw5q1arFnDlzkjxB3Lt377WxlC9fHh8fH+bNm0dcXJx++5IlS9LUFWNra5vo19tvv/2WaMxZvPirUeKtWLGC27dvp2pcQ2o0b94cGxsbvv7660S/QOLjrFu3Lg4ODkybNs0g9gULFvDkyROjrtZ59RJjBwcHihcvjqqq+qtf45OEtFzBmC9fPmxtbRNNJTBz5kyDv319falRowY//vgj169fN7gv4WNMLoaWLVtia2vLqFGjEr2eqqrqH1/58uXx9fVl9uzZBnNwLVy40CwTt+bKlYvSpUuzaNEig/JPnTrFhg0beO+990xe5+t0796dESNGpDhVRfyPqlefy6lTpyZ7zA8//GDw9/Tp0wESfTb27t1rME7j33//5Y8//qBevXrY2tpia2tLq1at+P3335NMxlNzfjAHY97/r+Pv70+JEiX46aefeP78uX779u3bOXnyZKrKCAwMTPT5mjt3bqIWmlc/425ubhQsWNDgkn9j2draUrduXVavXs2tW7f02y9dusQ///zz2uPT8rls27YtN2/eZN68eYnKiYyMfO1cVra2tiiKYvD8hIWFJZrg08PDg+zZs7/23JUcV1fXNL9XXvfdaczn8lWmKCO10vJaJfV8mepckJr3/pMnTzh37lyau57N3vIFUKZMGUqUKKEfRFe2bNkk9ytYsCDVqlWjT58+REdHM3XqVHx8fPj888/1+/zwww9Uq1aN4OBgevToQYECBbh79y579+7lxo0biebZelX85aMfffQRtWvXpm3btoSFhbFw4UICAwNT/aujcePGfP3114SEhFClShVOnjzJkiVLkh3/4+3tTbVq1QgJCeHu3btMnTqVggUL0qNHj1TV9zoFCxbkyy+/ZPTo0VSvXp2WLVvi6OjIwYMH8ff3Z/z48fj6+vLFF18watQoGjRoQNOmTTl/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", "text/plain": [ "
" ] @@ -331,7 +348,7 @@ " color=\"w\",\n", " markerfacecolor=cmap(member / cmap_max),\n", " markersize=15,\n", - " label=\"{}\".f(member + n_edges),\n", + " label=f\"{member + n_edges}\",\n", " )\n", " for member in members[1].unique()\n", "]\n", @@ -353,7 +370,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "id": "ce4fad04-2fd4-43c5-9c35-f6e751513ad3", "metadata": {}, "outputs": [ @@ -383,7 +400,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "id": "1dc295a9-28a9-4534-8993-ce8bbea9ded7", "metadata": {}, "outputs": [], From f7147579438333fc85bf1e09ebffa2f6bb800a07 Mon Sep 17 00:00:00 2001 From: Marissa Masden Date: Wed, 10 Jul 2024 14:50:32 -0700 Subject: [PATCH 25/26] Fixed linting? --- tutorials/graph2hypergraph/mapper_lifting.ipynb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tutorials/graph2hypergraph/mapper_lifting.ipynb b/tutorials/graph2hypergraph/mapper_lifting.ipynb index 543c04b8..1c8bcb4d 100644 --- a/tutorials/graph2hypergraph/mapper_lifting.ipynb +++ b/tutorials/graph2hypergraph/mapper_lifting.ipynb @@ -285,11 +285,11 @@ "source": [ "# imports for visualization\n", "\n", - "import torch\n", - "import networkx as nx\n", - "from torch_geometric.utils import to_networkx\n", "import matplotlib.pyplot as plt\n", - "from matplotlib.pyplot import Line2D" + "import networkx as nx\n", + "import torch\n", + "from matplotlib.pyplot import Line2D\n", + "from torch_geometric.utils import to_networkx" ] }, { From 4d0019dd179a4b92c5801cfdfb98f994d7175304 Mon Sep 17 00:00:00 2001 From: Marissa Masden Date: Wed, 10 Jul 2024 15:04:47 -0700 Subject: [PATCH 26/26] Removed unintentially modified files --- modules/data/utils/utils.py | 16 +++++++-------- .../feature_liftings/feature_liftings.py | 4 +--- .../liftings/graph2hypergraph/knn_lifting.py | 2 -- tutorials/graph2hypergraph/knn_lifting.ipynb | 6 +++--- .../graph2simplicial/clique_lifting.ipynb | 20 ++++--------------- 5 files changed, 16 insertions(+), 32 deletions(-) diff --git a/modules/data/utils/utils.py b/modules/data/utils/utils.py index e024ab51..93ab5021 100755 --- a/modules/data/utils/utils.py +++ b/modules/data/utils/utils.py @@ -50,16 +50,16 @@ def get_complex_connectivity(complex, max_rank, signed=False): ) except ValueError: # noqa: PERF203 if connectivity_info == "incidence": - connectivity[ - f"{connectivity_info}_{rank_idx}" - ] = generate_zero_sparse_connectivity( - m=practical_shape[rank_idx - 1], n=practical_shape[rank_idx] + connectivity[f"{connectivity_info}_{rank_idx}"] = ( + generate_zero_sparse_connectivity( + m=practical_shape[rank_idx - 1], n=practical_shape[rank_idx] + ) ) else: - connectivity[ - f"{connectivity_info}_{rank_idx}" - ] = generate_zero_sparse_connectivity( - m=practical_shape[rank_idx], n=practical_shape[rank_idx] + connectivity[f"{connectivity_info}_{rank_idx}"] = ( + generate_zero_sparse_connectivity( + m=practical_shape[rank_idx], n=practical_shape[rank_idx] + ) ) connectivity["shape"] = practical_shape return connectivity diff --git a/modules/transforms/feature_liftings/feature_liftings.py b/modules/transforms/feature_liftings/feature_liftings.py index ae8fd287..687f9f1e 100644 --- a/modules/transforms/feature_liftings/feature_liftings.py +++ b/modules/transforms/feature_liftings/feature_liftings.py @@ -28,9 +28,7 @@ def lift_features( ------- torch_geometric.data.Data | dict The lifted data.""" - keys = sorted( - [key.split("_")[1] for key in data.keys() if "incidence" in key] - ) # noqa : SIM118 + keys = sorted([key.split("_")[1] for key in data.keys() if "incidence" in key]) # noqa : SIM118 for elem in keys: if f"x_{elem}" not in data: idx_to_project = 0 if elem == "hyperedges" else int(elem) - 1 diff --git a/modules/transforms/liftings/graph2hypergraph/knn_lifting.py b/modules/transforms/liftings/graph2hypergraph/knn_lifting.py index 7fb003bb..4ee78866 100755 --- a/modules/transforms/liftings/graph2hypergraph/knn_lifting.py +++ b/modules/transforms/liftings/graph2hypergraph/knn_lifting.py @@ -67,9 +67,7 @@ def lift_topology(self, data: torch_geometric.data.Data) -> dict: data_lifted.edge_index[:, idx] = torch.tensor([[i, i]]).T incidence_1[data_lifted.edge_index[1], data_lifted.edge_index[0]] = 1 - incidence_1 = torch.Tensor(incidence_1).to_sparse_coo() - return { "incidence_hyperedges": incidence_1, "num_hyperedges": num_hyperedges, diff --git a/tutorials/graph2hypergraph/knn_lifting.ipynb b/tutorials/graph2hypergraph/knn_lifting.ipynb index 1cd66433..40bf15b9 100644 --- a/tutorials/graph2hypergraph/knn_lifting.ipynb +++ b/tutorials/graph2hypergraph/knn_lifting.ipynb @@ -325,7 +325,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "venv_topox", "language": "python", "name": "python3" }, @@ -339,9 +339,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.11.3" } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 2 } diff --git a/tutorials/graph2simplicial/clique_lifting.ipynb b/tutorials/graph2simplicial/clique_lifting.ipynb index b488ade3..4d551516 100644 --- a/tutorials/graph2simplicial/clique_lifting.ipynb +++ b/tutorials/graph2simplicial/clique_lifting.ipynb @@ -50,19 +50,7 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [ - { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'modules'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m/tmp/ipykernel_50472/3754984083.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun_line_magic\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'load_ext'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'autoreload'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun_line_magic\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'autoreload'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'2'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mmodules\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloaders\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mGraphLoader\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmodules\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpreprocess\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpreprocessor\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mPreProcessor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m from modules.utils.utils import (\n", - "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'modules'" - ] - } - ], + "outputs": [], "source": [ "# With this cell any imported module is reloaded before each cell execution\n", "%load_ext autoreload\n", @@ -372,7 +360,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "venv_topox", "language": "python", "name": "python3" }, @@ -386,9 +374,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.11.3" } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 2 }