diff --git a/gtsam/inference/doc/BayesTree.ipynb b/gtsam/inference/doc/BayesTree.ipynb index e45b1f8fa..5364adc0a 100644 --- a/gtsam/inference/doc/BayesTree.ipynb +++ b/gtsam/inference/doc/BayesTree.ipynb @@ -57,7 +57,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 1, "metadata": { "id": "bayestree_import_code" }, @@ -88,7 +88,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -185,7 +185,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -219,7 +219,7 @@ ], "source": [ "# Eliminate multifrontally using COLAMD ordering\n", - "ordering = Ordering.Colamd(VariableIndex(graph))\n", + "ordering = Ordering.ColamdGaussianFactorGraph(graph)\n", "# Note: Multifrontal typically yields multiple roots if graph is disconnected\n", "bayes_tree = graph.eliminateMultifrontal(ordering)\n", "\n", @@ -229,7 +229,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -263,7 +263,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -342,7 +342,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -387,10 +387,10 @@ "\n" ], "text/plain": [ - "" + "" ] }, - "execution_count": 9, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } diff --git a/gtsam/inference/doc/EliminationTree.ipynb b/gtsam/inference/doc/EliminationTree.ipynb index 11b3d2ec9..75378e7d7 100644 --- a/gtsam/inference/doc/EliminationTree.ipynb +++ b/gtsam/inference/doc/EliminationTree.ipynb @@ -49,23 +49,11 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": { "id": "etree_import_code" }, - "outputs": [ - { - "ename": "ImportError", - "evalue": "cannot import name 'GaussianEliminationTree' from 'gtsam' (c:\\Users\\porte\\miniconda3\\envs\\gtsam\\Lib\\site-packages\\gtsam\\__init__.py)", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mImportError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[2], line 5\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mnumpy\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[0;32m 4\u001b[0m \u001b[38;5;66;03m# EliminationTree is templated, need concrete types\u001b[39;00m\n\u001b[1;32m----> 5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mgtsam\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m GaussianFactorGraph, Ordering, GaussianEliminationTree, GaussianBayesNet\n\u001b[0;32m 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mgtsam\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m symbol_shorthand\n\u001b[0;32m 8\u001b[0m X \u001b[38;5;241m=\u001b[39m symbol_shorthand\u001b[38;5;241m.\u001b[39mX\n", - "\u001b[1;31mImportError\u001b[0m: cannot import name 'GaussianEliminationTree' from 'gtsam' (c:\\Users\\porte\\miniconda3\\envs\\gtsam\\Lib\\site-packages\\gtsam\\__init__.py)" - ] - } - ], + "outputs": [], "source": [ "import gtsam\n", "import numpy as np\n", @@ -91,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -104,25 +92,71 @@ "name": "stdout", "output_type": "stream", "text": [ - "Elimination Tree: \n", - "Root(s):\n", - "Node (x2)\n", - "JacobianFactor(keys = [8070450532247928833; 8070450532247928834], A[0] = [ -1 1 ], b = [ 0 ], model = diagonal sigmas [1])\n", - "JacobianFactor(keys = [7783684379976990721; 8070450532247928834], A[0] = [ -1 1 ], b = [ 0 ], model = diagonal sigmas [1])\n", - " Children:\n", - " Node (l2)\n", - " JacobianFactor(keys = [7783684379976990721; 8070450532247928833], A[0] = [ -1 1 ], b = [ 0 ], model = diagonal sigmas [1])\n", - " Children:\n", - " Node (x1)\n", - " JacobianFactor(keys = [8070450532247928832; 8070450532247928833], A[0] = [ -1 1 ], b = [ 0 ], model = diagonal sigmas [1])\n", - " JacobianFactor(keys = [7783684379976990720; 8070450532247928833], A[0] = [ -1 1 ], b = [ 0 ], model = diagonal sigmas [1])\n", - " Children:\n", - " Node (l1)\n", - " JacobianFactor(keys = [7783684379976990720; 8070450532247928832], A[0] = [ -1 1 ], b = [ 0 ], model = diagonal sigmas [1])\n", - " Children:\n", - " Node (x0)\n", - " JacobianFactor(keys = [8070450532247928832], Z = [ -1 ], b = [ 0 ], model = diagonal sigmas [1])\n", - "\n" + "Elimination Tree: -(x2)\n", + "Elimination Tree: | -(l2)\n", + "Elimination Tree: | -\n", + " A[l2] = [\n", + "\t-1\n", + "]\n", + " A[x2] = [\n", + "\t1\n", + "]\n", + " b = [ 0 ]\n", + " Noise model: unit (1) \n", + "Elimination Tree: | | -(x1)\n", + "Elimination Tree: | | -\n", + " A[x1] = [\n", + "\t-1\n", + "]\n", + " A[x2] = [\n", + "\t1\n", + "]\n", + " b = [ 0 ]\n", + " Noise model: unit (1) \n", + "Elimination Tree: | | -\n", + " A[l2] = [\n", + "\t-1\n", + "]\n", + " A[x1] = [\n", + "\t1\n", + "]\n", + " b = [ 0 ]\n", + " Noise model: unit (1) \n", + "Elimination Tree: | | | -(l1)\n", + "Elimination Tree: | | | -\n", + " A[l1] = [\n", + "\t-1\n", + "]\n", + " A[x1] = [\n", + "\t1\n", + "]\n", + " b = [ 0 ]\n", + " Noise model: unit (1) \n", + "Elimination Tree: | | | | -(x0)\n", + "Elimination Tree: | | | | -\n", + " A[x0] = [\n", + "\t-1\n", + "]\n", + " b = [ 0 ]\n", + " Noise model: unit (1) \n", + "Elimination Tree: | | | | -\n", + " A[x0] = [\n", + "\t-1\n", + "]\n", + " A[x1] = [\n", + "\t1\n", + "]\n", + " b = [ 0 ]\n", + " Noise model: unit (1) \n", + "Elimination Tree: | | | | -\n", + " A[l1] = [\n", + "\t-1\n", + "]\n", + " A[x0] = [\n", + "\t1\n", + "]\n", + " b = [ 0 ]\n", + " Noise model: unit (1) \n" ] } ], @@ -160,7 +194,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -173,13 +207,42 @@ "name": "stdout", "output_type": "stream", "text": [ - "BayesNet from EliminationTree: size 5\n", - "Conditional 0: GaussianConditional( P(x0 | l1) = dx0 - R*dl1 - d), R = [ 0.5 ], d = [ 0 ], sigmas = [ 0.866025 ])\n", - "Conditional 1: GaussianConditional( P(l1 | x1) = dl1 - R*dx1 - d), R = [ 0.5 ], d = [ 0 ], sigmas = [ 0.866025 ])\n", - "Conditional 2: GaussianConditional( P(x1 | l2, x2) = dx1 - R1*dl2 - R2*dx2 - d), R1 = [ 0.333333 ], R2 = [ 0.333333 ], d = [ 0 ], sigmas = [ 0.745356 ])\n", - "Conditional 3: GaussianConditional( P(l2 | x2) = dl2 - R*dx2 - d), R = [ 0.5 ], d = [ 0 ], sigmas = [ 0.866025 ])\n", - "Conditional 4: GaussianConditional( P(x2) = dx2 - d), d = [ 0 ], sigmas = [ 0.774597 ])\n", - "\n" + "BayesNet from EliminationTree:\n", + "\n", + "size: 5\n", + "conditional 0: p(x0 | l1 x1)\n", + " R = [ 1.73205 ]\n", + " S[l1] = [ -0.57735 ]\n", + " S[x1] = [ -0.57735 ]\n", + " d = [ 0 ]\n", + " logNormalizationConstant: -0.369632\n", + " No noise model\n", + "conditional 1: p(l1 | x1)\n", + " R = [ 1.29099 ]\n", + " S[x1] = [ -1.0328 ]\n", + " d = [ 0 ]\n", + " logNormalizationConstant: -0.663526\n", + " No noise model\n", + "conditional 2: p(x1 | l2 x2)\n", + " R = [ 1.61245 ]\n", + " S[l2] = [ -0.620174 ]\n", + " S[x2] = [ -0.620174 ]\n", + " d = [ 0 ]\n", + " logNormalizationConstant: -0.441183\n", + " No noise model\n", + "conditional 3: p(l2 | x2)\n", + " R = [ 1.27098 ]\n", + " S[x2] = [ -1.08941 ]\n", + " d = [ 0 ]\n", + " logNormalizationConstant: -0.679152\n", + " No noise model\n", + "conditional 4: p(x2)\n", + " R = [ 0.654654 ]\n", + " d = [ 0 ]\n", + " mean: 1 elements\n", + " x2: 0\n", + " logNormalizationConstant: -1.34259\n", + " No noise model\n" ] } ], diff --git a/gtsam/inference/doc/ISAM.ipynb b/gtsam/inference/doc/ISAM.ipynb index 7e6a43269..f4daa82a8 100644 --- a/gtsam/inference/doc/ISAM.ipynb +++ b/gtsam/inference/doc/ISAM.ipynb @@ -47,7 +47,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": { "id": "isam_import_code" }, @@ -77,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -98,19 +98,17 @@ " mean: 1 elements\n", " x0: 0\n", " logNormalizationConstant: -0.918939\n", + " No noise model\n", + "ISAM from BayesTree:\n", + "GaussianISAM: : cliques: 1, variables: 1\n", + "GaussianISAM: - p(x0)\n", + " R = [ 1 ]\n", + " d = [ 0 ]\n", + " mean: 1 elements\n", + " x0: 0\n", + " logNormalizationConstant: -0.918939\n", " No noise model\n" ] - }, - { - "ename": "TypeError", - "evalue": "__init__(): incompatible constructor arguments. The following argument types are supported:\n 1. gtsam.gtsam.GaussianISAM()\n\nInvoked with: : cliques: 1, variables: 1\n- p(x0)\n R = [ 1 ]\n d = [ 0 ]\n mean: 1 elements\n x0: 0\n logNormalizationConstant: -0.918939\n No noise model\n", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[5], line 13\u001b[0m\n\u001b[0;32m 10\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mInitial BayesTree:\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 11\u001b[0m initial_bayes_tree\u001b[38;5;241m.\u001b[39mprint()\n\u001b[1;32m---> 13\u001b[0m isam2 \u001b[38;5;241m=\u001b[39m \u001b[43mGaussianISAM\u001b[49m\u001b[43m(\u001b[49m\u001b[43minitial_bayes_tree\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 14\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mISAM from BayesTree:\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 15\u001b[0m isam2\u001b[38;5;241m.\u001b[39mprint()\n", - "\u001b[1;31mTypeError\u001b[0m: __init__(): incompatible constructor arguments. The following argument types are supported:\n 1. gtsam.gtsam.GaussianISAM()\n\nInvoked with: : cliques: 1, variables: 1\n- p(x0)\n R = [ 1 ]\n d = [ 0 ]\n mean: 1 elements\n x0: 0\n logNormalizationConstant: -0.918939\n No noise model\n" - ] } ], "source": [ @@ -144,7 +142,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -154,14 +152,38 @@ }, "outputs": [ { - "ename": "TypeError", - "evalue": "__init__(): incompatible constructor arguments. The following argument types are supported:\n 1. gtsam.gtsam.GaussianISAM()\n\nInvoked with: : cliques: 1, variables: 1\n- p(x0)\n R = [ 1 ]\n d = [ 0 ]\n mean: 1 elements\n x0: 0\n logNormalizationConstant: -0.918939\n No noise model\n", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[6], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;66;03m# Start with the ISAM object containing the prior on x0\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m isam \u001b[38;5;241m=\u001b[39m \u001b[43mGaussianISAM\u001b[49m\u001b[43m(\u001b[49m\u001b[43minitial_bayes_tree\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 3\u001b[0m model \u001b[38;5;241m=\u001b[39m gtsam\u001b[38;5;241m.\u001b[39mnoiseModel\u001b[38;5;241m.\u001b[39mIsotropic\u001b[38;5;241m.\u001b[39mSigma(\u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m1.0\u001b[39m)\n\u001b[0;32m 5\u001b[0m \u001b[38;5;66;03m# --- First Update ---\u001b[39;00m\n", - "\u001b[1;31mTypeError\u001b[0m: __init__(): incompatible constructor arguments. The following argument types are supported:\n 1. gtsam.gtsam.GaussianISAM()\n\nInvoked with: : cliques: 1, variables: 1\n- p(x0)\n R = [ 1 ]\n d = [ 0 ]\n mean: 1 elements\n x0: 0\n logNormalizationConstant: -0.918939\n No noise model\n" + "name": "stdout", + "output_type": "stream", + "text": [ + "ISAM after first update (x0, x1):\n", + "GaussianISAM: : cliques: 1, variables: 2\n", + "GaussianISAM: - p(x1 x0 )\n", + " R = [ 1 -1 ]\n", + " [ 0 1 ]\n", + " d = [ 0 0 ]\n", + " mean: 2 elements\n", + " x0: 0\n", + " x1: 0\n", + " logNormalizationConstant: -1.83788\n", + " No noise model\n", + "\n", + "ISAM after second update (x0, x1, x2):\n", + "GaussianISAM: : cliques: 2, variables: 3\n", + "GaussianISAM: - p(x0 x1 )\n", + " R = [ 1.41421 -0.707107 ]\n", + " [ 0 0.707107 ]\n", + " d = [ 0 0 ]\n", + " mean: 2 elements\n", + " x0: 0\n", + " x1: 0\n", + " logNormalizationConstant: -1.83788\n", + " No noise model\n", + "GaussianISAM: | - p(x2 | x1)\n", + " R = [ 1 ]\n", + " S[x1] = [ -1 ]\n", + " d = [ 0 ]\n", + " logNormalizationConstant: -0.918939\n", + " No noise model\n" ] } ], @@ -200,7 +222,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -210,14 +232,14 @@ }, "outputs": [ { - "ename": "NameError", - "evalue": "name 'isam' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[7], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;66;03m# Get the solution from the final ISAM state\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m solution \u001b[38;5;241m=\u001b[39m \u001b[43misam\u001b[49m\u001b[38;5;241m.\u001b[39moptimize()\n\u001b[0;32m 3\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mOptimized Solution after updates:\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 4\u001b[0m solution\u001b[38;5;241m.\u001b[39mprint()\n", - "\u001b[1;31mNameError\u001b[0m: name 'isam' is not defined" + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimized Solution after updates:\n", + "VectorValues: 3 elements\n", + " x0: 0\n", + " x1: 0\n", + " x2: 0\n" ] } ], diff --git a/gtsam/inference/doc/JunctionTree.ipynb b/gtsam/inference/doc/JunctionTree.ipynb index 35b326dda..b5835f9df 100644 --- a/gtsam/inference/doc/JunctionTree.ipynb +++ b/gtsam/inference/doc/JunctionTree.ipynb @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 1, "metadata": { "id": "jtree_import_code" }, @@ -79,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -128,7 +128,7 @@ "graph.add(L(2), -np.eye(1), X(1), np.eye(1), np.zeros(1), model)\n", "graph.add(L(2), -np.eye(1), X(2), np.eye(1), np.zeros(1), model)\n", "\n", - "ordering = Ordering.Colamd(VariableIndex(graph))\n", + "ordering = Ordering.ColamdGaussianFactorGraph(graph)\n", "\n", "# Perform multifrontal elimination, which uses a JunctionTree internally\n", "bayes_tree, remaining_graph = graph.eliminatePartialMultifrontal(ordering)\n", diff --git a/gtsam/inference/doc/Ordering.ipynb b/gtsam/inference/doc/Ordering.ipynb index 7e3bab97e..80dbc58f9 100644 --- a/gtsam/inference/doc/Ordering.ipynb +++ b/gtsam/inference/doc/Ordering.ipynb @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 15, "metadata": { "id": "ordering_import_code" }, @@ -74,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -99,7 +99,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -130,7 +130,7 @@ "graph.push_factor(X(2), L(2))\n", "\n", "# COLAMD (Column Approximate Minimum Degree) ordering\n", - "colamd_ordering = Ordering.Colamd(VariableIndex(graph))\n", + "colamd_ordering = Ordering.ColamdSymbolicFactorGraph(graph)\n", "colamd_ordering.print(\"COLAMD Ordering: \")\n", "\n", "# Constrained COLAMD (force x0 and x2 to be eliminated last)\n", @@ -151,7 +151,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -190,7 +190,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/" diff --git a/gtsam/inference/doc/VariableIndex.ipynb b/gtsam/inference/doc/VariableIndex.ipynb index 0a3af8c3f..080e03fa1 100644 --- a/gtsam/inference/doc/VariableIndex.ipynb +++ b/gtsam/inference/doc/VariableIndex.ipynb @@ -40,12 +40,12 @@ }, "outputs": [], "source": [ - "%pip install gtsam" + "%pip install gtsam-develop" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 1, "metadata": { "id": "vindex_import_code" }, @@ -127,7 +127,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -142,18 +142,9 @@ "text": [ "Number of variables (size): 5\n", "Number of factors (nFactors): 7\n", - "Number of variable-factor entries (nEntries): 13\n" - ] - }, - { - "ename": "TypeError", - "evalue": "'gtsam.gtsam.VariableIndex' object is not subscriptable", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[3], line 6\u001b[0m\n\u001b[0;32m 3\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 variable-factor entries (nEntries): \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mvariable_index\u001b[38;5;241m.\u001b[39mnEntries()\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 5\u001b[0m \u001b[38;5;66;03m# Get factors involving a specific variable\u001b[39;00m\n\u001b[1;32m----> 6\u001b[0m factors_x1 \u001b[38;5;241m=\u001b[39m \u001b[43mvariable_index\u001b[49m\u001b[43m[\u001b[49m\u001b[43mX\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m \u001b[38;5;66;03m# Returns a FactorIndices (FastVector)\u001b[39;00m\n\u001b[0;32m 7\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFactors involving x1: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfactors_x1\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 9\u001b[0m \u001b[38;5;66;03m# Use key directly\u001b[39;00m\n", - "\u001b[1;31mTypeError\u001b[0m: 'gtsam.gtsam.VariableIndex' object is not subscriptable" + "Number of variable-factor entries (nEntries): 13\n", + "Factors involving x1: [1, 2, 4, 5]\n", + "Factors involving l1: [3, 4]\n" ] } ], @@ -163,17 +154,12 @@ "print(f\"Number of variable-factor entries (nEntries): {variable_index.nEntries()}\")\n", "\n", "# Get factors involving a specific variable\n", - "factors_x1 = variable_index[X(1)] # Returns a FactorIndices (FastVector)\n", + "factors_x1 = variable_index.at(X(1)) # Returns a FactorIndices (FastVector)\n", "print(f\"Factors involving x1: {factors_x1}\")\n", "\n", "# Use key directly\n", - "factors_l1 = variable_index[L(1)]\n", - "print(f\"Factors involving l1: {factors_l1}\")\n", - "\n", - "# Iterate through the index (items are pairs of Key, FactorIndices)\n", - "print(\"Iterating through VariableIndex:\")\n", - "for key, factor_indices in variable_index.items(): # Use .items() like a dict\n", - " print(f\" Variable {gtsam.DefaultKeyFormatter(key)} involves factors: {factor_indices}\")" + "factors_l1 = variable_index.at(L(1))\n", + "print(f\"Factors involving l1: {factors_l1}\")" ] }, {