diff --git a/mira/dkg/viz.py b/mira/dkg/viz.py new file mode 100644 index 000000000..9aaa9f9b1 --- /dev/null +++ b/mira/dkg/viz.py @@ -0,0 +1,31 @@ +import networkx as nx + + +def draw_relations(records, fname, is_full=False): + """Draw a graph of some DKG records queried from the /relations endpoint.""" + + graph = nx.DiGraph() + graph.graph["rankdir"] = "LR" + + for relation in records: + if is_full: + subject_curie = relation['subject']['id'] + subject_name = relation['subject']['name'] + object_curie = relation['object']['id'] + object_name = relation['object']['name'] + predicate_name = relation['predicate'].get('type') + predicate_curie = relation['predicate']['pred'] + + subject_node = f"{subject_name} ({subject_curie})" + predicate_edge = f"{predicate_name} ({predicate_curie})" \ + if predicate_name else predicate_curie + object_node = f"{object_name} ({object_curie})" + + graph.add_edge(subject_node, object_node, label=predicate_edge, + color="red", weight=2) + else: + graph.add_edge(relation['subject'], relation['object'], + label=relation['predicate'], + color="red", weight=2) + agraph = nx.nx_agraph.to_agraph(graph) + agraph.draw(path=fname, prog="dot", format="png") diff --git a/mira/modeling/ode.py b/mira/modeling/ode.py index ce505ca32..45e0750c8 100644 --- a/mira/modeling/ode.py +++ b/mira/modeling/ode.py @@ -98,7 +98,7 @@ def __init__(self, model: Model, initialized: bool): def get_interpretable_kinetics(self): # Return kinetics but with y and p substituted # based on vmap and pmap - subs = {self.y[v]: sympy.Symbol(k) for k, v in self.vmap.items()} + subs = {self.y[v]: sympy.Symbol(k) if isinstance(k, str) else k[0] for k, v in self.vmap.items()} subs.update({self.p[p]: sympy.Symbol(k) for k, p in self.pmap.items()}) return sympy.Matrix([ k.subs(subs) for k in self.kinetics diff --git a/notebooks/DKG_Viz_Demo.ipynb b/notebooks/DKG_Viz_Demo.ipynb new file mode 100644 index 000000000..002c73e30 --- /dev/null +++ b/notebooks/DKG_Viz_Demo.ipynb @@ -0,0 +1,272 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "b66c8437-de97-45f2-824d-16896e506c3e", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "\n", + "from IPython.display import Image\n", + "\n", + "from mira.dkg.viz import draw_relations" + ] + }, + { + "cell_type": "markdown", + "id": "42200188-6dc6-4df3-9943-3a0b097dafa3", + "metadata": {}, + "source": [ + "## Simple DKG relations visualization\n", + "Results returned from a simple relations query are visualized. Here, only the CURIEs (identifiers) are available." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e7b0c07e-539c-4eaa-ab03-66a41baf99d5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_json ={\n", + " \"source_curie\":\"probonto:k0000016\",\n", + "}\n", + "response = requests.post(\"http://34.230.33.149:8771/api/relations\", json=data_json)\n", + "response" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "e043ea1c-5cf5-40b1-a803-06bcf4b701ad", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "draw_relations(response.json(), 'graph.png')\n", + "\n", + "Image('graph.png')" + ] + }, + { + "cell_type": "markdown", + "id": "aa3e5418-ca4f-4968-87bf-a9843de5cf36", + "metadata": {}, + "source": [ + "## More Informative Node and Edge labels\n", + "If we add the key \"full\" to the payload, we can display the graph with named nodes and edges." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "2f011325-2de3-4d12-89dd-b4b031bfdc94", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_json ={\n", + " \"source_curie\":\"probonto:k0000016\",\n", + " \"full\": True\n", + "}\n", + "response = requests.post(\"http://34.230.33.149:8771/api/relations\", json=data_json)\n", + "response" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "f9c9abf1-2ca6-4aa9-8ea1-7c6334b226ff", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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ly83e41cLmejR49mxcXFrL6+nk2fPp0BYABYQEAA++abb9g333zDDh48yN555x0WHh7O1q5d26Hb1dU+p4SEBLZ06VJWX1/f7u919OhRFh4ezgIDA9v9vTgqlepP15GUlMQmTZrEALCamhqzZT///HM2ZcoUlpeXx3bv3s2GDBnCKioqumyZmzdvMicnJ+bn58dsbGwYADZ48GBWW1trUM+pU6fYxIkTGQC2adMmo9u9bds2s/ump6ipqWHvvPMO8/LyYiKRiL3zzjusoaHB3EuuUphCCCGEEELahVqtZgsWLGAWFhZs0aJFrKysrLNXqUtas2ZNlzlJ/7OmTp3KQkNDmUKhaPbcli1bmK2tLfv9998Nlu/fv5/5+fnx80qlkiUlJTEHBwc2YMCAZvVIJBK2YsWKe7/yLegqn9O1a9dYbGxsh77n3//+9w4NU1atWtXSiWyrbN26tcUw5ebNm0wgEDCJRMIvmzhxInvqqae6bJmVK1eyX3/9lTHGWFFREZszZw4DwNatW2ewbUqlkuXm5poMUxhjLC4ujv3www8m909PU1tby1atWsWsra3ZxIkTmUwmM1X0as9tU0kIIYQQQtqNTqfD9OnT8d133+H48eOIj4+Hh4dHZ69Wl2Sqaf795oMPPsD333+Pl156yejtPMuXL4eTkxP+8Y9/QKvV8suvXLkCe3t7ft7e3h6jRo0yWKbP29sbzzzzzL3fgBZ0hc+poaEBM2fOxLx58zr0fTty21NSUvDRRx/dk7qsra1bLLN69WqEhYXB29ubXzZu3Dh89tlnKCws7HJlqqurERsbi5EjRwIAfH198frrr8PCwgK///67wbbZ29u3OBzwK6+8gieffBJyubzFfdUTODs74z//+Q9+++033Lx5E2PHjjW5byhMIYQQQggh99zbb7+NxMREnD592mzfFz2RVqvF119/jRdeeAE//PADdDpdszI1NTX45JNPsHLlSuzYsQN1dXUGzysUCnz88cd45ZVXcOjQIUilUjQ0NID90R1idnY2Xn75ZTQ0NODo0aPYvn07H2C0VHdLz587dw7r16/HRx99hJ07d/LLN23aBEtLSzz22GNGt1sgEGDGjBlISUnBwYMHUVJSgi+//BJJSUmQy+X48ssv8eWXX5rdd+fPn4dOp0NISEi7b2drPie1Wo2TJ09i/fr1eP/995GdnW3w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ABo7diz9+uuvtHXrVpo4caJ4TmpqKrVr147++OMPIiIqKioie3t7+uqrr8Q8WppNQkICWVhY0HfffSemffrppzRkyBDxePv27eTn50d79uyhPXv20O7du2nLli00YsQIMe8mo7CQqKCgUbM8ffo09erVi3R1dWn48OF08uRJqqqqatRrMMrU189rKr/wafnc9aGp7pX9NO08735aXf18Tfm0Vj/t999/p8DAQDIwMKCuXbvSgQMHnkb9EKFVTJHL5XTkyBFyc3MjIyMjmjp1Kt27d6+pC/XMIJVK6fDhwwSAANCNGze02r/++usEgPz9/Sk1NbXO10lMTKQtW7YQANq4caPSZ4LTKVBYWEj+/v507Nixut/IE9DQ66mWuzYkEgl5eXnRrFmz6Pr163Tu3DmaNGkS6enp0cKFC58ob3VcvHiR+vXrR3p6ek+clyqK5Tty5AjZ2trSihUr6Msvv6QVK1YQAOrfvz9t27aNNmzYQEOHDqUXXniBiKorPjMzM3J2diYDAwMCQD179tTaaFbkhx9+oHnz5lFlZWWj35cqJ0+epK5du5Kbm1uTX0ugMb77K1eu0LBhw2o09NSxe/duGj58OCUlJdG+ffuoV69elJOT06Jtzp8/T0OHDiUA9Omnn2q9v6+++or69etH165dExudwnXWrl2r9dzWyoMHD2j+/PlkYmJCzs7OtG/fPqVn19TMnDmTzMzMaMyYMbRt2zaaPXs2+fv7U2JiIhERHTt2jDw8PAgABQYG0p07d8Rzq6qqKDg4mOzs7GjJkiU0ffp0Gj9+vJIodOXKFerbty95eHjQqlWraMaMGRQcHEylpaV1zuf48ePk5uZGAGjBggWUkJBAhw4dInd3dwJAixcvpqysLEpISCAHBweysbGhr7/+us5lvHDhAgGglStXimkFBQU0duxYsb52c3OjmzdvKj2769ev06BBg2jDhg00adIktZ0XLc0mJCSEPD09af369bRgwQKaPHmyKHTt2bNHvF/Vzd3dvel/l9evExkZEb3xBtEPPxA9gbiYlZVFb775JgGgwYMHU1hYWCMWlNFGff28pvJDn5bPTVR3X6Ip7pX9tNp5nv20uvr5teXTmv20pKQkmj17Nunp6VG/fv3o/v37TXk5zWJKbm4uDRkyhPT09Oitt96ijIyMpizIM0tlZSVZWVkRABo3bpxGuwcP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78LOzg5eXl4tzkYRTb8zHR0dBAQE4Pbt20rpgiMYEBCglC6ILu7u7mAeU1paim3btqFLly747rvvsG/fPmzZskXrcDyGea4xMQHGjwdOnQIePQK+/RYYPBioZUizubk5zpw5gyFDhuC1117D22+/LfbitzYaUlfX5rt4eXlBV1cXISEhSn5JfHw8bt26pTbPkpIS7Nq1C23atMHnn3+O33//HcXFxTWGgQo0RT0vUF+fuyE+akNYvXq16HMbGBhg+vTpWv069tPYT1P007T5+fX191qrn1ZYWIilS5eib9++cHd3R2hoKBwdHZvkWlprsZkzZyI2NhZvvvkmFi5cCBcXF6xYsQIpKSlNUphnkdLS0hrhge+//z6MjY0xZswYtG/fXkwXVETVSAZXV1dIpVKcP38eRITDhw/j6tWrKCgoQEFBAaqqqsRl7BSXdBJCKsPCwnDp0iWUl5ertRN47733UFZWhry8PCU129TUFABw/PhxVFZW4sKFC7hz5w4kEgliY2ORmJgoLm2mqpqrXq8ueamW28TEBO+++y6uXbuGAQMG4Pvvv8fevXsxefJkcfynXC7HtGnTaiznd+DAAXTv3h19+/bV+Exqe74eHh547bXXcPLkSezduxcAIJPJEBERASJCamoqLCwsai3jo0ePAEBJdKysrERFRYUo5qgrnyKCYKR6nwI7duzA119/DUtLS+zduxd79uzBl19+iVGjRmntRfLx8dFYSRcUFCj9T585cwa9e/fGuHHjAEDtd29vb4/3338fiYmJ+O2338T048ePIzAwEAMGDBDTSktLlea+2bhxI4KCgjBw4MA659OQZ2tpaVmnvDMzMzF+/Hilylzxdz106FB88skn2LlzJ7Zu3SraLFmyBJWVlWKFVlxcjJ07d2L16tViT1dLsxEQnGp174kvv/wSmZmZSiLhqVOnMGTIEAwePFjJNj09HdbW1qIg2dpJTEzE0qVL4eLigg8//BATJ05EbGys0tAohmk1GBoC//gHcOgQkJcHfPcdMGLE4wiVOmJiYoKDBw/iyJEj+OWXX9CpUycsXbq01YkqDamrbWxstPouTk5OmDZtGu7evYvAwEBcvHgR27Ztw4oVK8QVE1X9PLlcjpUrV4r+i5+fH7p06SLWwar2jVnPP6nP3RAftby8vM4+sPC95OXlYfjw4XBwcMCGDRvw22+/YcOGDdAG+2nspwF18/Pr4++1Nj+toKAA69atQ8eOHbFjxw5s3rwZFy5caNoVius6VW1mZiatXLmS7O3tSUdHhwICAmjnzp2tepb133//nd544w0CQO+++y5dv35d/GzOnDl07949IqqehXrbtm3k4eFBAMjZ2Zk2bdpEjx49IqLq2ce7detGAMjBwYH27dtHs2fPJhsbG/rwww/p3r17NGfOHAJAXl5edPz4cSIiSkhIIAcHB7KxsaGvv/6aUlJSlOxOnz5do8xDhw6lM2fO1EifOnUq6erqkoODA+3YsYNWr15Nurq69OGHH9KxY8fEsgcGBtKdO3eIiDReT1te6sotPINp06YRUL1Sj6WlpdLs85MnT6Zx48aRj48PzZgxg5YtW0be3t70yiuvUGJiominKW9tzzc3N5cyMzOpf//+BIC6du1KY8aMoSlTppC5uTnNmzePHj58qLWMx48fJzc3NwJACxYsoISEBDp06BC5u7sTAFq8eDFlZWWpLZ/AgQMHyNfXlwCQtbU1rV69WpzJnIhoz5494rVVN3d3d60r+nz//fdkZGRExcXFSukzZ84kMzMzGjNmDG3bto1mz55N/v7+4jPV9N0TEVVVVVFwcDDZ2dnRkiVLaPr06TR+/HgqKysTba5cuUJ9+/YlDw8PWrVqFc2YMYOCg4OptLS0zvk8ybOtSxkvXLhAAGjlypVERHTkyBHy8vIiAPTee+9RbGwsnTp1igCQrq4uLViwgKKjo4mI6Pr16zRo0CDasGEDTZo0ib744osaz76l2Vy9epXmzp1LAKhz5860bdu2Gqv0hISEkKenJ61fv54WLFhAkydPppKSkhp5+fn5UXBwcI301kROTg5t376dXn75ZdLR0aF27drRZ599RtnZ2c1dNIZ57igtLaWNGzeSnZ0dGRoa0qRJk+jSpUta67/ngSepq2vzrwoKCmjs2LHi525ubnTz5k0iUu/nFRYWkomJCb344ou0ZcsW+vTTT2nGjBkkk8k0+oWNUc8fOXKkUXzu+vqo9fGBjx07RhYWFjRz5kyqrKwkIqL//e9/BID09PTo448/VvJ/FGE/jf20+vj5dbkWUevx0yIiIuidd94hMzMzsrCwoH/961/i/3xTX7rOYoqATCajEydO0IQJE8jExIT09PQoICCANmzYIP5wmfojl8vp7t27YoMlJiZG4wtX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", + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "draw_relations(response.json(), 'graph.png', is_full=True)\n", + "\n", + "Image('graph.png')" + ] + }, + { + "cell_type": "markdown", + "id": "0387f21f-9a00-4e64-bcb2-e4a7f70d5b1d", + "metadata": {}, + "source": [ + "## Data validation\n", + "We can look at the underlying relations to check how it related to subgraph." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "9f79d3af-5c5f-4b72-9b82-c49727c0090b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'subject': {'id': 'probonto:k0000016',\n", + " 'name': 'MultivariateStudentT2',\n", + " 'type': 'class',\n", + " 'obsolete': False,\n", + " 'description': None,\n", + " 'synonyms': [],\n", + " 'alts': [],\n", + " 'xrefs': [],\n", + " 'labels': [],\n", + " 'properties': {'has_parameter': ['mean',\n", + " 'precisionMatrix',\n", + " 'degreesOfFreedom']},\n", + " 'link': 'http://34.230.33.149:8772/probonto:k0000016'},\n", + " 'predicate': {'pred': 'probonto:c0000062',\n", + " 'source': 'probonto',\n", + " 'version': '2.5',\n", + " 'graph': 'https://raw.githubusercontent.com/probonto/ontology/master/probonto4ols.owl'},\n", + " 'object': {'id': 'probonto:k0000021',\n", + " 'name': 'degreesOfFreedom',\n", + " 'type': 'class',\n", + " 'obsolete': False,\n", + " 'description': None,\n", + " 'synonyms': [{'value': 'k', 'type': 'referenced_by_latex'},\n", + " {'value': 'degrees of freedom', 'type': 'oboInOwl:hasExactSynonym'}],\n", + " 'alts': [],\n", + " 'xrefs': [],\n", + " 'labels': [],\n", + " 'properties': {},\n", + " 'link': 'http://34.230.33.149:8772/probonto:k0000021'}},\n", + " {'subject': {'id': 'probonto:k0000016',\n", + " 'name': 'MultivariateStudentT2',\n", + " 'type': 'class',\n", + " 'obsolete': False,\n", + " 'description': None,\n", + " 'synonyms': [],\n", + " 'alts': [],\n", + " 'xrefs': [],\n", + " 'labels': [],\n", + " 'properties': {'has_parameter': ['mean',\n", + " 'precisionMatrix',\n", + " 'degreesOfFreedom']},\n", + " 'link': 'http://34.230.33.149:8772/probonto:k0000016'},\n", + " 'predicate': {'pred': 'probonto:c0000062',\n", + " 'source': 'probonto',\n", + " 'version': '2.5',\n", + " 'graph': 'https://raw.githubusercontent.com/probonto/ontology/master/probonto4ols.owl'},\n", + " 'object': {'id': 'probonto:k0000020',\n", + " 'name': 'precisionMatrix',\n", + " 'type': 'class',\n", + " 'obsolete': False,\n", + " 'description': None,\n", + " 'synonyms': [{'value': 'T', 'type': 'referenced_by_latex'},\n", + " {'value': 'precision matrix', 'type': 'oboInOwl:hasExactSynonym'}],\n", + " 'alts': [],\n", + " 'xrefs': [],\n", + " 'labels': [],\n", + " 'properties': {},\n", + " 'link': 'http://34.230.33.149:8772/probonto:k0000020'}},\n", + " {'subject': {'id': 'probonto:k0000016',\n", + " 'name': 'MultivariateStudentT2',\n", + " 'type': 'class',\n", + " 'obsolete': False,\n", + " 'description': None,\n", + " 'synonyms': [],\n", + " 'alts': [],\n", + " 'xrefs': [],\n", + " 'labels': [],\n", + " 'properties': {'has_parameter': ['mean',\n", + " 'precisionMatrix',\n", + " 'degreesOfFreedom']},\n", + " 'link': 'http://34.230.33.149:8772/probonto:k0000016'},\n", + " 'predicate': {'pred': 'probonto:c0000062',\n", + " 'source': 'probonto',\n", + " 'version': '2.5',\n", + " 'graph': 'https://raw.githubusercontent.com/probonto/ontology/master/probonto4ols.owl'},\n", + " 'object': {'id': 'probonto:k0000019',\n", + " 'name': 'mean',\n", + " 'type': 'class',\n", + " 'obsolete': False,\n", + " 'description': None,\n", + " 'synonyms': [{'value': '\\\\mu', 'type': 'referenced_by_latex'},\n", + " {'value': 'location', 'type': 'oboInOwl:hasExactSynonym'}],\n", + " 'alts': [],\n", + " 'xrefs': [],\n", + " 'labels': [],\n", + " 'properties': {},\n", + " 'link': 'http://34.230.33.149:8772/probonto:k0000019'}}]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "response.json()" + ] + } + ], + "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.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tests/test_dkg.py b/tests/test_dkg.py index ac05b2911..7201c23bb 100644 --- a/tests/test_dkg.py +++ b/tests/test_dkg.py @@ -13,10 +13,10 @@ from mira.dkg.api import get_relations from mira.dkg.client import AskemEntity, Entity, METAREGISTRY_BASE from mira.dkg.utils import MiraState +from mira.dkg.viz import draw_relations MIRA_NEO4J_URL = pystow.get_config("mira", "neo4j_url") or os.getenv("MIRA_NEO4J_URL") - @unittest.skipIf(not MIRA_NEO4J_URL, reason="Missing neo4j connection configuration") class TestDKG(unittest.TestCase): """Test the DKG.""" @@ -83,12 +83,23 @@ def test_get_relations(self): spec = inspect.signature(get_relations) relation_query_default = spec.parameters["relation_query"].default self.assertIsInstance(relation_query_default, fastapi.params.Body) - for key, data in relation_query_default.examples.items(): with self.subTest(key=key): response = self.client.post("/api/relations", json=data["value"]) self.assertEqual(200, response.status_code, msg=response.content) + def test_get_relations_graph(self): + "Test getting graph output of relations.""" + spec = inspect.signature(get_relations) + relation_query_default = spec.parameters["relation_query"].default + self.assertIsInstance(relation_query_default, fastapi.params.Body) + for key, data in relation_query_default.examples.items(): + with self.subTest(key=key): + response = self.client.post("/api/relations", json=data["value"]) + is_full = data['value'].get('full', False) + draw_relations(response.json(), f"test_{key}.png", + is_full=is_full) + def test_search(self): """Test search functionality.""" res1 = self.client.get("/api/search", params={