Graphviz/dot cleanup

release/4.3a0
p-zach 2025-04-14 19:14:52 -04:00
parent b54ad4e3f0
commit f48e94fa25
4 changed files with 28 additions and 91 deletions

View File

@ -57,7 +57,7 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 8,
"metadata": {
"id": "bayesnet_import_code"
},
@ -65,6 +65,7 @@
"source": [
"import gtsam\n",
"import numpy as np\n",
"import graphviz\n",
"\n",
"# We need concrete graph types and elimination to get a BayesNet\n",
"from gtsam import GaussianFactorGraph, Ordering, GaussianBayesNet\n",
@ -87,7 +88,7 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 9,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@ -184,7 +185,7 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 10,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@ -235,7 +236,7 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 11,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@ -282,7 +283,7 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 12,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@ -291,22 +292,6 @@
"outputId": "3456789a-bcde-f012-3456-789abcdef012"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"digraph {\n",
" size=\"5,5\";\n",
"\n",
" var8646911284551352320[label=\"x0\"];\n",
" var8646911284551352321[label=\"x1\"];\n",
" var8646911284551352322[label=\"x2\"];\n",
"\n",
" var8646911284551352322->var8646911284551352321\n",
" var8646911284551352321->var8646911284551352320\n",
"}\n"
]
},
{
"data": {
"image/svg+xml": [
@ -354,22 +339,16 @@
"</svg>\n"
],
"text/plain": [
"<graphviz.sources.Source at 0x2c3022fcc20>"
"<graphviz.sources.Source at 0x18b7818a990>"
]
},
"execution_count": 5,
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dot_string = bayes_net.dot()\n",
"print(dot_string)\n",
"\n",
"# To render:\n",
"# dot -Tpng bayesnet.dot -o bayesnet.png\n",
"import graphviz\n",
"graphviz.Source(dot_string)"
"graphviz.Source(bayes_net.dot())"
]
}
],

View File

@ -57,7 +57,7 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 8,
"metadata": {
"id": "bayestree_import_code"
},
@ -65,6 +65,7 @@
"source": [
"import gtsam\n",
"import numpy as np\n",
"import graphviz\n",
"\n",
"# We need concrete graph types and elimination to get a BayesTree\n",
"from gtsam import GaussianFactorGraph, Ordering, GaussianBayesTree, VariableIndex\n",
@ -239,7 +240,7 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 5,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@ -262,7 +263,7 @@
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[1;32mIn[4], line 4\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mBayesTree number of cliques: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbayes_tree\u001b[38;5;241m.\u001b[39msize()\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 3\u001b[0m \u001b[38;5;66;03m# Access roots\u001b[39;00m\n\u001b[1;32m----> 4\u001b[0m roots \u001b[38;5;241m=\u001b[39m \u001b[43mbayes_tree\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mroots\u001b[49m()\n\u001b[0;32m 5\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNumber of roots: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlen\u001b[39m(roots)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 6\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m roots:\n\u001b[0;32m 7\u001b[0m \u001b[38;5;66;03m# Access the conditional associated with the first root clique\u001b[39;00m\n",
"Cell \u001b[1;32mIn[5], line 4\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mBayesTree number of cliques: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbayes_tree\u001b[38;5;241m.\u001b[39msize()\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 3\u001b[0m \u001b[38;5;66;03m# Access roots\u001b[39;00m\n\u001b[1;32m----> 4\u001b[0m roots \u001b[38;5;241m=\u001b[39m \u001b[43mbayes_tree\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mroots\u001b[49m()\n\u001b[0;32m 5\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNumber of roots: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlen\u001b[39m(roots)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 6\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m roots:\n\u001b[0;32m 7\u001b[0m \u001b[38;5;66;03m# Access the conditional associated with the first root clique\u001b[39;00m\n",
"\u001b[1;31mAttributeError\u001b[0m: 'gtsam.gtsam.GaussianBayesTree' object has no attribute 'roots'"
]
}
@ -298,7 +299,7 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 6,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@ -377,7 +378,7 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 9,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@ -386,17 +387,6 @@
"outputId": "789abcde-f012-3456-789a-bcdef0123456"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"digraph G{\n",
"0[label=\"x1, l2, x2\"];\n",
"0->1\n",
"1[label=\"l1, x0 : x1\"];\n",
"}\n"
]
},
{
"data": {
"image/svg+xml": [
@ -433,22 +423,16 @@
"</svg>\n"
],
"text/plain": [
"<graphviz.sources.Source at 0x1241c40dbe0>"
"<graphviz.sources.Source at 0x1698193de80>"
]
},
"execution_count": 6,
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dot_string = bayes_tree.dot()\n",
"print(dot_string)\n",
"\n",
"# To render:\n",
"# dot -Tpng bayestree.dot -o bayestree.png\n",
"import graphviz\n",
"graphviz.Source(dot_string)"
"graphviz.Source(bayes_tree.dot())"
]
}
],

View File

@ -123,7 +123,7 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@ -300,7 +300,6 @@
"\n",
"# Generate dot string using the configured writer\n",
"dot_string = graph.dot(writer=writer)\n",
"# print(dot_string)\n",
"\n",
"# Render the graph\n",
"graphviz.Source(dot_string)"

View File

@ -58,7 +58,7 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 1,
"metadata": {
"id": "fg_import_code"
},
@ -66,6 +66,7 @@
"source": [
"import gtsam\n",
"import numpy as np\n",
"import graphviz\n",
"\n",
"# Example uses NonlinearFactorGraph, but concepts apply to others\n",
"from gtsam import NonlinearFactorGraph, PriorFactorPose2, BetweenFactorPose2, Pose2, Point3\n",
@ -87,7 +88,7 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 2,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@ -134,7 +135,7 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 3,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@ -191,7 +192,7 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 4,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@ -237,7 +238,7 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 5,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@ -246,25 +247,6 @@
"outputId": "56789abc-def0-1234-5678-9abcdef01234"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"graph {\n",
" size=\"5,5\";\n",
"\n",
" var8646911284551352320[label=\"x0\", pos=\"0,0!\"];\n",
" var8646911284551352321[label=\"x1\", pos=\"0,1!\"];\n",
"\n",
" factor0[label=\"\", shape=point];\n",
" var8646911284551352320--factor0;\n",
" factor1[label=\"\", shape=point];\n",
" var8646911284551352320--factor1;\n",
" var8646911284551352321--factor1;\n",
"}\n",
"\n"
]
},
{
"data": {
"image/svg+xml": [
@ -319,23 +301,16 @@
"</svg>\n"
],
"text/plain": [
"<graphviz.sources.Source at 0x1c24ffedfd0>"
"<graphviz.sources.Source at 0x17b3cbfcc20>"
]
},
"execution_count": 8,
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dot_string = graph.dot(values)\n",
"print(dot_string)\n",
"\n",
"# To render, save dot_string to a file (e.g., graph.dot) and run:\n",
"# dot -Tpng graph.dot -o graph.png\n",
"# Or use a Python library like graphviz\n",
"import graphviz\n",
"graphviz.Source(dot_string)"
"graphviz.Source(graph.dot(values))"
]
},
{