{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Visualization of the dataset" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "# Remove this line if installing via pip. \n", "import sys \n", "sys.path.insert(0,'../')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's first load all the required packages. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Visualization packages\n", "import pandas as pd\n", "import seaborn as sns\n", "\n", "# Load all required packages. \n", "from torch_geometric.transforms import Compose, FaceToEdge\n", "\n", "# Load the mantra dataset\n", "from mantra.datasets import ManifoldTriangulations\n", "from mantra.transforms import NodeIndex, RandomNodeFeatures" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We create the dataset with three transforms.\n", "\n", "The MANTRA dataset consists of triangulations with indices starting at $1$. \n", "Since `torch_geometric` is expecting $0$-indexed triangulations, we transform \n", "the dataset to a $0$-indexed dataset using the `NodeIndex` transform.\n", "The `FaceToEdge` transform adds the edge indices given the triangulation.\n", "\n", "For vizualisation and GNN architectures, we add random normal node feature \n", "to each vertex in the manifold.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Instantiate the dataset. Following the `torch-geometric` API, we download the \n", "# dataset into the root directory. \n", "dataset = ManifoldTriangulations(root=\"./data\", manifold=\"2\", version=\"latest\",\n", " transform=Compose([\n", " NodeIndex(),\n", " RandomNodeFeatures(),\n", " FaceToEdge(remove_faces=False),\n", " ]\n", " ),\n", " force_reload=True,\n", " )\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us now have a look at the dataset and inspect the attributes each manifold has." ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Data(id='manifold_2_4_1', triangulation=[4], dimension=[1], n_vertices=[1], betti_numbers=[3], torsion_coefficients=[3], name='S^2', genus=[1], orientable=[1], face=[3, 4], x=[4, 8], edge_index=[2, 12])\n" ] } ], "source": [ "manifold = dataset[0]\n", "print(manifold)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([4])\n", "tensor([2])\n", "tensor([[0.6607, 0.7624, 0.4432, 0.9999, 0.1373, 0.2800, 0.4610, 0.5221],\n", " [0.6359, 0.5237, 0.2403, 0.9161, 0.2283, 0.5222, 0.8331, 0.9862],\n", " [0.8414, 0.6905, 0.4954, 0.7668, 0.6087, 0.4721, 0.9083, 0.2066],\n", " [0.4898, 0.8760, 0.3770, 0.3564, 0.6845, 0.6733, 0.6590, 0.0375]])\n", "tensor([[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3],\n", " [1, 2, 3, 0, 2, 3, 0, 1, 3, 0, 1, 2]])\n", "tensor([[0, 0, 0, 1],\n", " [1, 1, 2, 2],\n", " [2, 3, 3, 3]])\n" ] } ], "source": [ "# The number of vertices it has.\n", "print(manifold.n_vertices)\n", "\n", "# The dimension of the submanifold.\n", "print(manifold.dimension)\n", "\n", "# Vertex coordinates.\n", "print(manifold.x)\n", "\n", "# Edge indices\n", "print(manifold.edge_index)\n", "\n", "# Triangles (or faces)\n", "print(manifold.face)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For prediction and regression tasks, MANTRA has the following (topological) attributes available." ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 0, 1]\n", "tensor([True])\n", "S^2\n" ] } ], "source": [ "# The Betti numbers of the manifold. \n", "print(manifold.betti_numbers)\n", "\n", "# Whether the manifold is orientable or not. \n", "print(manifold.orientable)\n", "\n", "# The name of the manifold.\n", "print(manifold.name)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Betti numbers" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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RkOHDtXLL7+sjIwM95rp06fr5MmTWrx4sRwOh5KSklRcXHzJjbgAAMAaRgXLrl27PL4PDg5WQUGBCgoKLnvM8OHDL/mTz8XuvvtuffLJJ1dck5ub+634ExAAADciy9+HBQAA4JsQLAAAwHgECwAAMB7BAgAAjEewAAAA4xEsAADAeAQLAAAwHsECAACMR7AAAADjESwAAMB4BAsAADAewQIAAIxHsAAAAOMRLAAAwHgECwAAMB7BAgAAjEewAAAA4xEsAADAeAQLAAAwHsECAACMR7AAAADjESwAAMB4BAsAADAewQIAAIxHsAAAAOMRLAAAwHgECwAAMB7BAgAAjEewAAAA4xEsAADAeAQLAAAwHsECAACMR7AAAADjESwAAMB4BAsAADAewQIAAIxHsAAAAOMRLAAAwHgECwAAMB7BAgAAjEewAAAA4xEsAADAeAQLAAAwHsECAACMR7AAAADjESwAAMB4BAsAADAewQIAAIxHsAAAAOMRLAAAwHgECwAAMB7BAgAAjEewAAAA4xEsAADAeAQLAAAwHsECAACMR7AAAADjESwAAMB4BAsAADAewQIAAIxHsAAAAOMRLAAAwHgECwAAMB7BAgAAjEewAAAA4xEsAADAeAQLAAAwHsECAACMR7AAAADjESwAAMB4BAsAADAewQIAAIxHsAAAAOMRLAAAwHgECwAAMB7BAgAAjEewAAAA4xEsAADAeAQLAAAwHsECAACMR7AAAADjESwAAMB4BAsAADAewQIAAIxHsAAAAOMRLAAAwHgECwAAMJ6lwbJu3TqNHTtWYWFhCgsLU1pamt577z33/rNnzyonJ0eDBg1S3759NW3aNNXW1nqcw263KzMzU6GhoYqMjNSTTz6p8+fPe6zZtWuXxo0bp6CgII0YMUJFRUWXzFJQUKCYmBgFBwcrNTVV+/bt65ZrBgAA3rM0WIYOHarnnntOFRUVOnDggCZNmqT7779fR44ckSQtWLBA77zzjt544w3t3r1bX3zxhR544AH38W1tbcrMzFRra6v27NmjV199VUVFRVq8eLF7zbFjx5SZmamJEyeqsrJS8+fP12OPPaYdO3a412zZskV5eXlasmSJDh48qMTERGVkZKiuru76/TAAAMBlWRos9913n+69916NHDlSN998s375y1+qb9++2rt3r+rr6/XKK69o5cqVmjRp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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "betti_numbers_df = pd.DataFrame(dataset.betti_numbers)\n", "sns.displot(betti_numbers_df,multiple=\"dodge\",discrete=True,shrink=.8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The plot above describes the distribution of Betti numbers for all manifolds in the dataset.\n", "On the vertical axis we have the counts, and on the horizontal axis the value of a given \n", "betti number (e.g. $\\beta_1 = 0$,$\\beta_1 = 1$, ..., $\\beta_1 = n$). \n", "\n", "Since all manifolds consist of one connected, $\\beta_0=1$ for all, as can be seen in the histogram. \n", "For the first betti numbers, the values are more evenly spread out, with most having a \n", "values between $\\beta_1=0$ and $\\beta_1=5$. Lastly, second Betti number has values between \n", "$\\beta_2 = 0$ or $\\beta_1=1$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Orientability\n", "\n", "Orientability is a binary prediction task that purely depends on the triangulations. Only a \n", "fraction of the triangulations are orientable, making this a challenging task." ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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gB89AstF1qxZo6SkJM2ePVs7duxQr1695HK5VFJS4uvWAAD4USOwXGThwoWaNGmSxo8fr6ioKC1btkwNGzbU8uXLfd0aAAA/avV83YApysvLlZeXp+TkZHufv7+/YmNjlZube0l9WVmZysrK7MelpaWSJI/Hc0N9nDlzRpJ05IsClZ375obmAq7VsSOFkv7979+N/jt8M/BzAV+ozZ+LJk2ayM/Przba+tHysyzL8nUTJvjqq6/0k5/8RFu3bpXT6bT3z5gxQ5s3b9a2bdu86ufMmaO5c+fWdZsAgO+h0tJSORwOX7fxvcYZlhpKTk5WUlKS/biyslInT57ULbfc8r1M0R6PR23atNHhw4e/tz9UrMEcP4R1/BDWIP0w1vFDWEOTJk183cL3HoHl/wkLC1NAQICKi4u99hcXFysiIuKS+qCgIAUFBXntCw0NvZkt1gmHw/G9/Q9CFdZgjh/COn4Ia5B+GOv4IawBNcdFt/9PYGCgoqOjlZ2dbe+rrKxUdna210dEAACg7nGG5SJJSUmKj49Xv3791L9/fy1evFhnz57V+PHjfd0aAAA/agSWi4wePVrHjh1TSkqK3G63evfurYyMDIWHh/u6tZsuKChIs2fPvuRjru8T1mCOH8I6fghrkH4Y6/ghrAE3jruEAACA8biGBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYfiROnjypsWPHyuFwKDQ0VBMmTLB/P8vl6p944gl16dJFDRo0UNu2bfXrX//a/p1JVfz8/C7ZVq9eXWt9p6amqn379goODlZMTIy2b99+xfp169apa9euCg4OVo8ePbRhwwavccuylJKSopYtW6pBgwaKjY3VF198UWv9Vud61vDnP/9Zd911l5o2baqmTZsqNjb2kvpHH330ktd86NChxqwhLS3tkv6Cg4O9anzxPkjXt46BAwdW++93XFycXVPX78WWLVt0//33q1WrVvLz89Pbb7991efk5OSob9++CgoKUqdOnZSWlnZJzfX+nN2I613Dm2++qfvuu0/NmzeXw+GQ0+lUZmamV82cOXMueR+6du1609YAH7HwozB06FCrV69e1ieffGJ9+OGHVqdOnayHHnrosvW7d++2Ro4cab377rvWwYMHrezsbKtz587WqFGjvOokWStWrLCOHj1qb+fOnauVnlevXm0FBgZay5cvtwoKCqxJkyZZoaGhVnFxcbX1H3/8sRUQEGAtWLDA2rt3rzVr1iyrfv361u7du+2aZ5991goJCbHefvtt6/PPP7d+9rOfWZGRkbXW842u4eGHH7ZSU1OtnTt3Wvv27bMeffRRKyQkxDpy5IhdEx8fbw0dOtTrNT958uRN6b8ma1ixYoXlcDi8+nO73V41df0+1GQdJ06c8FrDnj17rICAAGvFihV2TV2/Fxs2bLB+97vfWW+++aYlyXrrrbeuWP/ll19aDRs2tJKSkqy9e/daL730khUQEGBlZGTYNdf7utT1Gp588knrueees7Zv32797//+r5WcnGzVr1/f2rFjh10ze/Zsq3v37l7vw7Fjx25K//AdAsuPwN69ey1J1qeffmrve++99yw/Pz/rX//61zXPs3btWiswMNA6f/68ve9a/oNTU/3797cSEhLsxxUVFVarVq2s+fPnV1v/i1/8woqLi/PaFxMTY/3qV7+yLMuyKisrrYiICOv555+3x0+dOmUFBQVZb7zxxk1YwfWv4bsuXLhgNWnSxHr99dftffHx8dYDDzxQ261e1vWuYcWKFVZISMhl5/PF+2BZN/5eLFq0yGrSpIl15swZe19dvxcXu5afvRkzZljdu3f32jd69GjL5XLZj2/0dbkRNf3vR1RUlDV37lz78ezZs61evXrVXmMwEh8J/Qjk5uYqNDRU/fr1s/fFxsbK39//kt9CfSVVv220Xj3v7xtMSEhQWFiY+vfvr+XLl8uqha/2KS8vV15enmJjY+19/v7+io2NVW5ubrXPyc3N9aqXJJfLZdcXFhbK7XZ71YSEhCgmJuayc9b1Gr7rm2++0fnz59WsWTOv/Tk5OWrRooW6dOmiKVOm6MSJE7Xae5WaruHMmTNq166d2rRpowceeEAFBQX2WF2/Dzeyjov95S9/0ZgxY9SoUSOv/XX1XtTE1X4mauN1qWuVlZU6ffr0JT8TX3zxhVq1aqUOHTpo7NixKioq8lGHuFkILD8CbrdbLVq08NpXr149NWvWTG63+5rmOH78uJ555hk9/vjjXvvnzZuntWvXKisrS6NGjdJ//dd/6aWXXrrhno8fP66KiopLvmU4PDz8sj273e4r1lf983rmvBE1WcN3zZw5U61atfL6C2Xo0KH661//quzsbD333HPavHmzhg0bpoqKilrtX6rZGrp06aLly5frnXfe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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "orientable_df = pd.DataFrame(dataset.orientable)\n", "sns.displot(orientable_df,discrete=True,shrink=.8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Name \n", "\n", "The name is the mathimatical name (such as a Torus, Sphere or Klein Bottle) of the manifold if it has one.\n", "Manifolds without a name are represented by the empty string `\"\"`. The task is to predict the name of the \n", "manifold given its triangulation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "image/png": "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vXXr1g2eSefr6/uLz6m76qqrdPDgQQUHBzc4zrPdA4WWg/9VbcG+/fZbjRw5Uv/v//0/7d69W8XFxdqwYYMWL16sMWPG/Or5tm3bpvj4eN13330aN26cHA6HHA6Hvvvuu/PQfctz6623ysfHRytXrmzyuesDU9euXfXEE0+ovLzcfH9w/j322GN66KGH9Pzzz6t79+7muf+lj7Oak/DwcOXl5amsrEyxsbENnhUmST179tSkSZM0efJkvfrqqyouLtauXbuUlpbW4DEN56p169a69957tXPnThUWFmrKlCkaOnSohgwZIkmaO3euMjIytGrVKh08eFBPPvmkXn31VfOREtIPHwvm5ubK4XDo6NGj5rbi4mIVFRXpm2++cXm0R71JkyapY8eOGjNmjN555x0VFxcrLy9P9913n7766qsmPU54FkJTCxYYGKjo6GgtXbpUw4YNU9++ffXQQw9p2rRpWrFixa+eb+3atTp+/LjS0tLUuXNnc7nlllvOQ/ctT6tWrTRz5kwtXry40Vf6fkpOTo4+++wz5ebmqkuXLi7vD86/VatWqaamRuPHj3c590888YS7W2tSXbp0UV5enr755pufDE5r1qzR5MmTNWfOHPXq1Utjx47VBx98oK5duzZpL23atFFKSopuv/12XXPNNQoMDNT69evN8bFjx2r58uV64okndMUVV+iZZ57RmjVrNHz4cLNmyZIlysnJUXh4uK688kpJP9wHGhcXpxEjRqhTp076xz/+cdZ9b9++XV27dtUtt9yiPn36KDExUSdPnpTNZmvS44Rn8TIMw3B3EwAAAJ6OK00AAAAWEJoAAAAsIDQBAABYQGgCAACwgNAEAABgAaEJAADAAkITAACABYQmAAAACwhNAAAAFhCaAAAALCA0AQAAWEBoAtCiDR8+XPfdd5/mzZunDh06KDQ0VIsWLTLHn3zySfXr109t27ZVeHi47rnnHh07dswcz8jIUPv27ZWZmalevXqpTZs2Gj9+vI4fP661a9eqe/fuuuSSS3TfffeptrbWfF11dbUeeOAB/eY3v1Hbtm0VHR2tvLy8C3jkAJoaoQlAi7d27Vq1bdtWO3fu1OLFi/Xwww8rJydHkuTt7a2nnnpK+/bt09q1a7V161bNmzfP5fXHjx/XU089pZdfflnZ2dnKy8vTzTffrDfeeENvvPGGXnzxRT3zzDPauHGj+ZqZM2eqoKBAL7/8snbv3q1bb71VcXFxOnjw4AU9dgBNx8swDMPdTQDA+TJ8+HDV1tbqnXfeMbcNGTJEI0eO1KOPPtqgfuPGjZo+fbq++eYbST9caZo6dao+++wzXX755ZKk6dOn68UXX1RpaakCAwMlSXFxcerevbvS09NVUlKiyy67TCUlJQoLCzPnjomJ0ZAhQ/TXv/71fB4ygPOklbsbAIDzrX///i7rnTt3VllZmSTp7bffVlpamvbv3y+n06nTp0/r5MmTOn78uNq0aSNJatOmjRmYJCkkJETdu3c3A1P9tvo59+zZo9raWvXs2dNlv9XV1br00kvPyzECOP8ITQBavNatW7use3l5qa6uTl988YVuvPFGzZgxQ4888og6dOigd999V4mJiaqpqTFD09le/1NzStKxY8fk4+OjwsJC+fj4uNSdGbQANC+EJgAXrcLCQtXV1WnJkiXy9v7hFs9XXnnlnOe98sorVVtbq7KyMl177bXnPB8Az8CN4AAuWhERETp16pT+9re/6fPPP9eLL76o9PT0c563Z8+emjRpkiZPnqxXX31VxcXF2rVrl9LS0pSVldUEnQNwB0ITgIvWgAED9OSTT+qxxx5T37599dJLLyktLa1J5l6zZo0mT56sOXPmqFevXho7dqw++OADde3atUnmB3Dh8e05AAAAC7jSBAAAYAGhCQAAwAJCEwAAgAWEJgAAAAsITQAAABYQmgAAACwgNAEAAFhAaAIAALCA0AQAAGABoQkAAMACQhMAAIAF/x/BZvDYj/v+uAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "name_df = pd.DataFrame(dataset.name,columns=['name'])\n", "sns.countplot(name_df,x=\"name\");" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.10.12" } }, "nbformat": 4, "nbformat_minor": 2 }