{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Conversions\n", "\n", "Convert between core hypergraph types by dropping direction, time, or layer information.\n", "Duplicate hyperedges are merged by **summing weights**. Edge metadata is merged\n", "by accumulating conflicting values into lists while preserving order.\n", "\n", "**Weighted by default:** core classes are weighted by default; unweighted graphs\n", "must be created with `weighted=False`.\n" ], "id": "0fbe8723" }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. admonition:: You will learn\n", "\n", " Convert between hypergraph types while preserving weights and metadata.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overview\n", "\n", "- Convert between hypergraph types while preserving weights and metadata.\n", "- Verify conversion outcomes with quick sanity checks and visuals.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup\n" ] }, { "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": [], "source": [ "import matplotlib as mpl\n", "\n", "mpl.rcParams.update({\n", " \"figure.figsize\": (6, 4),\n", " \"figure.dpi\": 120,\n", " \"savefig.dpi\": 150,\n", "})\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import hypergraphx as hgx\n" ], "id": "8d3848b8" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Directed to Hypergraph\n", "Direction is dropped by merging sources and targets. If two directed edges map\n", "to the same undirected hyperedge, their weights are summed and metadata merged.\n" ], "id": "9a97478f" }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([(0, 1, 2)], 5.0, {'kind': ['a', 'b'], 'tag': 1})" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dh = hgx.DirectedHypergraph(weighted=True)\n", "dh.add_edge(((0, 1), (2,)), weight=2.0, metadata={\"kind\": \"a\"})\n", "dh.add_edge(((2,), (0, 1)), weight=3.0, metadata={\"kind\": \"b\", \"tag\": 1})\n", "hg = dh.to_hypergraph()\n", "hg.get_edges(), hg.get_weight((0, 1, 2)), hg.get_edge_metadata((0, 1, 2))\n" ], "id": "008b5405" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Temporal to Hypergraph\n", "Time is dropped. Multiple events of the same hyperedge across time are merged.\n" ], "id": "0f85a427" }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([(0, 1), (1, 2)], 3.0, {'t': [1, 2]})" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th = hgx.TemporalHypergraph(weighted=True)\n", "th.add_edge((0, 1), time=1, weight=1.0, metadata={\"t\": 1})\n", "th.add_edge((0, 1), time=2, weight=2.0, metadata={\"t\": 2})\n", "th.add_edge((1, 2), time=3, weight=3.0)\n", "hg = th.to_hypergraph()\n", "hg.get_edges(), hg.get_weight((0, 1)), hg.get_edge_metadata((0, 1))\n" ], "id": "18fad557" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Multiplex to Hypergraph\n", "Layer is dropped. Edges across layers are merged by summing weights.\n" ], "id": "fbf7245c" }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([(0, 1)], 3.0, {'layer': ['L1', 'L2']})" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mx = hgx.MultiplexHypergraph(weighted=True)\n", "mx.add_edge((0, 1), layer=\"L1\", weight=1.0, metadata={\"layer\": \"L1\"})\n", "mx.add_edge((0, 1), layer=\"L2\", weight=2.0, metadata={\"layer\": \"L2\"})\n", "hg = mx.to_hypergraph()\n", "hg.get_edges(), hg.get_weight((0, 1)), hg.get_edge_metadata((0, 1))\n" ], "id": "987370b2" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Unweighted inputs become weighted counts\n", "Unweighted temporal/multiplex inputs are converted to weighted hypergraphs where\n", "the weight equals the number of occurrences.\n" ], "id": "a5319442" }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(True, 2)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th_u = hgx.TemporalHypergraph(weighted=False)\n", "th_u.add_edge((0, 1), time=1)\n", "th_u.add_edge((0, 1), time=2)\n", "hg_u = th_u.to_hypergraph()\n", "hg_u.is_weighted(), hg_u.get_weight((0, 1))\n" ], "id": "e8872866" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Quick visual sanity check\n", "Visualize the converted hypergraph to confirm merged hyperedges.\n" ], "id": "52df1697" }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "from hypergraphx.viz.draw_hypergraph import draw_hypergraph\n", "\n", "dh_viz = hgx.DirectedHypergraph(weighted=True)\n", "dh_viz.add_edge(((0, 1), (2,)), weight=1.0)\n", "dh_viz.add_edge(((2,), (0, 1)), weight=1.0)\n", "hg_viz = dh_viz.to_hypergraph()\n", "\n", "draw_hypergraph(hg_viz, with_node_labels=True)\n", "plt.show()\n" ], "id": "f80b43a8" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Metadata control\n", "You can drop node/edge/hypergraph metadata during conversion.\n" ], "id": "94c05106" }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "({}, {}, {'weighted': True, 'type': 'Hypergraph'})" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mx2 = hgx.MultiplexHypergraph(weighted=True)\n", "mx2.add_node(0, metadata={\"role\": \"root\"})\n", "mx2.add_edge((0, 1), layer=\"L1\", weight=1.0, metadata={\"tag\": \"x\"})\n", "hg2 = mx2.to_hypergraph(keep_node_metadata=False, keep_edge_metadata=False, keep_hypergraph_metadata=False)\n", "hg2.get_node_metadata(0), hg2.get_edge_metadata((0, 1)), hg2.get_hypergraph_metadata()\n" ], "id": "2bd4b931" } ], "metadata": { "kernelspec": { "display_name": "hgx-installation", "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.5" } }, "nbformat": 4, "nbformat_minor": 5 }