{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Basic Tutorial: `MergeTree` class\n", "\n", "This notebook walks through the basic functionality of the `MergeTree` class." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from cereeberus import MergeTree\n", "from cereeberus.data.ex_mergetrees import randomMergeTree" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A merge tree is a tree with a function for which any vertex (with the exception of the root) has exactly one neighbor of higher function value. The root, which is this module is always called `v_inf`, has function value $\\infty$, given by `np.inf`. An empty merge tree can be initizlied with \n", "```\n", "MergeTree()\n", "```\n", "However, we will run this introduction by working with a random merge tree. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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IoU0evRokpOTARg1ahRGwOhivZ4RmPPaXKVFgdYKcYf8zjUuIiJSFrnin4H0r8hrrZCCsYJ3WyxhNjees2Dye/9Wj4WIiIgbGUH/B0YAkN91QPLDghHyuhvPV3w0xkJERMSNMp3BXEx7DjPx/3I8JiTIgr9//n+3N4JexPAq3W+DXKVgISIi4kYbNmzg5pvvyvWYWe+EM250PocDBD6GETjWDZWVDAULERERN2rbti2rVq0CwMzYgpkyC8wMfvumSMumeU1yZQWsGMF/xgiIKrZai4MGb4qIiBQj03kBM/FVsH/FlXEXub2KagWc4NMdI/hlDK+6JVNkPuT3/q0eCxERkWJkWKthVH4X03kGMzUa7N+D4zDg+M1RFrDWB98eGAGjMbwaeajaotNbISIiIiXAsNbGEvQslqrLMMJ3kOq/kIkvVuNcxiyM8B1Yqq3EEvx/ZTpUgIKFiIhIiTMMH15/w8asuRt4+rn3MQw/T5fkNgoWIiIiJSw1NZWpU6cCsGTJEs6dO+fhitxHwUJERKSETZs2jYSEBACcTieTJ0/2cEXuo7dCRERESlBqaioRERFcunQpa5uvry/Hjx+nRo0aHqwsd5rSW0REpBSaNm1atlABkJmZWW56LRQsREREStCcOXOu2eZyua67vSzSPBYiIiIlaMGCBRw4cICzZ8/y8MMP8+qrr9K6dWvq1i09k2EVhYKFiIhICWratClNmzblyJEjAHTv3p3evXt7tig30qMQERERcRsFCxEREXEbBQsRERFxGwULERERcRsFCxEREXEbBQsRERFxGwULERERcRsFCxEREXEbBQsRERFxGwULERERcRsFCxEREXEbBQsRERFxGwULERERcRsFCxEREXEbBQsRERFxGwULERERcRsFCxEREXEbBQsRERFxGwULERERcRsFCxEREXEbBQsRERFxGwULERERcRsFCxEREXEbBQsRERFxGwULERERcRsFCxEREXEbBQsRERFxGwULERERcRsFCxEREXEbBQsRERFxGwULERERcRsFCxEREXEbBQsRERFxGwULERERcRsFCxEREXEbBQsRERFxGy9PFyAiIlJRXM64xIGkvZxIPcbR5MMM/bA/3/l/SczJ49QLiKRJUHOq+YZ7uswiUbAQEREpZkeSD7Lq/Jf8Er8dExOrYcVpOqnRrjrnOUtcXCw/mk4A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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# The default settings for the draw command show the names on each node. \n", "MT = randomMergeTree(10, seed = 21)\n", "MT.draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As with `ReebGraph`s, we can always manually mess with the drawing locations if we want. Drawing is done by taking a spring layout from networkx, and then forcing the $y$-coordinate to be the same as the function value of the node. Here, we are just making the top string of vertices aligned over vertex 7." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The position of node 7 is (-0.11660480784942846, 4)\n", "The position of node 8 is (0.08886735396991338, 5)\n", "The new position of node 8 is (-0.11660480784942846, 5)\n" ] }, { "data": { "image/png": "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GBqgbIF2xGBBRERkBz7+3pi/bTYee+chqNSqaoeh/plKLUIQBDz40ih8duhdBIcF2blSZbHzJhERkZ1lnL+GNZ9uwLqvtqC0qAyiKEAQRciyDEEQIMsyJJMEN40a8YkDMfa5EWjZJdLRZVdi7fObwYKIiKielJXocebAeZw9dBFXTl2FQW+A2k2NsDbN0KZnS3To3RreWm9Hl1kla5/fNs9jQURERLXj4aVB17s7oevdnRxdit2wjwUREREphsGCiIiIFMNgQURERIphsCAiIiLFMFgQERGRYhgsiIiISDEMFkRERKQYBgsiIiJSDIMFERERKYbBgoiIiBTDYEFERESKYbAgIiIixTBYEBERkWIYLIiIiEgxDBZERESkGAYLIiIiUgyDBRERESlGXd83lGUZAKDT6er71kRERFRLt57bt57jltR7sCgsLAQARERE1PetiYiIqI4KCwuh1Wot7hfkmqKHwiRJQmZmJnx9fSEIQn3emoiIiGpJlmUUFhaiefPmEEXLPSnqPVgQERGR82LnTSIiIlIMgwUREREphsGCiIiIFMNgQURERIphsCAiIiLFMFgQERGRYhgsiIiISDH/H36+FMu9/JujAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(f\"The position of node 7 is {MT.pos_f[7]}\")\n", "print(f\"The position of node 8 is {MT.pos_f[8]}\")\n", "\n", "mid_x = MT.pos_f[7][0]\n", "for v in {8,9,'v_inf'}:\n", " MT.pos_f[v] = (mid_x, MT.pos_f[v][1])\n", "print(f\"The new position of node 8 is {MT.pos_f[8]}\")\n", "\n", "MT.draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As with Reeb Graphs, we can add vertices and edges. Notice that until we actually add all necessary edges and vertices it doesn't satisfy the requirements of a merge tree. \n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "MT.add_node('leaf_1', 1)\n", "MT.add_edge('leaf_1', 4)\n", "\n", "# Resetting positions just to get the drawing to look nicer\n", "MT.set_pos_from_f(seed = 13)\n", "MT.draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, if we try to add an edge which creates a loop, the code will throw an error and not allow the edge to be added. For instance, the command \n", "\n", "```\n", "MT.add_edge(3,8)\n", "```\n", "\n", "will throw the error\n", "\n", "\n", "```\n", "ValueError: Edge ((3, 8)) cannot be added. Adding the edge will create a loop in the graph.\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can get the list of leaves as well as find the least common ancestor of any pair of vertices. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The leaves are [5, 1, 0, 'leaf_1'].\n", "The LCA of vertices 5 and 6 is vertex 7.\n", "The LCA of vertices 0 and 1 is vertex 6.\n" ] } ], "source": [ "print(f\"The leaves are {MT.get_leaves()}.\")\n", "print(f\"The LCA of vertices 5 and 6 is vertex {MT.LCA(5,6)}.\")\n", "print(f\"The LCA of vertices 0 and 1 is vertex {MT.LCA(0,1)}.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The merge trees inherit much of the structure from the `ReebGraph` class. One important addition in the merge tree is the ability to work with labels. This is stored as a dictionary in the class, where `MT.labels[key] = vertex`. Here, we'll give automatic labels to all the leaves of the tree, and add in a few more for good measure. Note that if we add a label to an edge at a function value, we will subdivide the edge to add a vertex before giving it a label. " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{0: 5, 1: 1, 2: 0, 3: 'leaf_1', 4: 6, 17: 6, 37: 'hen'}\n" ] } ], "source": [ "MT.label_all_leaves()\n", "MT.add_label(vertex = 6, label = None)\n", "# Note that this adds two labels to the same vertex, which is allowed. \n", "MT.add_label(vertex = 6, label = 17)\n", "MT.add_label_edge(u=5, v= 4, w = 'hen', f_w = 2.4, label = 37)\n", "print(MT.labels)\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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HWncuHFFl2YLBQsREZFy1KZNG9q0acPu3bsB6NevH4MGDarYomykWyEiIiJiGwULERERsY2ChYiIiNhGwUJERERso2AhIiIitlGwEBEREdsoWIiIiIhtFCxERETENgoWIiIiYhsFCxEREbGNgoWIiIjYRsFCREREbKNgISIiIrZRsBARERHbKFiIiIiIbRQsRERExDYKFiIiImIbBQsRERGxjYKFiIiI2EbBQkRERGyjYCEiIiK2UbAQERER2yhYiIiIiG0ULERERMQ2ChYiIiJiGwULERERsY2ChYiIiNhGwUJERERso2AhIiIitlGwEBEREdsoWIiIiIhtFCxERETENgoWIiIiYhsFCxEREbGNgoWIiIjYRsFCREREbONX0QWIiIj4irSCVLZnbWF/7l72ZO/iincuYmHwNyQe2EeTkKa0DmtHncDoii6zTBQsREREvGx39g5+OPYN69PXYGHhMBy4LBf1OtflGEdITk5iieUCoG1YLBdGX0psRKcKrvr8KFiIiIh4yQnXCT47NJslyfMxMbGwAHD9FiJO+v33O7K2si1rM92ienFd45sJ9Qsr15rLSsFCRETEC9IKUnl5x2SO5x8DwI27ROedfN/atJXszNrG/a0fpUFwjNfqtJsmb4qIiNgsszCDf25/luT8JM8oRWm5cZPtzOJf25/l2ImjNlfoPQoWIiIiNrIsi3f3TiOtILXEoxRn4sZNniuPt/a8hsty2lShdylYiIiI2GhZyk9szdpU5lBxkhs3h/MO8t2RL21pz9sULERERGzispx8dni2V9r+9ugX5DpzvNK2nRQsREREbLIufQ3ZziyvtO2yXCxLWeqVtu1U6mBx+PBhbrjhBmrVqkVwcDAdO3Zk1apV3qhNRESkSlmR8jOGl/5mt7D4NeUnr7Rtp1I9bpqWlka/fv0YPHgw3377LXXq1GHnzp1ERUV5qz4REZEqY0/OLiyb5lYU53DeQQrdhfib/l7ro6xKFSxeeOEFGjVqxLvvvut5rVmzZrYXJSIiUtVkFWaS5cz0ah9u3Bw5cZjGIU292k9ZlGq85osvvqB79+78+c9/pm7dunTp0oW33377rOfk5+eTmZl5ypeIiEh1k+PKLp9+nOXTz/kqVbDYs2cPU6dOpVWrVsybN4877riDe++9lxkzZpzxnMmTJxMREeH5atSoUZmLFhERqXyM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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "MT.set_pos_from_f(seed = 13)\n", "MT.draw(with_labels = True, label_type=\"labels\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also compute the matrix giving the function value of LCA, either by using the internally defined labels, or by using all leaves. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012341737
02.04.04.03.04.04.02.4
14.01.02.04.02.02.04.0
24.02.00.04.02.02.04.0
33.04.04.01.04.04.03.0
44.02.02.04.02.02.04.0
174.02.02.04.02.02.04.0
372.44.04.03.04.04.02.4
\n", "
" ], "text/plain": [ " 0 1 2 3 4 17 37\n", "0 2.0 4.0 4.0 3.0 4.0 4.0 2.4\n", "1 4.0 1.0 2.0 4.0 2.0 2.0 4.0\n", "2 4.0 2.0 0.0 4.0 2.0 2.0 4.0\n", "3 3.0 4.0 4.0 1.0 4.0 4.0 3.0\n", "4 4.0 2.0 2.0 4.0 2.0 2.0 4.0\n", "17 4.0 2.0 2.0 4.0 2.0 2.0 4.0\n", "37 2.4 4.0 4.0 3.0 4.0 4.0 2.4" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The matrix of LCA for the leabels. Here we ask that it be returned as a pandas data fram so that its easier to read the row and column info. If `return_as_df` is false, it will return just a matrix. \n", "# Here columns are given by the label key.\n", "MT.LCA_matrix(type = 'labels', return_as_df = True)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
510leaf_1
52.04.04.03.0
14.01.02.04.0
04.02.00.04.0
leaf_13.04.04.01.0
\n", "
" ], "text/plain": [ " 5 1 0 leaf_1\n", "5 2.0 4.0 4.0 3.0\n", "1 4.0 1.0 2.0 4.0\n", "0 4.0 2.0 0.0 4.0\n", "leaf_1 3.0 4.0 4.0 1.0" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The matrix of LCA for the leaf set. Here columns are given by the leaf name.\n", "MT.LCA_matrix(type = 'leaves', return_as_df = True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Old stuff down here, to be deleted...." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also create random merge trees and plot them" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from cereeberus.data.randomMergeTrees import randomMerge\n", "from cereeberus.reeb.merge import mergeTree\n", "R = randomMerge(10)\n", "M = mergeTree(R.G, R.fx)\n", "M.plot_reeb()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### You can also check if a graph is a merge tree.\n", "\n", "This works for both Reeb graphs and Networkx graphs, and it part of the Merge function already" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from cereeberus.compute.merge import isMerge\n", "### Reeb Graph\n", "isMerge(R,R.fx)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "### Networkx Graph\n", "isMerge(R.G,R.fx)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### To compute a merge tree from a Reeb Graph, we need to first identify any isolates in the graph (nodes with degree 0) and remove them as they will not be going into the merge tree. Looking at a Reeb graph with isolates:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "jm = reeb.juggling_man()\n", "jm.plot_reeb()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Then we can remove isolates and plot" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "jm_im = degree.remove_isolates(jm)\n", "jm_im.plot_reeb()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We then import the `computemergetree` function, and provide a filtration." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from cereeberus.compute.merge import computeMergeTree" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "cmt = computeMergeTree(jm_im, verbose=False, precision=1, filter=False)\n", "cmt.plot_reeb()\n", "cmt.fx" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also compute distances between networkx graphs, reeb graphs, and merge trees. The first example is the graph edit distance, compliments of the networkx package implementation." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from cereeberus.compute import distance\n", "distance.edit(cmt, jm_im)" ] } ], "metadata": { "kernelspec": { "display_name": "base", "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.11.7" } }, "nbformat": 4, "nbformat_minor": 2 }